引数と返り値サポート

http://github.com/mzp/scheme-abc/commit/ee63e8f23b70c61ab5e0e9f5fbccd5dfc57b2b61

yn$ cat example/lambda.scm
(let ((add (lambda (x y) (+ x y))))
  (print (add 2 3)))

$ ocamlbuild main.byte -- example/lambda.scm
Finished, 53 targets (53 cached) in 00:00:01.

$ avmplus a.abc
5

いえい。だんだんとSchemeっぽくなってきたぞ。早めにdefineをサポートしないと、読みづらくてたまらない。あと再帰クロージャも必要だなぁ。

引数の実現メモ

  • method_infoのparamsに引数の数だけ0を格納する。(とりあえず型を無視している)
  • 1番目の引数はレジスタ1に格納されている。GetLocal 1でロードできる
  • レジスタを使うには、method_bodyのlocal_countに、最大のレジスタ番号を設定する必要がある