difftreelog
perf do not use intrinsics for == operator
in: master
3 files changed
crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth1use 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)?,150151 (a, BinaryOpType::Eq, b) => Val::Bool(equals(&a, &b)?),152 (a, BinaryOpType::Neq, b) => Val::Bool(!equals(&a, &b)?),149153150 (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()),151155crates/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.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))}