;; CLOSURE <code> ;; Create a closure capturing current environment. ;; CODE is the compiled code. Leaves created closure in val0. ;; (define-insn CLOSURE 0 code)
現在の環境を持ったクロージャを作成する。
クロージャのもとなるCompiledCode
大きく
の2つに分かれる。前者についてはGauche:YAGHG:VM:フレームのヒープへのコピーを参照。
BEFORE ScmCompiledCode OPERAND ---->+--------+<---+ | | | | | | +--------+ | | | | AFTER | ScmClosure | val0 ---->+---------+ | code | --+------+ env | --+------------> (get_env) +---------+
(compile-p3 '(lambda () 0)) main_code (name=%toplevel, code=0x8445d00, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda () 0) 2 RET internal_closure_0 (name=#f, code=0x840fe58, size=2, const=0 stack=0): args: #f 0 CONSTI(0) 1 RET