In which I discover the return stack
The return stack is used in many Forth systems to record return addresses when executing defined words. We currently don’t need this because the return stack is implicit in the Swift stack. However, the return stack can be used for temporary storage. Furthermore, at some point, we would like to replace the Swift stack with a return stack of our making.
So far, we have identified two types of object that we would like to stop on the return stack:
- return addresses which will consist of a
WordList
and an offset – but aren’t needed just yet. - data stack items
We will also need words for manipulating the return stack. For example >R
, R>
, R@
.
At the moment the return stack is implemented as a stack of an enumeration defined as follows:
fileprivate enum ReturnStackCell
{
case `return`(WordList, Int)
case data(Int)
}
This makes it very simple to implement the words that manipulate it. Currently, we don’t cache the top word of the return stack, although that is an obvious optimisation.
The code is tagged blog-1113