5.4 Break statements leave and restart

The break statements, leave and restart may be used to terminate the execution of a pattern or singular object or to start execution from the beginning:

Ptn: Super
   ...
      leave(Ptn)
   ...
      restart(Ptn)
   ...
Obj: obj Super
   ...
      leave(Obj)
   ...
      restart(Obj)
   ...

Leave and restart may appear at an arbitrary nesting level within Ptn or Obj.

Note. The declarations are only executed when the object is generated — a restart does not imply re-execution of declarations within Ptn and/or Obj.

Example

Loop: do
   i: var integer
   i := i + 1
   foo(i)
   if (i > 10) :then leave(Loop)
   bar
   restart(Loop)

Comparison to Beta

In Beta a statement may be labelled – qBeta does not have labelled statements. Instead singular objects may be used as labelled statements.

OBS! Introduce the do-object

Grammar

<Break-Statement> ::= <Leave-Statement> | <Restart-Statement>
<Leave-Statement>  ::= 'leave' '(' <Pattern-or-Object-name> ')'
<Restart-Statement> ::= 'restart' '(' <Pattern-or-Object-name> ')'

Hello world