在Flash 10中添加了对泛型的支持(目前只支持>,被Adobe称为“后缀类型参数”),但唯一的AVM2文档没有描述如何访问这些对象。
具体来说,我注意到一个新的操作码(0x53)和一个新的多名类型(0x1D)似乎相关,但它们的使用没有记录。
注意:这个问题是用已经知道的答案创建的,因为这里比我的博客或Adobe更容易找到它。
发布于 2009-02-16 14:24:49
我在这方面所做的逆向工程工作并不包括声明您自己的泛型类型,尽管这很可能是可能的。
对声明(无参数)泛型类型(Vector)的引用是通过一个常规限定名进行的(尽管任何多个名称都应该这样做)。
对类型化泛型类型的引用(向量)。与Vector.<>相反的是一种新的多名类型(0x1D),我称之为GenericName。GenericName的格式如下:
[Kind] [TypeDefinition] [ParamCount] [Param1] [Param2] [ParamN]其中:
显然,泛型目前还不受支持,所以ParamCount总是1(对于Vector.<*>)。
另一件有趣的事情是如何创建类的实例。在Flash10 (0x53)中添加了一个新的操作码,我称之为MakeGenericType。MakeGenericType用以下堆栈声明:
TypeDefinition, ParameterType1, ParameterTypeN -> GenericType它还有一个参数,U8 (U30?)指定堆栈上有多少参数。您通常会看到MakeGenericType是这样使用的:
GetLex [TypeDefinitionMultiname]
GetLex [ParameterTypeMultiname]
MakeGeneric [ParamCount]
Coerce [GenericNameMultiname]
Construct [ConstructorParamCount]所以如果你有以下情况..。
GetLex __AS3__.vec::Vector
GetLex int
MakeGeneric 1
Coerce __AS3__.vec::Vector.<int>
Construct 0现在您将有一个向量的实例。
https://stackoverflow.com/questions/553445
复制相似问题