diff --git a/src/interpreter.rs b/src/interpreter.rs index fce242d..88cc559 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -2055,7 +2055,12 @@ impl Interpreter { } } - let v = builtin.0(span, params, &args[..], self.strict_builtin_errors)?; + let v = match builtin.0(span, params, &args[..], self.strict_builtin_errors) { + Ok(v) => v, + // Ignore errors if we are not evaluating in strict mode. + Err(_) if !self.strict_builtin_errors => return Ok(Value::Undefined), + Err(e) => Err(e)?, + }; // Handle trace function. // TODO: with modifier. diff --git a/tests/interpreter/cases/nonstrict/tests.yaml b/tests/interpreter/cases/nonstrict/tests.yaml new file mode 100644 index 0000000..665ff13 --- /dev/null +++ b/tests/interpreter/cases/nonstrict/tests.yaml @@ -0,0 +1,19 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + cases: + - note: builtin error gobbled up in non strict mode + modules: + - | + package test + a = to_number("abc") + query: data.test + want_result: {} + strict: false + + - note: builtin error in strict mode + modules: + - | + package test + a = to_number("abc") + query: data.test + error: "could not parse string as number"