pfe-module-ext
Prev? | pfe Forth Wordset List | ?Next

## Name

pfe-module-ext ? MODULE - simple module implementation

## Synopsis

`MODULE ( "name" -- old-current ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

`END-MODULE ( old-current -- ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

`EXPORT ( old-current "name" -- old-current ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

`EXPOSE-MODULE ( "name" -- ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

`ALSO-MODULE ( "name" -- ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

## Description

MODULE ( "name" -- old-current ) => "EXTENSIONS"

create a new `WORDLIST` with the given name. It will also have an implicit hidden vocabulary just as well and all `DEFINITIONS` will go into that hidden wordlist. Therefore the old `CURRENT` is memorized on the cs-stack.

effectivly, CONTEXT[1] will have the wordlist-id of the public wordlist "name" and CONTEXT[0] will have the hidden wordlist contained in "name" - the hidden wordlist will always be known as HIDDEN' so that it can be re-referenced without need to use `ALSO` just to access a single definition from just another vocabulary. Note that HIDDEN' is defined immediate (a `VOCABULARY'` ) to modify the `ORDER` inside a colon definition.

      : MODULE
        CURRENT @ ( -- old-current )
        VOCABULARY
        ALSO LATEST NAME&gt; EXECUTE ALSO DEFINITIONS
        C" HIDDEN'" $CREATE WORDLIST CONTEXT !
      ;

END-MODULE ( old-current -- ) => "EXTENSIONS"

clean up the cs-stack from the last `MODULE` definition. Effectivly, MODULE definitions can be nested.

      : END-MODULE ( old-current )
        PREVIOUS PREVIOUS CURRENT !

EXPORT ( old-current "name" -- old-current ) => "EXTENSIONS"

the named word in the hidden dictionary (i.e. the wordlist referenced in `CURRENT`) is exported into the public wordlist of it (i.e. which is in this implementation `CONTEXT`[1]). The actual implemenation will create a `DEFER`-word in the public wordlist withits parameter area pointing to the cfa of the hidden implementation.

      : EXPORT
        CURRENT @ CONTEXT CELL+ @ CURRENT !
        DEFER CURRENT !
        LATEST COUNT CURRENT @ SEARCH-WORDLIST
        IF LATEST NAME&gt; &gt;BODY ! ELSE ABORT" can't find word to export" THEN
      ;

EXPOSE-MODULE ( "name" -- ) => "EXTENSIONS"

affects the search order, ALSO module-wid CONTEXT ! hidden'

      : EXPOSE-MODULE
         ALSO S" HIDDEN'"
         ' DUP VOC? ABORT?" is no vocabulary" &gt;VOC
         SEARCH-WORDLIST 0= IF " no hidden vocabulary found" THEN
         DUP VOC? ABORT?" hidden is no vocabulary" EXECUTE
      ;

ALSO-MODULE ( "name" -- ) => "EXTENSIONS"

affects the search-order, ALSO module-wid CONTEXT !

      : ALSO-MODULE
        ' DUP VOC? ABORT?" is no vocabulary"
        ALSO EXECUTE
      ;

Prev? | Up | ?Next
pfe-misc-ext? | Home | ?pfe-option-ext