public override void VisitVariableAccessSyntax(VariableAccessSyntax syntax)
        {
            if (this.deployTimeConstantScopeSyntax is null)
            {
                return;
            }

            if (this.model.GetSymbolInfo(syntax) is VariableSymbol variableSymbol &&
                this.model.Binder.TryGetCycle(variableSymbol) is null)
            {
                // emit any error that has already been triggered previously in the value assignment
                if (this.errorSyntax != null)
                {
                    this.AppendError();
                }
                var variableVisitor = new DeployTimeConstantVariableVisitor(this.model);
                variableVisitor.Visit(variableSymbol.DeclaringSyntax);
                if (variableVisitor.InvalidReferencedBodyType != null)
                {
                    this.errorSyntax          = syntax;
                    this.referencedBodyType   = variableVisitor.InvalidReferencedBodyType;
                    this.variableVisitorStack = variableVisitor.VisitedStack;
                    this.referencedSymbol     = variableVisitor.VisitedStack.Peek();
                }
            }
        }
예제 #2
0
        public override void VisitVariableAccessSyntax(VariableAccessSyntax syntax)
        {
            var baseSymbol = model.GetSymbolInfo(syntax);

            switch (baseSymbol)
            {
            case VariableSymbol variableSymbol:
                // emit any error that has already been triggered previously in the value assignment
                if (this.errorSyntax != null)
                {
                    this.AppendError();
                }
                var variableVisitor = new DeployTimeConstantVariableVisitor(this.model);
                variableVisitor.Visit(variableSymbol.DeclaringSyntax);
                if (variableVisitor.invalidReferencedBodyObj != null)
                {
                    this.errorSyntax          = syntax;
                    this.referencedBodyObj    = variableVisitor.invalidReferencedBodyObj;
                    this.variableVisitorStack = variableVisitor.visitedStack;
                    this.accessedSymbol       = variableVisitor.visitedStack.Peek();
                }
                break;
            }
        }