protected override void EmitTernaryOperatorExpression(TernaryOperatorExpression expression, bool isStatement = false) { Append("(("); Emit(expression.FirstOperand); Append(")"); Append(" ? "); Append("("); Emit(expression.SecondOperand); Append(") : ("); Emit(expression.ThirdOperand); Append("))"); }
public BitsValue Visit(Expression expr) { return(expr switch { NumberLiteralExpression lit => lit.Value, BinaryOperatorExpression binOp => Visit(binOp), ReferenceExpression refExpr => Visit(refExpr), TernaryOperatorExpression tern => Visit(tern), UnaryOperatorExpression unary => Visit(unary), TruncateExpression trunc => Visit(trunc), SliceExpression slice => Visit(slice), _ => throw new InterpreterException("Unknown expression", expr.Span.Start), });
private AphidObject InterpretTernaryOperatorExpression(TernaryOperatorExpression expression) { switch (expression.Operator) { case AphidTokenType.ConditionalOperator: return((AphidObject)InterpretExpression( (bool)((AphidObject)InterpretExpression(expression.FirstOperand)).Value ? expression.SecondOperand : expression.ThirdOperand)); default: throw new InvalidOperationException(); } }
private void Emit(TernaryOperatorExpression node) { switch (node.Operator) { case AphidTokenType.ConditionalOperator: Emit(node.FirstOperand); AppendUnindented(" ? "); Emit(node.SecondOperand); AppendUnindented(" : "); Emit(node.ThirdOperand); break; default: throw new InvalidOperationException(); } }
protected override void EmitTernaryOperatorExpression(TernaryOperatorExpression expression, bool isStatement = false) { switch (expression.Operator) { case AphidTokenType.ConditionalOperator: Append("(("); Emit(expression.SecondOperand); Append(") if ("); Emit(expression.FirstOperand); Append(") else ("); Emit(expression.ThirdOperand); Append("))"); break; default: throw new NotImplementedException(); } }
private void Visit(TernaryOperatorExpression expr) { var labelFalse = IL.DefineLabel("tern_false"); var labelEnd = IL.DefineLabel("tern_end"); Visit(expr.Condition); LoadNumber(); IL.Brfalse(labelFalse); Visit(expr.IfTrue); IL.Br(labelEnd); IL.MarkLabel(labelFalse); IL.Nop(); Visit(expr.IfFalse); IL.MarkLabel(labelEnd); IL.Nop(); }
private IScriptObject EvaluateExpression(TernaryOperatorExpression expression) { var left = expression.Operand1; var middle = expression.Operand2; var right = expression.Operand3; var oper1 = expression.Operator1; var oper2 = expression.Operator2; try { return(Operators.CalculateTernaryOperators(this, oper1, oper2, left, middle, right)); } catch (RuntimeException) { throw; } catch (Exception ex) { throw new RuntimeException(expression.LinePragma, ex.Message, ex); } }
[DebuggerStepThrough] protected virtual void EmitTernaryOperatorExpression(TernaryOperatorExpression expression, bool isStatement = false) { throw new NotImplementedException(); }