difftreelog
perf do not use intrinsics for == operator
in: master
3 files changed
crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate.rs
@@ -1,6 +1,7 @@
use crate::{
error::Error::*, lazy_val, push, throw, with_state, Context, ContextCreator, FuncDesc, FuncVal,
FutureWrapper, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,
+ equals,
};
use closure::closure;
use jrsonnet_interner::IStr;
@@ -147,6 +148,9 @@
Ok(match (a, op, b) {
(a, BinaryOpType::Add, b) => evaluate_add_op(a, b)?,
+ (a, BinaryOpType::Eq, b) => Val::Bool(equals(&a, &b)?),
+ (a, BinaryOpType::Neq, b) => Val::Bool(!equals(&a, &b)?),
+
(Val::Str(v1), BinaryOpType::Mul, Val::Num(v2)) => Val::Str(v1.repeat(*v2 as usize).into()),
// Bool X Bool
crates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth113 BitOr,113 BitOr,114 BitXor,114 BitXor,115116 Eq,117 Neq,115118116 And,119 And,117 Or,120 Or,137 BitAnd => "&",140 BitAnd => "&",138 BitOr => "|",141 BitOr => "|",139 BitXor => "^",142 BitXor => "^",143 Eq => "==",144 New => "!=",140 And => "&&",145 And => "&&",141 Or => "||",146 Or => "||",142 }147 }crates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-parser/src/lib.rs
+++ b/crates/jrsonnet-parser/src/lib.rs
@@ -227,16 +227,8 @@
--
a:(@) _ binop(<"&">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitAnd, b))}
--
- a:(@) _ binop(<"==">) _ b:@ {loc_expr_todo!(Expr::Apply(
- el!(Expr::Intrinsic("equals".into())),
- ArgsDesc(vec![Arg(None, a), Arg(None, b)]),
- true
- ))}
- a:(@) _ binop(<"!=">) _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, el!(Expr::Apply(
- el!(Expr::Intrinsic("equals".into())),
- ArgsDesc(vec![Arg(None, a), Arg(None, b)]),
- true
- ))))}
+ a:(@) _ binop(<"==">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Eq, b))}
+ a:(@) _ binop(<"!=">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Neq, b))}
--
a:(@) _ binop(<"<">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lt, b))}
a:(@) _ binop(<">">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gt, b))}