diff --git a/builtins.go b/builtins.go index 0bc165d..1aad57e 100644 --- a/builtins.go +++ b/builtins.go @@ -47,7 +47,7 @@ func builtinPlus(i *interpreter, trace traceElement, x, y value) (value, error) if err != nil { return nil, err } - return makeValueNumber(left.value + right.value), nil + return makeDoubleCheck(i, trace, left.value+right.value) case *valueString: right, err := builtinToString(i, trace, y) if err != nil { @@ -82,7 +82,7 @@ func builtinMinus(i *interpreter, trace traceElement, xv, yv value) (value, erro if err != nil { return nil, err } - return makeValueNumber(x.value - y.value), nil + return makeDoubleCheck(i, trace, x.value-y.value) } func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error) { @@ -94,7 +94,7 @@ func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error if err != nil { return nil, err } - return makeValueNumber(x.value * y.value), nil + return makeDoubleCheck(i, trace, x.value*y.value) } func builtinDiv(i *interpreter, trace traceElement, xv, yv value) (value, error) { diff --git a/interpreter.go b/interpreter.go index 1f6c35a..84019bc 100644 --- a/interpreter.go +++ b/interpreter.go @@ -886,7 +886,7 @@ func jsonToValue(i *interpreter, trace traceElement, v interface{}) (value, erro case bool: return makeValueBoolean(v), nil case float64: - return makeValueNumber(v), nil + return makeDoubleCheck(i, trace, v) case map[string]interface{}: fieldMap := map[string]value{} diff --git a/testdata/inf_min_number.golden b/testdata/inf_min_number.golden new file mode 100644 index 0000000..226bd40 --- /dev/null +++ b/testdata/inf_min_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_min_number:1:1-15 $ + +-1e308 - 1e308 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_min_number.jsonnet b/testdata/inf_min_number.jsonnet new file mode 100644 index 0000000..d5b6cbe --- /dev/null +++ b/testdata/inf_min_number.jsonnet @@ -0,0 +1 @@ +-1e308 - 1e308 diff --git a/testdata/inf_mul_number.golden b/testdata/inf_mul_number.golden new file mode 100644 index 0000000..eef6362 --- /dev/null +++ b/testdata/inf_mul_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_mul_number:1:1-19 $ + +1e300 * 1000000000 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_mul_number.jsonnet b/testdata/inf_mul_number.jsonnet new file mode 100644 index 0000000..a4bc05c --- /dev/null +++ b/testdata/inf_mul_number.jsonnet @@ -0,0 +1 @@ +1e300 * 1000000000 \ No newline at end of file diff --git a/testdata/inf_sum_number.golden b/testdata/inf_sum_number.golden new file mode 100644 index 0000000..e9a1639 --- /dev/null +++ b/testdata/inf_sum_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_sum_number:1:1-14 $ + +1e308 + 1e308 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_sum_number.jsonnet b/testdata/inf_sum_number.jsonnet new file mode 100644 index 0000000..9d37bc0 --- /dev/null +++ b/testdata/inf_sum_number.jsonnet @@ -0,0 +1 @@ +1e308 + 1e308