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.rsdiffbeforeafterboth113 BitOr,113 BitOr,114 BitXor,114 BitXor,115116 Eq,117 Neq,115118116 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 }crates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth227 --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 true234 ))}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 true239 ))))}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))}