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); }
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)); }