public void Resolve(VBAParser.ForEachStmtContext 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)
            {
                identifier.AddReference(CreateReference(identifiers[1], identifier));
            }
        }
Пример #2
0
        public void Resolve(VBAParser.ForEachStmtContext context)
        {
            var expressions = context.expression();

            var elementVariableExpression = expressions[0];

            ResolveDefault(elementVariableExpression, isAssignmentTarget: true);

            var collectionExpression = expressions[1];

            ResolveDefault(collectionExpression);

            const int firstNextExpressionIndex = 2;

            for (var exprIndex = firstNextExpressionIndex; exprIndex < context.expression().Length; exprIndex++)
            {
                ResolveDefault(expressions[exprIndex]);
            }
        }
Пример #3
0
        public void Resolve(VBAParser.ForEachStmtContext context)
        {
            var firstExpression = _bindingService.ResolveDefault(
                _moduleDeclaration,
                _currentParent,
                context.expression()[0],
                GetInnerMostWithExpression(),
                StatementResolutionContext.Undefined);

            if (firstExpression.Classification == ExpressionClassification.ResolutionFailed)
            {
                _boundExpressionVisitor.AddIdentifierReferences(
                    firstExpression,
                    _qualifiedModuleName,
                    _currentScope,
                    _currentParent);
            }
            else
            {
                // each iteration counts as an assignment
                _boundExpressionVisitor.AddIdentifierReferences(
                    firstExpression,
                    _qualifiedModuleName,
                    _currentScope,
                    _currentParent,
                    true);
                _boundExpressionVisitor.AddIdentifierReferences(
                    firstExpression,
                    _qualifiedModuleName,
                    _currentScope,
                    _currentParent);
            }
            for (int exprIndex = 1; exprIndex < context.expression().Count; exprIndex++)
            {
                ResolveDefault(context.expression()[exprIndex]);
            }
        }
Пример #4
0
 public override void EnterForEachStmt([NotNull] VBAParser.ForEachStmtContext context) => workingValue++;
 public override void EnterForEachStmt(VBAParser.ForEachStmtContext context)
 {
     _resolver.Resolve(context);
 }
 public override void EnterForEachStmt([NotNull] VBAParser.ForEachStmtContext context)
 {
     InspectBlockForExecutableStatements(context.block(), context);
 }
Пример #7
0
            // notably: NO additional complexity for an Else-Block

            public override void EnterForEachStmt([NotNull] VBAParser.ForEachStmtContext context)
            {
                _results.Add(new CodeMetricsResult(0, 1, 0));
            }