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); } }
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); }