public Namespace(Namespace parent, MemberName name)
 {
     Parent = parent;
     MemberName = name;
     childNamespaces = new List<Namespace>();
     types = new List<TypeDef>();
 }
 protected FieldDef(Namespace ns, string name, Modifier modifiers)
     : base(
         null,
         (ns is GlobalRootNamespace
              ? new MemberName(name)
              : new MemberName(ns.MemberName, Separators.DoubleColon, name)), modifiers)
 {
 }
        public NamespaceEntry(Namespace ns)
        {
            Name = ns.Name;
            Children = new List<NamespaceEntry>();
            FileNamespaceEntries = new List<FileNamespaceEntry>();

            Namespace = ns;
        }
        public TypeDef(Namespace ns, string name, MemberName baseClass, MemberName[] inplements, Modifier modifiers)
            : base(
                null,
                (ns is GlobalRootNamespace ? new MemberName(name) : new MemberName(ns.MemberName, Separators.Dot, name)),
                modifiers)
        {
            Initialize(baseClass, inplements);

            Namespace = ns;
            ns.AddType(this);
        }
        //public void ResolveNestedTypes()
        //{
        //    this.RootNamespace.ResolveNestedTypes();
        //}

        private IEnumerable<TypeDef> getTypes(Namespace ns)
        {
            return ns.Types.Union(ns.ChildNamespaces.SelectMany(x => getTypes(x)));
        }
 public ClassStructOrModuleDef(Namespace ns, string name, MemberName baseClass, MemberName[] inherits,
                               Modifier modifiers)
     : base(ns, name, baseClass, inherits, modifiers)
 {
 }
 public EnumDef(Namespace ns, string name, MemberName baseClass, MemberName[] inherits, Modifier modifiers)
     : base(ns, name, baseClass, inherits, modifiers)
 {
 }
 public void AddNamespace(Namespace ns)
 {
     childNamespaces.Add(ns);
 }
        private void OpenNamespace(Namespace ns)
        {
            NamespaceEntry entry = namespaceEntry.Children.Find(x => x.Name == ns.Name);

            if (entry == null)
            {
                namespaceEntry = new NamespaceEntry(ns, namespaceEntry);
            }
            else
            {
                namespaceEntry = entry;
            }

            fileNamespaceEntry = new FileNamespaceEntry(namespaceEntry, fileNamespaceEntry, string.Empty, fileEntry);
        }
        private void ParseNamespace()
        {
            TokenInfo token, token2;

            token = default(TokenInfo);
            token2 = default(TokenInfo);

            bool flag = false;
            Modifier modifiers;

            token = tokenQueue.Dequeue();

            modifiers = ParseModuleModifiers();

            flag = Expect(Token.Identifier, ref token2);

            ns = new RootNamespace(ns, token2.Value);

            OpenNamespace(ns);

            //TokenInfo token = tokenQueue.Dequeue();
            //Report.AddError("?", "Namespaces are not yet supported by the compiler.", Tokenizer.SourceFile,
            //                new SourceSpan(token.GetSourceLocation(), default(SourceLocation)), null);

            TokenList symbols = statementSymbols;

            ExpectEndOfStatementOrEat();

            flag = ParseNamespaceMembers();

            if (!flag)
            {
                Report.AddItem(VBErrors.ModuleStatementMustEndWithAMatchingEndModule, SourceFile, token.GetSpan(token2),
                               symbols);
            }

            CloseNamespace();
        }
        private void initialize()
        {
            //Stacks
            operatorStack = new Stack<Operator>();
            modifierStack = new Stack<Modifier>();
            tokenQueue = new Queue<TokenInfo>();

            //Tree
            GlobalNamespace = RootContext.Module.RootNamespace;
            NamespaceEntryRoot = RootContext.Module.RootNamespaceEntry;

            //ParserContext
            ns = GlobalNamespace;
            namespaceEntry = NamespaceEntryRoot;

            //Statement symbols
            statementSymbols = new TokenList();
        }
        private Namespace CloseNamespace()
        {
            //if (fileNamespaceEntry.Parent == null)
            //    throw new InternalCompilerException("");

            if (namespaceEntry.Parent == null)
            {
                namespaceEntry = null;
            }
            else
            {
                namespaceEntry = namespaceEntry.Parent;
            }

            Namespace ns = this.ns;
            this.ns = this.ns.Parent;

            return ns;
        }
 public static ITypeDefinition ResolveType(Namespace ns, string typeName)
 {
     return ResolveType(ns.Name + '.' + typeName);
 }
 public NamespaceEntry(Namespace ns, NamespaceEntry parent)
     : this(ns)
 {
     Parent = parent;
     Parent.Children.Add(this);
 }
        private IEnumerable<MethodDef> GetMethodDefs(Namespace ns)
        {
            var methods = new List<MethodDef>();

            foreach (TypeDef t in ns.Types)
            {
                foreach (MethodDef m in t.Methods)
                {
                    methods.Add(m);
                }

                //Properties
            }

            foreach (Namespace t in ns.ChildNamespaces)
            {
                methods.AddRange(GetMethodDefs(t));
            }

            return methods;
        }