6.10.7 Anonymous Definitions

Sometimes you want to define an anonymous word; a word without a name. You can do this with:

:noname ( – xt colon-sys  ) core-ext “colon-no-name”

This leaves the execution token for the word on the stack after the closing ;. Here’s an example in which a deferred word is initialised with an xt from an anonymous colon definition:

Defer deferred
:noname ( ... -- ... )
  ... ;
IS deferred

Gforth provides an alternative way of doing this, using two separate words:

noname ( ) gforth-0.2 “noname”

The next defined word will be anonymous. The defining word will leave the input stream alone. The xt of the defined word will be given by latestxt, the nt by latestnt.

latestxt ( – xt  ) gforth-0.6 “latestxt”

xt is the execution token of the last word defined in the current section.

The previous example can be rewritten using noname and latestxt:

Defer deferred
noname : ( ... -- ... )
  ... ;
latestxt IS deferred

noname works with any defining word, not just :.

latestxt also works when the last word was not defined as noname. It does not work for combined words, though, use latestnt. It also has the useful property that it is valid as soon as the header for a definition has been built. Thus:

latestxt . : foo [ latestxt . ] ; ' foo .

prints 3 numbers; the last two are the same.