git.delta.rocks / jrsonnet / refs/commits / 0ec1408323ca

difftreelog

perf do not use intrinsics for == operator

Yaroslav Bolyukin2021-05-23parent: #8e8bdf2.patch.diff
in: master

3 files changed

modifiedcrates/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
modifiedcrates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth
113 BitOr,113 BitOr,
114 BitXor,114 BitXor,
115
116 Eq,
117 Neq,
115118
116 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 }
modifiedcrates/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))}