Example #1
0
 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);
 }
Example #2
0
        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));
                    }
                }
            }
        }
Example #3
0
 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;
 }
Example #4
0
        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));
                    }
                }
            }
        }