Gauche:YAGHG:VM:Insn:CLOSURE

Gauche:YAGHG:VM:Insn:CLOSURE

概要

;; CLOSURE <code>
;;  Create a closure capturing current environment.
;;  CODE is the compiled code.   Leaves created closure in val0.
;;
(define-insn CLOSURE    0 code)

現在の環境を持ったクロージャを作成する。

オペランド

クロージャのもとなるCompiledCode

動作

大きく

  1. 環境の保存
  2. ScmClosureの作成

の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

Last modified : 2006/01/09 03:58:51 UTC