Пример #1
0
        public static ScopeSymbolChild Create(SymbolWithScope parentSymbol, string scopeName)
        {
            var scope = new ScopeSymbolChild(parentSymbol, scopeName);

            RegisterChildScope(scope.ParentScope, scope);

            return(scope);
        }
Пример #2
0
        /// <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();
        }
Пример #3
0
        //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);
        }
Пример #4
0
 /// <summary>
 /// Open a new scope
 /// </summary>
 /// <param name="symbol"></param>
 public void OpenScope(SymbolWithScope symbol)
 {
     _openedScopes.Push(symbol.ChildSymbolScope);
 }
Пример #5
0
 private ScopeSymbolChild(SymbolWithScope parentSymbol, string scopeName)
     : base(parentSymbol.ParentScope, scopeName)
 {
     ParentLanguageSymbolWithScope = parentSymbol;
 }
Пример #6
0
 private ScopeSymbolChild(SymbolWithScope parentSymbol)
     : base(parentSymbol.ParentScope)
 {
     ParentLanguageSymbolWithScope = parentSymbol;
 }