首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型(向量)是如何在AVM内部工作的?

泛型(向量)是如何在AVM内部工作的?
EN

Stack Overflow用户
提问于 2009-02-16 14:20:23
回答 1查看 2.5K关注 0票数 15

在Flash 10中添加了对泛型的支持(目前只支持>,被Adobe称为“后缀类型参数”),但唯一的AVM2文档没有描述如何访问这些对象。

具体来说,我注意到一个新的操作码(0x53)和一个新的多名类型(0x1D)似乎相关,但它们的使用没有记录。

注意:这个问题是用已经知道的答案创建的,因为这里比我的博客或Adobe更容易找到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-16 14:24:49

我在这方面所做的逆向工程工作并不包括声明您自己的泛型类型,尽管这很可能是可能的。

对声明(无参数)泛型类型(Vector)的引用是通过一个常规限定名进行的(尽管任何多个名称都应该这样做)。

对类型化泛型类型的引用(向量)。与Vector.<>相反的是一种新的多名类型(0x1D),我称之为GenericName。GenericName的格式如下:

代码语言:javascript
复制
[Kind] [TypeDefinition] [ParamCount] [Param1] [Param2] [ParamN]

其中:

  • TypeDefinition是多名表中的U30。
  • ParamCount是一个U8 (U30?)有多少类型的参数
  • ParamX是多名表中的U30。

显然,泛型目前还不受支持,所以ParamCount总是1(对于Vector.<*>)。

另一件有趣的事情是如何创建类的实例。在Flash10 (0x53)中添加了一个新的操作码,我称之为MakeGenericType。MakeGenericType用以下堆栈声明:

代码语言:javascript
复制
TypeDefinition, ParameterType1, ParameterTypeN -> GenericType

它还有一个参数,U8 (U30?)指定堆栈上有多少参数。您通常会看到MakeGenericType是这样使用的:

代码语言:javascript
复制
GetLex [TypeDefinitionMultiname]
GetLex [ParameterTypeMultiname]
MakeGeneric [ParamCount]
Coerce [GenericNameMultiname]
Construct [ConstructorParamCount]

所以如果你有以下情况..。

代码语言:javascript
复制
GetLex __AS3__.vec::Vector
GetLex int
MakeGeneric 1
Coerce __AS3__.vec::Vector.<int>
Construct 0

现在您将有一个向量的实例。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/553445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档