next up previous
Next: 8 アセンブル Up: ソフトウェア特論 講義資料 Scheme コンパイラ処理系 Previous: 6.3 define マクロ

7 関数呼び出し部のコンパイル

関数呼び出し部のコンパイルは,引数すべてをコンパイルしてから, 本体をコンパイルし,その関数を呼び出すコードを生成することを 行います. 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日