HELP GO_ON                                          John Gibson Apr 1996

    go_on expression to prefix: statement-sequence endgo_on

    go_on expression to lab1, lab2, ..., labN else elselab ;

A Pop-11 go_on statement causes a jump to a specified label depending
upon a given integer.

         CONTENTS - (Use <ENTER> g to access required sections)

  1   First Format
  2   Second Format
  3   See Also


-----------------------------------------------------------------------
1  First Format
-----------------------------------------------------------------------

The first format of go_on is

    go_on expression to prefix :
        statement-sequence
    endgo_on

where expression must produce an integer (otherwise a mishap results).

prefix is any (non-syntax) word that will mark the different cases
inside statement-sequence. The go_on statement defines this word as a
temporary macro which takes one argument and produces a label. Inside
statement-sequence you can then use

     prefix arg:

to label each case, where arg is an integer or the word default. (Note
that arg is macro-expanded, so may itself be a macro for an integer
value.)

Labels for different integer values may appear in any order in the
statement. (However, currently, the spread between the minimum and
maximum integer values specified must not be greater than 1024.)

In addition, the prefix macro can be used in a goto, i.e.

    goto prefix arg

where in this context, arg may also be the word end to mean go to the
end of the statement.

For example (where x contains an integer),

    go_on x to Case:
        Case 2:
            <some code>
            goto Case end;

        Case 5:
            <some code>
            goto Case 2;

        Case default:
            <some code>
    endgo_on;

All integer values for which there is no corresponding prefix label will
go to the default label (if the default label itself is absent, one is
inserted automatically together with code to produce a mishap).

Note that the whole statement is generated inside a lexical block, and
the prefix macro is lexically scoped within that block. Thus you cannot
refer to prefix outside of the statement.


-----------------------------------------------------------------------
2  Second Format
-----------------------------------------------------------------------

The second (older) format of go_on is

    go_on expression to lab1, lab2, ..., labN else elselab ;

where the else elselab part is optional. expression must produce an
integer I from 1 to N which then selects the label from lab1 to labN to
go to.  If I is not between 1 and N inclusive, then elselab is jumped to
if present, otherwise a mishap results.

All the labels specified, including elselab, may be either local labels
(somewhere in the current procedure) or non-local ones (somewhere in a
lexically-enclosing procedure).


-----------------------------------------------------------------------
3  See Also
-----------------------------------------------------------------------

HELP * EXPRASS
    Forms of expression in Pop-11.

HELP * GOTO
    Transferring control to a labelled instruction.

HELP * LABELS
    Representation of labels in Pop-11.

HELP * CONDITIONALS
    Summary of conditional statements in Pop-11.

REF * POPSYNTAX
    Syntax diagrams for Pop-11.



--- C.all/help/go_on
--- Copyright University of Sussex 1996. All rights reserved.
