Next: ick_resume, Previous: ick_comefrom and ick_nextfrom, Up: External Calls to C [Index]
ick_next
is a macro that acts like the
INTERCAL statement NEXT
. Contrary to
the other INTERCAL-like macros, it can be used in
any function regardless of whether it was defined with
ICK_EC_FUNC_START
; however, it must still be used as a
statement by itself, and a call to it looks like
ick_next(expression);
. The expression is the label to
NEXT
to, and works under the same rules as the expressions
for ick_comefrom
; it need not be constant (unlike in
C-INTERCAL!), but must not have side effects, must not be
negative, must fit into the range of an unsigned long, and is ignored
if it is over 65535. If there happen to be multiple labels with the
correct value at the time, the compiler will NEXT
to one
of them. Bear in mind that there is a limit of 80 entries to the
NEXT
stack, and that this limit is enforced.
If the resulting NEXT
stack entry is RESUME
d
to, the program will continue after the ick_next
as if via
setjmp
, with all the usual restrictions that that entails;
if the resulting NEXT
stack entry is forgotten, then the
ick_next
call will never return. (Note that the ’as
if via setjmp’ condition allows you to preserve the vales of
auto
and alloca
-allocated storage as long as
its value has not changed since the ick_next
was called,
which is a significantly more lenient condition than that normally
imposed on such variables (see External Calls and auto).)