継続が分かっちゃったかも

継続の概念そのものは、それなりに分かったつもりでいたんだけど、ニセSchemeに実装できていなかった。
俺のニセSchemeには、変数のスコープはそのものずばりで、Scopeクラスがあるからコピーをとるのは簡単なんだけど、
ニセSchemeのコールスタックが、Javasctriptのコールスタックだったので、
コールスタックはJavascriptのコールスタックにアクセスしないと取り出せなかった(できるのか?)。
それに、プログラムカウンタだって、仮に記憶したとして、どうやって復帰すればいいのかが分からなかった。

そんなこんなで、構文木バイトコード化すればいいんだな。
つまり、こういう、スタックマシンにすればいいんじゃないかと思う。
時間が少ないから説明足りないけど、メモとして書き残し。

(define fact (lambda (x)
	(if (eq x 0) 1
		(* x (fact (- x 1))))))
(fact 5)
lambda-1:
	# 引数処理
	push 'x
	define 2
	pop

	#(eq x 2)
	push 0
	ref 'x
	eq 2

	# if 
	jpnil :else
	put 1
	jp :endif

:else
	ref 'x
	ref 'x
	put 1
	sub
	ref 'fact
	call 2
	ref 'x
	ref '*
	call 2
:endif
:eof

main:
	function lambda-1
	put 'fact
	define 2

	put 5
	ref 'fact
	call 2
:eof