Bu konuda yaptığım ters mühendislik çalışmaları, kendi genel türlerini bildirmeyi içermiyordu, ancak bu mümkün olabilir.
Bildiri (parametresiz) jenerik türüne (Vector) yapılan başvurular, düzenli bir adla yapılır (herhangi bir multiname yapmalıdır).
Yazılan bir jenerik türüne yapılan başvurular (Vector. < int>, Vector. <> gibi), GenericName adını verdiğim yeni bir çok-isim türüyle (0x1D) yapılır.
Açıkçası, jenerikler henüz desteklenmemektedir, bu yüzden ParamCount her zaman 1 (Vector için. < *>) olacaktır.
Diğer ilginç şey, sınıfın örneklerinin nasıl oluşturulduğudur. Flash 10'a (0x53) yeni bir işlem kodu eklendi, ki buna MakeGenericType adını vereceğim. MakeGenericType aşağıdaki yığını ile ilan edilir:
TypeDefinition, ParameterType1, ParameterTypeN -> GenericType
Ayrıca sayıda parametre yığına üzerinde nasıl kullanılacağını belirterek bir parametre, bir U8 (U30?) Sahiptir. Genellikle MakeGenericType böyle kullanılıyor göreceksiniz: Artık Vector örneği olurdu
GetLex __AS3__.vec::Vector
GetLex int
MakeGeneric 1
Coerce __AS3__.vec::Vector.<int>
Construct 0
sen olsaydı Yani şu
GetLex [TypeDefinitionMultiname]
GetLex [ParameterTypeMultiname]
MakeGeneric [ParamCount]
Coerce [GenericNameMultiname]
Construct [ConstructorParamCount]
.... < int>
As3/avm2'nin dahili bilgisini bilmek gerçekten hoşuma gidiyor. Bunu paylaştığın için teşekkürler! – yuku
Sen harikasın. Teşekkür ederim. –
Burada, "simya" projesi için yeni olan 0x32-0x38, 0x3a-0x3e, 0x50-0x52 opcodes içeren bir PDF bağlantısı bulunmaktadır. 0x39'un var olduğunu biliyorum ve yığından bir tamsayı değeri tüketiyor gibi görünüyor, ancak ne yapabileceğini bilmiyorum. Link: http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf –