/// <summary> /// Immutable multiname object. /// </summary> /// <param name="kind">The kind of multiname</param> /// <param name="name">The multiname name</param> /// <param name="ns">Optional namespace, dependant on kind. See AVM2 spec</param> /// <param name="set">Optional namespace set, dependant on kind. See AVM2 spec</param> internal Multiname(MultinameKind kind, string name, Namespace ns, NamespaceSet set) { this.Kind = kind; this.Name = name; this.NS = ns; this.Set = set; /* Sanity checking... */ switch (kind) { case MultinameKind.QName: case MultinameKind.QNameA: if (ns == null) { throw new SWFModellerException( SWFModellerError.Internal, "A " + kind.ToString() + " requires a namespace"); } break; case MultinameKind.RTQName: case MultinameKind.RTQNameA: break; case MultinameKind.RTQNameL: case MultinameKind.RTQNameLA: break; case MultinameKind.Multiname: case MultinameKind.MultinameA: if (set == null) { throw new SWFModellerException( SWFModellerError.Internal, "A " + kind.ToString() + " requires a namespace set"); } break; case MultinameKind.MultinameL: case MultinameKind.MultinameLA: if (set == null) { throw new SWFModellerException( SWFModellerError.Internal, "A " + kind.ToString() + " requires a namespace set"); } break; default: break; } }