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
1use crate::{1use crate::{
2 error::Error::*, lazy_val, push, throw, with_state, Context, ContextCreator, FuncDesc, FuncVal,2 error::Error::*, lazy_val, push, throw, with_state, Context, ContextCreator, FuncDesc, FuncVal,
3 FutureWrapper, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,3 FutureWrapper, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,
4 equals,
4};5};
5use closure::closure;6use closure::closure;
6use jrsonnet_interner::IStr;7use jrsonnet_interner::IStr;
147 Ok(match (a, op, b) {148 Ok(match (a, op, b) {
148 (a, BinaryOpType::Add, b) => evaluate_add_op(a, b)?,149 (a, BinaryOpType::Add, b) => evaluate_add_op(a, b)?,
150
151 (a, BinaryOpType::Eq, b) => Val::Bool(equals(&a, &b)?),
152 (a, BinaryOpType::Neq, b) => Val::Bool(!equals(&a, &b)?),
149153
150 (Val::Str(v1), BinaryOpType::Mul, Val::Num(v2)) => Val::Str(v1.repeat(*v2 as usize).into()),154 (Val::Str(v1), BinaryOpType::Mul, Val::Num(v2)) => Val::Str(v1.repeat(*v2 as usize).into()),
151155
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
--- 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))}