Exemple #1
0
 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),
     });
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        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();
            }
        }
Exemple #5
0
        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();
            }
        }
Exemple #6
0
        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();
 }