private void UpdateCondition(VBAParser.RelationalOpContext condition, IModuleRewriter rewriter)
 {
     if (condition.EQ() != null)
     {
         rewriter.Replace(condition.EQ(), "<>");
     }
     if (condition.NEQ() != null)
     {
         rewriter.Replace(condition.NEQ(), "=");
     }
     if (condition.LT() != null)
     {
         rewriter.Replace(condition.LT(), ">=");
     }
     if (condition.GT() != null)
     {
         rewriter.Replace(condition.GT(), "<=");
     }
     if (condition.LEQ() != null)
     {
         rewriter.Replace(condition.LEQ(), ">");
     }
     if (condition.GEQ() != null)
     {
         rewriter.Replace(condition.GEQ(), "<");
     }
     if (condition.IS() != null || condition.LIKE() != null)
     {
         UpdateCondition((ParserRuleContext)condition, rewriter);
     }
 }
Exemplo n.º 2
0
 private IExpressionBinding Visit(Declaration module, Declaration parent, VBAParser.RelationalOpContext expression, IBoundExpression withBlockVariable, StatementResolutionContext statementContext)
 {
     // To make the grammar we treat a type-of-is expression as a construct of the form "TYPEOF expression", where expression
     // is always "expression IS expression".
     if (expression.expression()[0] is VBAParser.TypeofexprContext)
     {
         return(VisitTypeOf(module, parent, expression, (VBAParser.TypeofexprContext)expression.expression()[0], expression.expression()[1], withBlockVariable, StatementResolutionContext.Undefined));
     }
     return(VisitBinaryOp(module, parent, expression, expression.expression()[0], expression.expression()[1], withBlockVariable, StatementResolutionContext.Undefined));
 }
Exemplo n.º 3
0
        private void ResolveStartValueAssignmentOfForNext(VBAParser.RelationalOpContext expression)
        {
            var expressions = expression.expression();
            var elementVariableExpression = expressions[0];

            ResolveDefault(elementVariableExpression, requiresLetCoercion: true, isAssignmentTarget: true);

            var startValueExpression = expressions[1];

            ResolveDefault(startValueExpression, requiresLetCoercion: true);
        }
Exemplo n.º 4
0
        private IExpressionBinding Visit(Declaration module, Declaration parent, VBAParser.RelationalOpContext expression, IBoundExpression withBlockVariable)
        {
            // To make the grammar we treat a type-of-is expression as a construct of the form "TYPEOF expression", where expression
            // is always "expression IS expression".
            if (expression.expression()[0] is VBAParser.TypeofexprContext typeofExpr)
            {
                return(VisitTypeOf(module, parent, expression, typeofExpr, expression.expression()[1], withBlockVariable));
            }

            var isIsRelation = expression.IS() != null;

            return(VisitBinaryOp(module, parent, expression, expression.expression()[0], expression.expression()[1], withBlockVariable, isIsRelation));
        }
Exemplo n.º 5
0
        private IExpressionBinding VisitTypeOf(
            Declaration module,
            Declaration parent,
            VBAParser.RelationalOpContext typeOfIsExpression,
            VBAParser.TypeofexprContext typeOfLeftPartExpression,
            VBAParser.ExpressionContext typeExpression,
            IBoundExpression withBlockVariable)
        {
            var booleanExpression        = typeOfLeftPartExpression.expression();
            var booleanExpressionBinding = Visit(module, parent, booleanExpression, withBlockVariable, StatementResolutionContext.Undefined);
            var typeExpressionBinding    = VisitType(module, parent, typeExpression, withBlockVariable);

            return(new TypeOfIsDefaultBinding(typeOfIsExpression, booleanExpressionBinding, typeExpressionBinding));
        }