The <BUILDS DOES> construct in Forth is a little dated but still worth understanding.
This construct provides a simple way to build new data types.

In emforth variables and constants are coded in assembler for speed but they could also be defined as <BUILDS DOES> type words and this is the simplest example of how to use <BUILDS DOES>.
We'll assume the variable is stored in the code space for simplicity.

To define a variable in forth we write something like.


The word VARIABLE is a constructor or building word which creates new Forth words.
In the above example a new word "MYVAR" is created. When MYVAR is executed (either interactively or as part of a compiled definition) it's action is to place the address of the variable storage area onto the data stack.

We could also have a variation on VARIABLE which sets the initial value using a value of the stack.
This alternative might be used like this.
1234 VARIABLE MYVAR // define MYVAR and initialize to 1234

The word CONSTANT is very similar eg.
The above creates a new word "MYCON" which places the number 1234 on the data stack when called.

To define the word "VARIABLE" as <BUILDS DOES> construct we do this.
   0 ,

Pretty simple. This version initializes the variable to zero.
When variable is called "<BUILDS" creates the new word.
The " 0 , " writes a zero word into the location pointed to by DP (dictionary pointer)
"DOES>" sets up the runtime code which pushes the data address onto the stack.
Since this address is all we want there is no more to do. If we wanted to process the data somehow we would have more code after the "DOES>"

To define the alternative version which sets the initial value of the variable from a number on the stack we would do this.

Much the same as before except we don't push a zero onto the stack before the comma.

Now for CONSTANT...

This is exactly the same as before except we "fetch" the value at the address which was placed on the stack by the DOES> runtime code.

Either the building code or the runtime code can be as complex as you like.



Created by eddie. Last Modification: Saturday 26 of January, 2008 21:56:14 AEDT by eddie.

Main Index

Switch Theme


eddie, 11:29 AEST, Sat 22 of Jun, 2024: Offline wiki repair is mostly done. It is running on tiki-27-alpha
eddie, 18:14 AEST, Sun 12 of May, 2024: Phase one of wiki repair is to upgrade to V22 (the last version with image galleries). All 150 images in the wiki-up directory are broken and need manual wiki page repairs.
admin2, 19:45 AEST, Sun 28 of Apr, 2024: Tested tiki 26.2 on a raspberry pi. Tiki 26 does not support image galleries so I have to try again after migrating images to file galleries.
eddie, 13:04 AEST, Thu 10 of Aug, 2023: Offline tiki 26 upgrade went badly. Waiting for 26.1. Will limp on.
System Administrator, 18:45 AEST, Wed 26 of Jul, 2023: Recovered from lockout but unable to upgrade to V24

Last-Visited Pages

Online Users

33 online users