Esempio n. 1
0
        public ASMultiname(ABCFile abc, FlashReader reader)
            : this(abc)
        {
            var multinameType = (ConstantType)reader.ReadByte();
            switch (multinameType)
            {
            case ConstantType.QName:
            case ConstantType.QNameA:
            {
                var qName = new QName(abc, reader, multinameType);
                ObjNameIndex = qName.ObjNameIndex;
                Data         = qName;
                break;
            }

            case ConstantType.RTQName:
            case ConstantType.RTQNameA:
            {
                var rtqName = new RTQName(abc, reader, multinameType);
                ObjNameIndex = rtqName.ObjNameIndex;
                Data         = rtqName;
                break;
            }

            case ConstantType.RTQNameL:
            case ConstantType.RTQNameLA:
                Data = new RTQNameL(abc, multinameType);
                break;

            case ConstantType.Multiname:
            case ConstantType.MultinameA:
            {
                var multiname = new Multiname(abc, reader, multinameType);
                ObjNameIndex = multiname.ObjNameIndex;
                Data         = multiname;
                break;
            }

            case ConstantType.MultinameL:
            case ConstantType.MultinameLA:
                Data = new MultinameL(abc, reader, multinameType);
                break;

            case ConstantType.Typename:
                Data = new Typename(abc, reader);
                break;

            default:
                throw new Exception("Invalid multiname: " + multinameType);
            }
        }
Esempio n. 2
0
        public MultinameBase ReadMultiname()
        {
            string word = ReadWord();

            if (word == "null")
            {
                return(null);
            }

            MultinameBase ret;
            ASType        kind = (ASType)Enum.Parse(typeof(ASType), word);

            Expect("(");
            switch (kind)
            {
            case ASType.QName:
            case ASType.QNameA:
                ret             = new QName();
                ((QName)ret).Ns = ReadNamespace();
                Expect(",");
                ((QName)ret).Name = ReadString();
                break;

            case ASType.RTQName:
            case ASType.RTQNameA:
                ret = new RTQName();
                ((RTQName)ret).Name = ReadString();
                break;

            case ASType.RTQNameL:
            case ASType.RTQNameLA:
                ret = new MultinameBase();
                break;

            case ASType.Multiname:
            case ASType.MultinameA:
                ret = new Multiname();
                ((Multiname)ret).Name = ReadString();
                Expect(",");
                ((Multiname)ret).NsSet = ReadNamespaceSet();
                break;

            case ASType.MultinameL:
            case ASType.MultinameLA:
                ret = new Multiname();
                ((MultinameL)ret).NsSet = ReadNamespaceSet();
                break;

            case ASType.TypeName:
                ret = new TypeName();
                ((TypeName)ret).Name   = ReadMultiname();
                ((TypeName)ret).Params = ReadList('<', '>', ReadMultiname, false);
                break;

            default:
                throw new ASParsingException("Cannot handle multiname kind: " + kind.ToString());
            }
            ret.Kind = kind;
            Expect(")");
            return(ret);
        }