クラス関係の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)