クラス関係のABC
クラス関係のABCを淡々と貼るよ。
空定義
class Hoge{}
class private::Hoge extends Object
{
function private::Hoge():* /* disp_id -1*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=6
0 getlocal0
1 pushscope
2 getlocal0
3 constructsuper (0)
5 returnvoid
}
static function private::Hoge$cinit():* /* disp_id 0*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=3
0 getlocal0
1 pushscope
2 returnvoid
}
}
function script0$init():* /* disp_id 0*/
{
// local_count=1 max_scope=2 max_stack=2 code_len=19
0 getlocal0
1 pushscope
2 getscopeobject 0
4 findpropstrict Object
6 getproperty Object
8 pushscope
9 findpropstrict Object
11 getproperty Object
13 newclass private::Hoge
15 popscope
16 initproperty private::Hoge
18 returnvoid
}
インスタンス変数
特にコードは必要ない?
class Hoge{ var foo }
class private::Hoge extends Object
{
function private::Hoge():* /* disp_id -1*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=6
0 getlocal0
1 pushscope
2 getlocal0
3 constructsuper (0)
5 returnvoid
}
var private::foo:* /* slot_id 0 */
static function private::Hoge$cinit():* /* disp_id 0*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=3
0 getlocal0
1 pushscope
2 returnvoid
}
}
new
new Hoge();
18 findpropstrict Hoge 20 constructprop Hoge (0)
メソッド呼び出し
Hoge.f(); var h = new Hoge(); h.f();
18 getglobalscope 19 getslot 1 21 callproperty f (0) 24 pop 25 findpropstrict Hoge 27 constructprop Hoge (0) 30 getglobalscope 31 swap 32 setslot 2 34 getglobalscope 35 getslot 2 37 callproperty f (0)