diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-02-02 14:13:56 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-02-02 14:13:56 +0100 |
| commit | 5f5c65927982447133b625edea3f5c9bab4f9e3d (patch) | |
| tree | aa5edb320e21466d16a1d15ad320d164f94738db /src/model/eval.rs | |
| parent | 21dd99926a24d7cc69bf6b032d1107c78a04a5cf (diff) | |
Math tests
Diffstat (limited to 'src/model/eval.rs')
| -rw-r--r-- | src/model/eval.rs | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/model/eval.rs b/src/model/eval.rs index 6e03d440..1fbf4125 100644 --- a/src/model/eval.rs +++ b/src/model/eval.rs @@ -919,32 +919,26 @@ impl Eval for ast::FuncCall { // field access and does not evaluate to a module. let (callee, mut args) = if let ast::Expr::FieldAccess(access) = callee { let target = access.target(); - let method = access.field(); - let method_span = method.span(); - let method = method.take(); - let point = || Tracepoint::Call(Some(method.clone())); - if methods::is_mutating(&method) { + let field = access.field(); + let field_span = field.span(); + let field = field.take(); + let point = || Tracepoint::Call(Some(field.clone())); + if methods::is_mutating(&field) { let args = args.eval(vm)?; - let value = target.access(vm)?; - - let value = if let Value::Module(module) = &value { - module.get(&method).cloned().at(method_span)? - } else { - return methods::call_mut(value, &method, args, span) + let target = target.access(vm)?; + if !matches!(target, Value::Symbol(_) | Value::Module(_)) { + return methods::call_mut(target, &field, args, span) .trace(vm.world, point, span); - }; - - (value, args) + } + (target.field(&field).at(field_span)?, args) } else { let target = target.eval(vm)?; let args = args.eval(vm)?; - let value = if let Value::Module(module) = &target { - module.get(&method).cloned().at(method_span)? - } else { - return methods::call(vm, target, &method, args, span) + if !matches!(target, Value::Symbol(_) | Value::Module(_)) { + return methods::call(vm, target, &field, args, span) .trace(vm.world, point, span); - }; - (value, args) + } + (target.field(&field).at(field_span)?, args) } } else { (callee.eval(vm)?, args.eval(vm)?) |
