mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
Make unary - operator OPA compatible. (#175)
OPA supports unary - operator only in the following cases: -\s+numeric literal We match OPAs behavior for now. This can be revisited later.
This commit is contained in:
committed by
GitHub
parent
08f3007b5c
commit
7bc9a50a52
@@ -2699,7 +2699,22 @@ impl Interpreter {
|
||||
key, value, query, ..
|
||||
} => self.eval_object_compr(key, value, query),
|
||||
Expr::SetCompr { term, query, .. } => self.eval_set_compr(term, query),
|
||||
Expr::UnaryExpr { .. } => unimplemented!("unar expr is umplemented"),
|
||||
Expr::UnaryExpr { span, expr: uexpr } => match uexpr.as_ref() {
|
||||
Expr::Number(_) if !uexpr.span().text().starts_with('-') => {
|
||||
builtins::numbers::arithmetic_operation(
|
||||
span,
|
||||
&ArithOp::Sub,
|
||||
expr,
|
||||
uexpr,
|
||||
Value::from(0),
|
||||
self.eval_expr(uexpr)?,
|
||||
self.strict_builtin_errors,
|
||||
)
|
||||
}
|
||||
_ => bail!(expr
|
||||
.span()
|
||||
.error("unary - can only be used with numeric literals")),
|
||||
},
|
||||
Expr::Call { span, fcn, params } => {
|
||||
self.eval_call(span, expr, fcn, params, None, false)
|
||||
}
|
||||
|
||||
46
tests/interpreter/cases/unary/tests.yaml
Normal file
46
tests/interpreter/cases/unary/tests.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
cases:
|
||||
- note: unary expr on non literals produces an error
|
||||
modules:
|
||||
- |
|
||||
package test
|
||||
|
||||
x = - y
|
||||
y = 1
|
||||
query: data.test
|
||||
error: "unary - can only be used with numeric literals"
|
||||
|
||||
- note: unary expr on literals work
|
||||
modules:
|
||||
- |
|
||||
package test
|
||||
|
||||
x = - 1 # With space
|
||||
y = -1
|
||||
z = - # With newlines and comment
|
||||
|
||||
1
|
||||
query: data.test
|
||||
want_result:
|
||||
x: -1
|
||||
y: -1
|
||||
z: -1
|
||||
|
||||
- note: double unary expr
|
||||
modules:
|
||||
- |
|
||||
package test
|
||||
|
||||
x = - -1
|
||||
query: data.test
|
||||
error: "unary - can only be used with numeric literals"
|
||||
|
||||
- note: double unary expr double space
|
||||
modules:
|
||||
- |
|
||||
package test
|
||||
|
||||
x = - - 1
|
||||
query: data.test
|
||||
error: "unary - can only be used with numeric literals"
|
||||
Reference in New Issue
Block a user