Go to the first, previous, next, last section, table of contents.


withTags

Control-struct: withTags a b c do{ 'a goto ... a }
file: job.t
package: muf
status: alpha

The withTags syntax supports the goto operator, which is primarily intended for non-local tranfers of control from one function to a calling function, used heavily by the event handling system's restarts (see section Muq Events).

The syntax is

withTags tags do{ body }

where tags is a list of zero or more goto target labels, and body is the code scope in which they are to be defined and usable.

If only one tag is used, the withTag synonym to withTags may be used.

Examples:

Defining a single tag x and jumping to it:

Stack:
withTag x do{ "a\n" ,   'x goto   "b\n" ,   x   "c\n" ,   }
a
c
Stack:

Defining three tags x, y, z and jumping between them:

Stack:
       withTags x y z do{
----->   "a\n" , 
----->   'y goto 
-----> x 
----->   "b\n" ,
----->   'z goto
-----> y
----->   "c\n" ,
----->   'x goto
-----> z
----->   "d\n" ,
-----> }
a
c
b
d
Stack:

Finally, an example along the lines of how withTags and goto are actually intended to be used. Jumping to a tag in an enclosing function:

Stack:
       : f -> arg
;---->   withTags x y do{
----->     : g -> arg
;---->       arg if   'x goto   else   'y goto   fi
;---->     ;
----->     arg g
----->   x
----->     "x\n" ,
----->   y
----->     "y\n" ,
----->   }
;----> ;
Stack:
nil f
y
Stack:
t f
x
y
Stack:


Go to the first, previous, next, last section, table of contents.