diff options
Diffstat (limited to 'execution.e')
| -rw-r--r-- | execution.e | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/execution.e b/execution.e index 0aa5491..7a10e70 100644 --- a/execution.e +++ b/execution.e @@ -147,6 +147,21 @@ ~ The macros next, beforenext, pushcontrol, and popcontrol are implemented ~ in execution-support.e. It's a good idea to go read about them now. +~ +~ TODO the following high-level summary should go... somewhere? +~ When a docol word is invoked, it immediately does pushcontrol (see +~ execution-support.e) to push rsi onto the control stack, whose top is +~ indicated by rbp. When an assembly word is invoked, it leaves rsi and rbp +~ alone; assembly words don't normally call other words, so there's no need +~ for them to appear on the control stack at all. +~ +~ When an assembly word returns, it looks for an execution token pointed +~ to by rsi, increments rsi, and invokes that word as if calling it. This +~ is the threaded calling approach to Forth execution. When a docol word +~ returns, it calls exit, which needs to remove itself from the control +~ stack, so exit pops the top of the control stack into rsi to get back into +~ its caller's context, then does the same steps an assembly word would do. + ~ Constants ~ ~~~~~~~~~ |