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.rsdiffbeforeafterboth--- a/crates/jrsonnet-parser/src/expr.rs
+++ b/crates/jrsonnet-parser/src/expr.rs
@@ -113,6 +113,9 @@
BitOr,
BitXor,
+ Eq,
+ Neq,
+
And,
Or,
}
@@ -137,6 +140,8 @@
BitAnd => "&",
BitOr => "|",
BitXor => "^",
+ Eq => "==",
+ New => "!=",
And => "&&",
Or => "||",
}
crates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth227 --227 --228 a:(@) _ binop(<"&">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitAnd, b))}228 a:(@) _ binop(<"&">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::BitAnd, b))}229 --229 --230 a:(@) _ binop(<"==">) _ b:@ {loc_expr_todo!(Expr::Apply(230 a:(@) _ binop(<"==">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Eq, b))}231 el!(Expr::Intrinsic("equals".into())),232 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),233 true234 ))}235 a:(@) _ binop(<"!=">) _ b:@ {loc_expr_todo!(Expr::UnaryOp(UnaryOpType::Not, el!(Expr::Apply(231 a:(@) _ binop(<"!=">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Neq, b))}236 el!(Expr::Intrinsic("equals".into())),237 ArgsDesc(vec![Arg(None, a), Arg(None, b)]),238 true239 ))))}240 --232 --241 a:(@) _ binop(<"<">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lt, b))}233 a:(@) _ binop(<"<">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Lt, b))}242 a:(@) _ binop(<">">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gt, b))}234 a:(@) _ binop(<">">) _ b:@ {loc_expr_todo!(Expr::BinaryOp(a, BinaryOpType::Gt, b))}