public IJsmExpression Evaluate(IServices services) { IJsmExpression result = _value.Evaluate(services); if (result is IConstExpression number) { return(ValueExpression.Create(number.Value == 0 ? 1 : 0)); } return(result); }
public IJsmExpression Evaluate(IServices services) { IJsmExpression first = _first.Evaluate(services); IJsmExpression last = _last.Evaluate(services); if (first is IConstExpression n1 && last is IConstExpression n2) { return(ValueExpression.Create((Int32)(n1.Value ^ n2.Value))); } return(new BitXor(first, last)); }
public IJsmExpression Evaluate(IServices services) { IJsmExpression first = _first.Evaluate(services); IJsmExpression last = _last.Evaluate(services); if (first is IConstExpression n1 && last is IConstExpression n2) { return(ValueExpression.Create(n1.Value != n2.Value ? 1 : 0)); } return(new NotEquals(first, last)); }
public IJsmExpression Evaluate(IServices services) { var first = _first.Evaluate(services); var last = _last.Evaluate(services); if (first is IConstExpression n1 && last is IConstExpression n2) { return(ValueExpression.Create((int)(n1.Value * n2.Value))); } return(new Mul(first, last)); }
public IJsmExpression Evaluate(IServices services) { var first = _first.Evaluate(services); var last = _last.Evaluate(services); if (first is IConstExpression n1 && last is IConstExpression n2) { return(ValueExpression.Create(n1.Value <= n2.Value ? 1 : 0)); } return(new LessOrEquals(first, last)); }
public static IJsmExpression TryMake(Jsm.Opcode opcode, Int32 param, IStack <IJsmExpression> stack) { IJsmExpression result = TryMakeInternal(opcode, param, stack); return(result?.Evaluate(StatelessServices.Instance)); // Simplify the expression }