6.2.0455 :NONAME colon-no-name CORE EXT

( C: -- colon-sys ) ( S: -- xt )

Create an execution token xt, enter compilation state and start the current definition, producing colon-sys. Append the initiation semantics given below to the current definition.

The execution semantics of xt will be determined by the words compiled into the body of the definition. This definition can be executed later by using xt EXECUTE.

If the control-flow stack is implemented using the data stack, colon-sys shall be the topmost item on the data stack. See 3.2.3.2 Control-flow stack.

Initiation:

( i * x -- i * x ) ( R: -- nest-sys )

Save implementation-dependent information nest-sys about the calling definition. The stack effects i * x represent arguments to xt.

xt Execution:

( i * x -- j * x )

Execute the definition specified by xt. The stack effects i * x and j * x represent arguments to and results from xt, respectively.

See:

Rationale:

Typical use:

   DEFER print
   :NONAME ( n -- ) . ; IS print

Note:

RECURSE and DOES> are allowed within a :NONAME definition.

Testing:

VARIABLE nn1
VARIABLE nn2
T{ :NONAME 1234 ; nn1 ! -> }T
T{ :NONAME 9876 ; nn2 ! -> }T
T{ nn1 @ EXECUTE -> 1234 }T
T{ nn2 @ EXECUTE -> 9876 }T

ContributeContributions

flaagelavatar of flaagel [245] :NONAME PrimitivesRequest for clarification2022-07-05 16:22:37

Are these supposed to support RECURSE?

ruvavatar of ruv

Of course, recurse may be used in an unnamed definition.

The only place where recurse is not allowed is the part of a definition after does> (see the glossary entry for recurse).

A default rule is:

  • for a program: everything which is not explicitly forbidden is allowed;
  • for a system: everything which can be detected by a program and is not explicitly allowed is forbidden.

Where a program means a standard program, and a system means a standard system.

Reply New Version