確認作業
使用例のナニを。(カンニングしつつ
LREF0_PUSH
gosh> (disasm (lambda (a b c d e f) (a f))) main_code (name=#f, code=0x81f1ca0, size=4, const=0, stack=4): args: #f 0 LREF0-PUSH ; f 1 LREF(0,5) ; a 2 TAIL-CALL(1) ; (a f) 3 RET #<undef> gosh>
LREF1_PUSH
gosh> (disasm (lambda (a b c d e f) (a e))) main_code (name=#f, code=0x81f1c70, size=4, const=0, stack=4): args: #f 0 LREF1-PUSH ; e 1 LREF(0,5) ; a 2 TAIL-CALL(1) ; (a e) 3 RET #<undef> gosh>
LREF2_PUSH
gosh> (disasm (lambda (a b c d e f) (a d))) main_code (name=#f, code=0x81f1c40, size=4, const=0, stack=4): args: #f 0 LREF2-PUSH ; d 1 LREF(0,5) ; a 2 TAIL-CALL(1) ; (a d) 3 RET #<undef> gosh>
LREF3_PUSH
gosh> (disasm (lambda (a b c d e f) (a c))) main_code (name=#f, code=0x81f1c10, size=4, const=0, stack=4): args: #f 0 LREF3-PUSH ; c 1 LREF(0,5) ; a 2 TAIL-CALL(1) ; (a c) 3 RET #<undef> gosh>
LREF4_PUSH
gosh> (disasm (lambda (a b c d e f) (a b))) main_code (name=#f, code=0x81f1be0, size=4, const=0, stack=4): args: #f 0 LREF-PUSH(0,4) ; b 1 LREF(0,5) ; a 2 TAIL-CALL(1) ; (a b) 3 RET #<undef> gosh>
む。
LREF10_PUSH
gosh> (disasm (lambda (a b c d e) (lambda (x) (x e)))) main_code (name=#f, code=0x81f1ba0, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (x e)) 2 RET internal_closure_0 (name=#f, code=0x81f1bb0, size=4, const=0 stack=4): args: #f 0 LREF10-PUSH ; e 1 LREF0 ; x 2 TAIL-CALL(1) ; (x e) 3 RET #<undef> gosh>
LREF11_PUSH
gosh> (disasm (lambda (a b c d e) (lambda (x) (x d)))) main_code (name=#f, code=0x81f1b40, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (x d)) 2 RET internal_closure_0 (name=#f, code=0x81f1b50, size=4, const=0 stack=4): args: #f 0 LREF11-PUSH ; d 1 LREF0 ; x 2 TAIL-CALL(1) ; (x d) 3 RET #<undef>
LREF12_PUSH
gosh> (disasm (lambda (a b c d e) (lambda (x) (x c)))) main_code (name=#f, code=0x81f1ae0, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (x c)) 2 RET internal_closure_0 (name=#f, code=0x81f1af0, size=4, const=0 stack=4): args: #f 0 LREF12-PUSH ; c 1 LREF0 ; x 2 TAIL-CALL(1) ; (x c) 3 RET #<undef> gosh>
LREF13_PUSH
gosh> (disasm (lambda (a b c d e) (lambda (x) (x b)))) main_code (name=#f, code=0x81f1a80, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (x b)) 2 RET internal_closure_0 (name=#f, code=0x81f1a90, size=4, const=0 stack=4): args: #f 0 LREF-PUSH(1,3) ; b 1 LREF0 ; x 2 TAIL-CALL(1) ; (x b) 3 RET #<undef> gosh>
あら??
LREF14_PUSH
gosh> (disasm (lambda (a b c d e) (lambda (x) (x a)))) main_code (name=#f, code=0x81f1a20, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (x a)) 2 RET internal_closure_0 (name=#f, code=0x81f1a30, size=4, const=0 stack=4): args: #f 0 LREF-PUSH(1,4) ; a 1 LREF0 ; x 2 TAIL-CALL(1) ; (x a) 3 RET #<undef> gosh>
あらら??
LREF20_PUSH
gosh> (disasm (lambda (a b) (lambda (x) (lambda (y) (y b))))) main_code (name=#f, code=0x81f1930, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (lambda (y) (y b))) 2 RET internal_closure_0 (name=#f, code=0x81f1940, size=3, const=1 stack=0): args: #f 0 CLOSURE #<lambda 1> ; (lambda (y) (y b)) 2 RET internal_closure_1 (name=#f, code=0x81f1950, size=4, const=0 stack=4): args: #f 0 LREF20-PUSH ; b 1 LREF0 ; y 2 TAIL-CALL(1) ; (y b) 3 RET #<undef> gosh>
LREF21_PUSH
gosh> (disasm (lambda (a b) (lambda (x) (lambda (y) (y a))))) main_code (name=#f, code=0x81f18b0, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x) (lambda (y) (y a))) 2 RET internal_closure_0 (name=#f, code=0x81f18c0, size=3, const=1 stack=0): args: #f 0 CLOSURE #<lambda 1> ; (lambda (y) (y a)) 2 RET internal_closure_1 (name=#f, code=0x81f18d0, size=4, const=0 stack=4): args: #f 0 LREF21-PUSH ; a 1 LREF0 ; y 2 TAIL-CALL(1) ; (y a) 3 RET #<undef> gosh>
LREF30_PUSH
gosh> (disasm (lambda (a) (lambda (b) (lambda (c) (lambda (d) (d a)))))) main_code (name=#f, code=0x81f1820, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (b) (lambda (c) (lambda (d) (d a ... 2 RET internal_closure_0 (name=#f, code=0x81f1830, size=3, const=1 stack=0): args: #f 0 CLOSURE #<lambda 1> ; (lambda (c) (lambda (d) (d a))) 2 RET internal_closure_1 (name=#f, code=0x81f1840, size=3, const=1 stack=0): args: #f 0 CLOSURE #<lambda 2> ; (lambda (d) (d a)) 2 RET internal_closure_2 (name=#f, code=0x81f1850, size=4, const=0 stack=4): args: #f 0 LREF30-PUSH ; a 1 LREF0 ; d 2 TAIL-CALL(1) ; (d a) 3 RET #<undef> gosh>
ええと
- LREF4_PUSH
- LREF13_PUSH
- LREF14_PUSH
はどうなんでしょうか。
# って obsoleted なナニが見えるな。