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

System Administrator, 13:56 AEST, Sun 07 of Aug, 2016: upgrading to tiki 15.2
eddie, 19:31 AEST, Sat 06 of Aug, 2016: This website is now served from Brisbane - in a Binarylane cloud.
System Administrator, 16:07 AEDT, Wed 06 of Mar, 2013: More f'n spam. No more anon posting from now on.
Anonymous, 18:44 AEDT, Mon 04 of Mar, 2013: deleted
Anonymous, 08:36 AEDT, Sun 03 of Mar, 2013: Very nice site!

Last-Visited Pages

Online Users

25 online users