Syntax:
gosub <label> return
The GOSUB
command calls a subroutine marked by a label. RETURN
will pass control back to the caller. Nesting subroutines are supported (GOSUB
and RETURN
compiles to just plain JSR
and RTS
, nothing fancy). Stack overflow is not checked in runtime, but is quite unlikely to encounter. Example:
rem ** subroutines ** gosub first_routine end first_routine: print "hello world" gosub second_routine return second_routine: print "and hello again" return
Note #1: make sure to use the END
command before your routines if you don't want them to be executed in the normal program flow (like in the example above).
Note #2: there is no runtime call stack checking (e. g. no ?RETURN WITHOUT GOSUB ERROR
). If your call stack is corrupted, the program is likely to break.
Note #3: Unlike procedures, subroutines do not open a new local scope.