public static ScopeSymbolChild Create(SymbolWithScope parentSymbol, string scopeName) { var scope = new ScopeSymbolChild(parentSymbol, scopeName); RegisterChildScope(scope.ParentScope, scope); return(scope); }
/// <summary> /// Close the last scope that was be opened /// </summary> /// <param name="symbol"></param> public void CloseScope(SymbolWithScope symbol) { if (_openedScopes.Count == 0 || _openedScopes.Peek().ObjectId != symbol.ChildSymbolScope.ObjectId) { throw new Exception("Closed scope not matching last opened scope!"); } _openedScopes.Pop(); }
//protected void SetContext(GMacSymbolTranslatorContext context) //{ // this.SetContext((SymbolTranslatorContext)context); //} /// <summary> /// Take a qualified indetifier node and separate it into a parent symbol and a child symbol name /// </summary> /// <param name="node"></param> /// <param name="parentSymbol"></param> /// <param name="childSymbolName"></param> protected bool Translate_ParentSymbolAndChildSymbolName(ParseTreeNode node, out SymbolWithScope parentSymbol, out string childSymbolName) { var qualList = GenUtils.Translate_Qualified_Identifier(node); childSymbolName = qualList.LastItem; if (qualList.ActiveLength == 1) { parentSymbol = Context.ActiveParentSymbol; } else { qualList.DecreaseActiveEndOffset(); parentSymbol = GMacValueAccessGenerator.Translate_Direct(Context, node, qualList) as SymbolWithScope; } return(ReferenceEquals(parentSymbol, null) == false); }
/// <summary> /// Open a new scope /// </summary> /// <param name="symbol"></param> public void OpenScope(SymbolWithScope symbol) { _openedScopes.Push(symbol.ChildSymbolScope); }
private ScopeSymbolChild(SymbolWithScope parentSymbol, string scopeName) : base(parentSymbol.ParentScope, scopeName) { ParentLanguageSymbolWithScope = parentSymbol; }
private ScopeSymbolChild(SymbolWithScope parentSymbol) : base(parentSymbol.ParentScope) { ParentLanguageSymbolWithScope = parentSymbol; }