Loading...
 
Forth

buildsdoes

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.

VARIABLE MYVAR

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.
1234 CONSTANT MYCON
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.
: VARIABLE 
   <BUILDS
   0 ,
   DOES> 
;

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.
: VARIABLE 
   <BUILDS
   ,
   DOES> 
;

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

Now for CONSTANT...
: CONSTANT 
   <BUILDS
   ,
   DOES> 
   @
;

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.

SAM7 FORTH

eddie


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

Main Index

Switch Theme

Shoutbox

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
eddie, 23:20 AEST, Sun 29 of Aug, 2021: moving to new server
System Administrator, 17:23 AEST, Thu 12 of Aug, 2021: Image thumbnails not working for gallery images. Problems with the GD extension.
System Administrator, 19:44 AEST, Mon 09 of Aug, 2021: uploaded wiki and database to main server. It didn't work but the old wiki and repaired database seem to mostly work.

Last-Visited Pages

Online Users

5 online users