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
--- 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 => "||",
 			}
modifiedcrates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth
227 --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 true
234 ))}
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 true
239 ))))}
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))}