コード例 #1
0
        private static BoundScope CreateParentScopes(BoundGlobalScope previous)
        {
            // create scopes in the opposite order
            // submission 3 => submission 2 => submission 1
            var stack = new Stack <BoundGlobalScope>();

            while (previous != null)
            {
                stack.Push(previous);
                previous = previous.Previous;
            }

            BoundScope parent = null;

            while (stack.Count > 0)
            {
                previous = stack.Pop();
                var scope = new BoundScope(parent);
                foreach (var variable in previous.Variables)
                {
                    scope.TryDeclare(variable);
                }
                parent = scope;
            }
            return(parent);
        }
コード例 #2
0
        private BoundVariableDeclaration BindVariableDeclaration(VariableDeclarationSyntax syntax)
        {
            var name        = syntax.Identifier.Text;
            var isReadOnly  = syntax.Keyword.Kind == SyntaxKind.LetKeyword;
            var initializer = BindExpression(syntax.Initializer);
            var variable    = new VariableSymbol(name, isReadOnly, initializer.Type);

            if (!_scope.TryDeclare(variable))
            {
                _diagnostics.ReportVariableAlreadyDeclared(syntax.Identifier.Span, name);
            }

            return(new BoundVariableDeclaration(variable, initializer));
        }