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
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
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))}