GOSUB

Sinds 3.1

GOSUB Label

Jump to a label declared elsewhere in the function. Then, if a RETURN instruction is encountered, the program comes back to run the code just after the GOSUB instruction.

GOSUB calls can be imbricated, until the memory is exhausted.

The same restrictions as GOTO apply

Computed GOSUB

Sinds 3.19

GOSUB Expression

Since Gambas 3.19, GOSUB (or GOTO) can take any expression as argument.

This expression must return an integer that represents the label you want to branch.

This integer is obtained by using labels as expression. In that case, a labels is transformed into an integer index representing it (only in the function where the label is defined).

Only labels that are outside of any control structure can be a target of a computed GOTO or GOSUB.

Example

Dim JumpArray As Integer[]

JumpArray = [LABEL_1, LABEL_2, LABEL_3]

GoSub JumpArray[Rand(1, 3)]
Return

LABEL_1:
  Print "One !"
  Return
LABEL_2:
  Print "Two !"
  Return
LABEL_3:
  Print "Three !"
  Return

See also