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

## Name

pfe-locals-ext ? Locals + extensions

## Synopsis

`(LOCAL) ?=>? (` | `)`; | ?

`"[ANS] FORTH"`;
?

`LOCALS| ( xN ... x2 x1 [name1 .. nameN &lt;|&gt;] -- ) ?=>? (` | `)`; | ?

`"[ANS] FORTH"`;
?

`LVALUE ( value [name] -- ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

`LBUFFER: ( size [name] -- ) ?=>? (` | `)`; | ?

`"EXTENSIONS"`;
?

## Description

"ENVIRONMENT #LOCALS" ( -- number ) * the number of local names allowed during compilation. * portable programs can check this with => ENVIRONMENT?

(LOCAL) - no description, sorry

LOCALS| ( xN ... x2 x1 [name1 .. nameN &lt;|&gt;] -- ) => "[ANS] FORTH"

create local identifiers to be used in the current definition. At runtime, each identifier will be assigned a value from the parameter stack. The identifiers may be treated as if being a `VALUE` , it does also implement the ansi `TO` extensions for locals. Note that the identifiers are only valid inside the currently compiled word, the `SEE` decompiled word will show them as `&lt;A&gt;` `&lt;B&gt;` ... `&lt;N&gt;` a.s.o. see also `LVALUE`

LVALUE ( value [name] -- ) => "EXTENSIONS"

declares a single local `VALUE` using `(LOCAL)` - a sequence of `LVALUE` declarations can replace a `LOCALS|` argument, ie. `LOCALS| a b c |` is the same as `LVALUE a LVALUE b LVALUE c` . This should also clarify the runtime stack behaviour of `LOCALS|` where the stack parameters seem to be assigned in reverse order as opposed to their textual identifier declarations. compare with `VALUE` and the pfe's convenience word `VAR`.

      : LVALUE
        STATE @ IF
          VALUE
        ELSE
          BL WORD COUNT DUP (LOCAL) (TO)
        THEN
      ; IMMEDIATE

LBUFFER: ( size [name] -- ) => "EXTENSIONS"

declares a single local `VALUE` using `(LOCAL)` - which will hold the address of an area like `BUFFER:` but carved from the return-stack (as in C with alloca). This local buffer will be automatically given up at the end of the word. The return-stack-pointer will be increased only at the time of this function (and the address assigned to the `LVALUE`) so that the provided size gets determined at runtime. Note that in some configurations the forth-return-stack area is quite small - for large string operations you should consider to use a `POCKET-PAD` in pfe.

      : LBUFFER:
        STATE @ IF
          BUFFER:
        ELSE
          :NONAME ( size -- rp* ) R&gt; RP@ - DUP RP! SWAP &gt;R ;NONAME
          COMPILE, POSTPONE LVALUE
        THEN
      ; IMMEDIATE

Prev? | Up | ?Next
pfe-host-k12-ext? | Home | ?pfe-memory-ext