public virtual void VisitTree(AbstractSyntaxTree tree)
 {
     foreach (var fileNode in tree.RootNodes)
     {
         VisitFile(fileNode);
     }
 }
Esempio n. 2
0
 public override void VisitTree(AbstractSyntaxTree tree)
 {
     base.VisitTree(tree);
     foreach (Symbol symbol in _stringConstSymbols)
     {
         AddSymbol(symbol);
     }
 }
Esempio n. 3
0
        public T VisitTree(AbstractSyntaxTree tree)
        {
            foreach (var fileNode in tree.RootNodes)
            {
                VisitFile(fileNode);
            }

            return(DefaultResult);
        }
        public override void VisitTree(AbstractSyntaxTree tree)
        {
            base.VisitTree(tree);

            foreach (Symbol symbol in _symbolTable.Values)
            {
                switch (symbol)
                {
                case FunctionSymbol functionSymbol:
                    functionSymbol.Flags |= SymbolFlag.Const;

                    if (functionSymbol.BuiltinType != SymbolType.Void)
                    {
                        functionSymbol.Flags |= SymbolFlag.Return;
                    }

                    if (functionSymbol.IsExternal)
                    {
                        functionSymbol.Flags |= SymbolFlag.External;
                    }

                    break;

                case InstanceSymbol instanceSymbol:
                    if (((InstanceDefinitionNode)instanceSymbol.Node).DefinedWithoutBody)
                    {
                    }
                    else
                    {
                        instanceSymbol.Flags |= SymbolFlag.Const;
                    }
                    break;

                case ConstSymbol constSymbol:
                    constSymbol.Flags |= SymbolFlag.Const;
                    break;

                case StringConstSymbol stringConstSymbol:
                    stringConstSymbol.Flags |= SymbolFlag.Const;
                    break;

                case VarSymbol varSymbol:
                    if (varSymbol.ParentBlockSymbol is ClassSymbol)
                    {
                        varSymbol.Flags |= SymbolFlag.ClassVar;
                    }

                    break;
                }
            }
        }