oadl::setjmp
- establish the target for a
subsequent non-local jump
oadl::setjmp(
buf)
The setjmp()
/ longjmp()
duo can perform a non-local jump. The argument buf must be a
List
of exactly
oadl::JMP_SIZE
elements, which will be
overwritten. setjmp()
returns
false
when it is first executed; otherwise, it
returns the value given to the subsequent
longjmp()
call.
Returns false
when the contents of buf
are established as a target for a subsequent
longjmp()
. Returns the value passed to
longjmp()
when a non-local jump is executed.
TypeCheck
is thrown if buf is not a
List
containing exactly
oadl::JMP_SIZE
elements
proc foo(buf) { oadl::longjmp(buf, true); "This statement is not reached.\n"; } proc bar() { var buf = new List(oadl::JMP_SIZE); if (oadl::setjmp(buf)) { "Successfully jumped!\n"; } else { foo(buf); } } bar() Successfully jumped!