From 5f6da6ec60d264588c62c37f59ef6a517514a593 Mon Sep 17 00:00:00 2001 From: numzero Date: Fri, 11 Apr 2025 20:48:40 +0300 Subject: [PATCH] side effects! --- src/run.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/run.rs b/src/run.rs index 33283f6..be7ebaa 100644 --- a/src/run.rs +++ b/src/run.rs @@ -226,4 +226,31 @@ mod tests { assert_eq!(scope.get("foo"), Some(42.into())); assert_eq!(scope.get("bar"), None); } + + #[test] + fn test_call_statement() { + let mut scope = Scope::default(); + scope.add_fn("set", |scope, args| { + let [key, value] = args.as_slice() else { + panic!("exactly two arguments expected"); + }; + let Some(ValueInner::String(key)) = key else { + panic!("string expected"); + }; + scope.set(key.clone(), value.clone()); + None + }); + assert_eq!(scope.get("foo"), None); + assert_eq!(scope.get("bar"), None); + ast::Statement::Call { + callee: "set".into(), + args: vec![ + ast::Expression::Constant(ast::Constant::String("foo".into())), + ast::Expression::Constant(ast::Constant::Number(42)), + ], + } + .exec(&mut scope); + assert_eq!(scope.get("foo"), Some(42.into())); + assert_eq!(scope.get("bar"), None); + } }