Beispiel #1
0
        public void Resolve(VBAParser.ForNextStmtContext context)
        {
            var expressions = context.expression();

            // In "For expr1 = expr2" the "expr1 = expr2" part is treated as a single expression.
            var assignmentExpr = ((VBAParser.RelationalOpContext)expressions[0]);

            ResolveStartValueAssignmentOfForNext(assignmentExpr);

            ResolveToValueOfForNext(expressions[1]);

            var stepStatement = context.stepStmt();

            if (stepStatement != null)
            {
                Resolve(stepStatement);
            }

            const int firstNextExpressionIndex = 2;

            for (var exprIndex = firstNextExpressionIndex; exprIndex < expressions.Length; exprIndex++)
            {
                ResolveDefault(expressions[exprIndex]);
            }
        }
            public override void EnterForNextStmt([NotNull] VBAParser.ForNextStmtContext context)
            {
                var stepStatement = context.stepStmt();

                if (stepStatement == null)
                {
                    return;
                }

                var stepText = stepStatement.expression().GetText();

                if (stepText == "1")
                {
                    SaveContext(stepStatement);
                }
            }
        public void Resolve(VBAParser.ForNextStmtContext context)
        {
            var identifiers = context.ambiguousIdentifier();
            var identifier  = ResolveInternal(identifiers[0], _currentScope, ContextAccessorType.AssignValue, null, false, true);

            // each iteration counts as an assignment
            var reference = CreateReference(identifiers[0], identifier, true);

            identifier.AddReference(reference);

            if (identifiers.Count > 1)
            {
                var endForBlockReference = CreateReference(identifiers[1], identifier);
                identifier.AddReference(endForBlockReference);
            }
        }
Beispiel #4
0
        public void Resolve(VBAParser.ForNextStmtContext context)
        {
            // In "For expr1 = expr2" the "expr1 = expr2" part is treated as a single expression.
            var assignmentExpr  = ((VBAParser.RelationalOpContext)context.expression()[0]);
            var lExpr           = assignmentExpr.expression()[0];
            var firstExpression = _bindingService.ResolveDefault(
                _moduleDeclaration,
                _currentParent,
                lExpr,
                GetInnerMostWithExpression(),
                StatementResolutionContext.Undefined);

            _boundExpressionVisitor.AddIdentifierReferences(
                firstExpression,
                _qualifiedModuleName,
                _currentScope,
                _currentParent);
            if (firstExpression.Classification != ExpressionClassification.ResolutionFailed)
            {
                // each iteration counts as an assignment
                _boundExpressionVisitor.AddIdentifierReferences(
                    firstExpression,
                    _qualifiedModuleName,
                    _currentScope,
                    _currentParent,
                    true);
            }
            var rExpr            = assignmentExpr.expression()[1];
            var secondExpression = _bindingService.ResolveDefault(
                _moduleDeclaration,
                _currentParent,
                rExpr,
                GetInnerMostWithExpression(),
                StatementResolutionContext.Undefined);

            _boundExpressionVisitor.AddIdentifierReferences(
                secondExpression,
                _qualifiedModuleName,
                _currentScope,
                _currentParent);
            for (int exprIndex = 1; exprIndex < context.expression().Count; exprIndex++)
            {
                ResolveDefault(context.expression()[exprIndex]);
            }
        }
Beispiel #5
0
 public override void EnterForNextStmt([NotNull] VBAParser.ForNextStmtContext context) => workingValue++;
 public override void EnterForNextStmt(VBAParser.ForNextStmtContext context)
 {
     _resolver.Resolve(context);
 }
 public override void EnterForNextStmt([NotNull] VBAParser.ForNextStmtContext context)
 {
     InspectBlockForExecutableStatements(context.block(), context);
 }
 public override void EnterForNextStmt([NotNull] VBAParser.ForNextStmtContext context)
 {
     _results.Add(new CodeMetricsResult(0, 1, 0));
 }