Sun Oct 10 19:24:21 CEST 2010
CALL and RETURN
So effectively, we're implementing a fairly standard CALL and RETURN
with the following additions:
- CALL environment pointer
- RETURN restores environment pointer
How does this then lead to proper tail calls? If after a sequence of
CALLs to build an environment (the RHSs of `let*') an application is
invoked, there is no frame created: only the environment changes as it
comes from the closure, but the continuation stack is "passed on".
I finally got it!