関数関連のABC
関数に関係したABCを淡々と貼るよ。traitも調べないと無意味な予感はしてる。
サブルーチンっぽいやつ
function f(){ } f();
2 newfunction var undefined():* /* disp_id 0*/ 4 getglobalscope 5 swap 6 setslot 1 8 findpropstrict f 10 callproperty f (0) ... var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=0 code_len=1 0 returnvoid }
引数あり
function f(x){ print(x); } f(10);
8 findpropstrict f 10 pushbyte 10 12 callproperty f (1) ... var undefined(*):* /* disp_id 0*/ { // local_count=2 max_scope=0 max_stack=2 code_len=8 0 findpropstrict print 2 getlocal1 3 callproperty print (1) 6 pop 7 returnvoid }
値を返す
function f(){ return 42 }
var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=3 0 pushbyte 42 2 returnvalue }
無名関数
匿名関数と書くと怒られるらしい。
var f = function(){} f();
2 newfunction var undefined():* /* disp_id 0*/ 4 getglobalscope 5 swap 6 setslot 1 8 findpropstrict f 10 callproperty f (0)
クロージャ
var x = 42; var f = function(){ return x; } f();
2 pushbyte 42 4 getglobalscope 5 swap 6 setslot 1 8 newfunction var undefined():* /* disp_id 0*/ 10 getglobalscope 11 swap 12 setslot 2 14 findpropstrict f 16 callproperty f (0) 19 coerce_a 20 setlocal1 21 getlocal1 22 returnvalue 23 kill 1 ... var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=4 0 getglobalscope 1 getslot 1 3 returnvalue }