Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.

RfD: Structures (v2)

Skip to first unread message

Peter Knaggs

Mar 17, 2010, 7:16:45 AM3/17/10
RfD: Structures

2010-03-17 Revised after clf discussions.
2010-02-24 Drafting of RfD
2009-09-03 Original wordsmithing of solution during 200x meeting.


The X:structures extension defines FIELD: as:

10.6.2.xxxx FIELD: "field-colon" FACILITY EXT
( -- ) X:structures

The semantics of FIELD: are identical to the execution semantics
of the phrase:


See: 10.6.2.---- +FIELD, 10.6.2.---- BEGIN-STRUCTURE and
10.6.2.---- END-STRUCTURE.

While this is a very concise definition, there are a few difficulties
with it:

1) The stack description is incorrect, it should be:
( n1 "<spaces>name" -- n2 )

2) It defines a child word which is not described. Normally this is
described in a "name Execution" clause.

3) There is no actual description of the word, simply what amounts
to a reference implementation.

This applies to CFIELD:, DFFIELD:, FFIELD: and SFFIELD: as well.


Replace the definition of FIELD: and friends with:

10.6.2.xxxx FIELD: "field-colon" FACILITY EXT
( n1 "<spaces>name" -- n2 ) X:structures

Skip leading space delimiters. Parse /name/ delimited by a space.
Create a definition for /name/ with the execution semantics
defined below. n1 is the /offset/ from the start of a data
structure to place the new field. If n1 is not a cell aligned
offset it should be modified to be so. n2 is the next available
offset after reserving sufficient space for a single cell in the
data structure.

FIELD: creates a single cell field in a data structure. The
execution semantics are identical to:


name Execution: ( a-addr1 -- a-addr2 )
Add the /offset/ calculated during the compile time action to
a-addr1 giving the cell aligned address a-addr2.

See: 10.6.2.---- +FIELD, 10.6.2.---- BEGIN-STRUCTURE,
10.6.2.---- END-STRUCTURE, A.10.6.---- BEGIN-STRUCTURE.


Modify the definition of the following words in accordance with the
text given in the Solution, above, with the modification of the
alignment as follows:

FIELD: cell aligned
CFIELD: character aligned
FFIELD: float aligned
SFFIELD: single-float aligned
DFFIELD: double-float aligned

Peter Knaggs <>
School of Engineering, Mathematics and Physical Sciences,
University of Exeter, Exeter, Devon EX4 7QF, England

0 new messages