Next: 8 アセンブル
Up: ソフトウェア特論 講義資料 Scheme コンパイラ処理系
Previous: 6.3 define マクロ
関数呼び出し部のコンパイルは,引数すべてをコンパイルしてから,
本体をコンパイルし,その関数を呼び出すコードを生成することを
行います.
comp-callは,関数呼び出しを行うフォームのコンパイルを
行います.
(defun comp-call (name params env)
(seq (apply #'append
(mapcar #'(lambda (y) (comp y env))
params))
(comp name env)
(gen 'call (length params))))
<cl> (comp-show '(1 2 3))
ARGS 0
CONST 2
CONST 3
CONST 1
CALL 2
RETURN
NIL
<cl> (comp-show '(a 1 2))
ARGS 0
CONST 1
CONST 2
GVAR A
CALL 2
RETURN
NIL
<cl> (comp-show '(+ 1 2))
ARGS 0
CONST 1
CONST 2
GVAR +
CALL 2
RETURN
NIL
<cl> (comp-show '(list a b))
ARGS 0
GVAR A
GVAR B
GVAR LIST
CALL 2
RETURN
NIL
<cl> (comp-show '(a b c))
ARGS 0
GVAR B
GVAR C
GVAR A
CALL 2
RETURN
NIL
<cl> (comp-show '(a 1 (b 2)))
ARGS 0
CONST 1
CONST 2
GVAR B
CALL 1
GVAR A
CALL 2
RETURN
NIL
generated through LaTeX2HTML. M.Inaba 平成18年5月6日