Esempio n. 1
0
        private static BoundScope CreateParentScopes(BoundGlobalScope _previous)
        {
            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 _v in _previous.Variables)
                {
                    _scope.TryDeclare(_v);
                }
                _parent = _scope;
            }

            return(_parent);
        }
Esempio n. 2
0
        private BoundVariableDeclaration BindVariableDeclaration(VariableDeclarationSyntax _syntax)
        {
            var _name       = _syntax.Identifier.Text;
            var _isReadOnly = _syntax.KeywordToken.Kind == SyntaxKind.LetKeyword;
            var _expression = BindExpression(_syntax.Initializer);
            var _variable   = new VariableSymbol(_name, _isReadOnly, _expression.Type);

            if (!scope.TryDeclare(_variable))
            {
                Diagnostics.ReportVariableAlreadyDeclared(_syntax.Identifier.Span, _name);
            }

            return(new BoundVariableDeclaration(_variable, _expression));
        }