public AbcNamespaceSet GetNamespaceSet(uint index, AbcNamespaceSet zeroMeaning) { if (index != 0) { return(NamespaceSets[(int)index]); } if (zeroMeaning == null) { throw new Exception("zero namespace space is not allowed in current context"); } return(zeroMeaning); }
private void ReadConstants() { foreach (var ns in FileInfo.ConstantPool.Namespaces) { Namespaces.Add(new AbcNamespace { Kind = ns.Kind, Name = FileInfo.ConstantPool.Strings[ns.Name] }); } foreach (var nssInfo in FileInfo.ConstantPool.NamespaceSets) { var ns = new AbcNamespaceSet(); if (nssInfo.Namespaces != null) { foreach (var nsInfo in nssInfo.Namespaces) { ns.Namespaces.Add(GetNamespace(nsInfo, AbcNamespace.Any)); } } NamespaceSets.Add(ns); } foreach (var multiname in FileInfo.ConstantPool.Multinames) { switch (multiname.Kind) { case AsMultinameKind.QName: Multinames.Add(new AbcMultinameQName { Name = FileInfo.ConstantPool.Strings[multiname.QName.Name], Namespace = GetNamespace(multiname.QName.Namespace, AbcNamespace.Any) }); break; case AsMultinameKind.QNameA: Multinames.Add(new AbcMultinameQNameA { Name = FileInfo.ConstantPool.Strings[multiname.QName.Name], Namespace = GetNamespace(multiname.QName.Namespace, AbcNamespace.Any) }); break; case AsMultinameKind.Void: Multinames.Add(AbcMultiname.Void); break; case AsMultinameKind.Multiname: Multinames.Add(new AbcMultinameMultiname { Name = FileInfo.ConstantPool.Strings[multiname.Multiname.Name], NamespaceSet = GetNamespaceSet(multiname.Multiname.NamespaceSet, null) }); break; case AsMultinameKind.MultinameA: case AsMultinameKind.MultinameL: case AsMultinameKind.MultinameLA: case AsMultinameKind.RTQName: Multinames.Add(AbcMultiname.Void); //todo: break; case AsMultinameKind.Generic: Multinames.Add(new AbcMultinameGeneric()); break; default: throw new Exception("Unsupported multiname kind " + multiname.Kind); } } for (var i = 0; i < FileInfo.ConstantPool.Multinames.Length; i++) { var multiname = FileInfo.ConstantPool.Multinames[i]; if (multiname.Kind == AsMultinameKind.Generic) { var vector = (AbcMultinameGeneric)Multinames[i]; vector.Name = GetMultiname(multiname.TypeName.Name, null); foreach (var arg in multiname.TypeName.Params) { vector.Params.Add(GetMultiname(arg, AbcMultiname.Any)); } } } }
public AbcNamespaceSet GetNamespaceSet(uint index, AbcNamespaceSet zeroMeaning) { if (index != 0) return NamespaceSets[(int)index]; if (zeroMeaning == null) throw new Exception("zero namespace space is not allowed in current context"); return zeroMeaning; }