public void RegisterNamespace (Namespace child) { if (child != this) all_namespaces.Add (child.Name, child); }
protected NamespaceContainer (ModuleContainer parent) : base (parent, null, null, MemberKind.Namespace) { ns = parent.GlobalRootNamespace; containers = new List<TypeContainer> (2); }
public NamespaceContainer (MemberName name, NamespaceContainer parent) : base (parent, name, null, MemberKind.Namespace) { this.RealMemberName = name; this.Parent = parent; this.ns = parent.NS.AddNamespace (name); containers = new List<TypeContainer> (); var topParent = this; while (topParent.Parent != null) { topParent = topParent.Parent; } compSourceFile = topParent as CompilationSourceFile; }
// TODO: Replace with CreateNamespace where MemberName is created for the method call public Namespace GetNamespace (string name, bool create) { int pos = name.IndexOf ('.'); Namespace ns; string first; if (pos >= 0) first = name.Substring (0, pos); else first = name; if (!namespaces.TryGetValue (first, out ns)) { if (!create) return null; ns = new Namespace (this, first); namespaces.Add (first, ns); } if (pos >= 0) ns = ns.GetNamespace (name.Substring (pos + 1), create); return ns; }
Namespace TryAddNamespace (string name) { Namespace ns; if (!namespaces.TryGetValue (name, out ns)) { ns = new Namespace (this, name); namespaces.Add (name, ns); } return ns; }
/// <summary> /// Constructor Takes the current namespace and the /// name. This is bootstrapped with parent == null /// and name = "" /// </summary> public Namespace (Namespace parent, string name) { // Expression members. this.eclass = ExprClass.Namespace; this.Type = InternalType.Namespace; this.loc = Location.Null; this.parent = parent; if (parent != null) this.root = parent.root; else this.root = this as RootNamespace; if (this.root == null) throw new InternalErrorException ("Root namespaces must be created using RootNamespace"); string pname = parent != null ? parent.fullname : ""; if (pname == "") fullname = name; else fullname = parent.fullname + "." + name; if (fullname == null) throw new InternalErrorException ("Namespace has a null fullname"); if (parent != null && parent.MemberName != MemberName.Null) MemberName = new MemberName (parent.MemberName, name, Location.Null); else if (name.Length == 0) MemberName = MemberName.Null; else MemberName = new MemberName (name, Location.Null); namespaces = new Dictionary<string, Namespace> (); cached_types = new Dictionary<string, TypeExpr> (); root.RegisterNamespace (this); }
protected void ImportTypes (MetaType[] types, Namespace targetNamespace, bool importExtensionTypes) { Namespace ns = targetNamespace; string prev_namespace = null; foreach (var t in types) { if (t == null) continue; // Be careful not to trigger full parent type loading if (t.MemberType == MemberTypes.NestedType) continue; if (t.Name[0] == '<') continue; var it = CreateType (t, null, new DynamicTypeReader (t), true); if (it == null) continue; if (prev_namespace != t.Namespace) { ns = t.Namespace == null ? targetNamespace : targetNamespace.GetNamespace (t.Namespace, true); prev_namespace = t.Namespace; } // Cannot rely on assembly level Extension attribute or static modifier because they // are not followed by other compilers (e.g. F#). if (it.IsClass && it.Arity == 0 && importExtensionTypes && HasAttribute (CustomAttributeData.GetCustomAttributes (t), "ExtensionAttribute", CompilerServicesNamespace)) { it.SetExtensionMethodContainer (); } ns.AddType (module, it); } }