fail

fail erklärt einen Funktionscall als fehlgeschlagen.

doSomething( a is int ) :=
{
  if( a == 0 ) fail InvalidNumber;
}

Im Falle einer zwangsläufigen Rückgabevariablen (out) wäre diese aber noch nicht belegt.

<code cpp>
doSomething( a is int, b is int out ) :=
{
  body
  {
  if( a == 0 ) fail InvalidNumber;
 
  /* Algorithm */
 
    succeed; //optional 
  }
 
  on fail( value )
  {
    b = 0;
    log "failed with "+value\.fullName(); // value ist ein Objekt vom Typ global.doSomething.InvalidNumber (void) und heißt (full) global.doSomething.InvalidNumber
  }
 
  on succeed
  {
    log "succeed: " + this\.fullname(); //this is global.doSomething(int, int out)
  }
 
  on return
  {
    log "wird nach fail und succeed ausgeführt";
  }
 
  pre
  {
    log "Funktion wird mit a={a} und b={b} aufgerufen";
  }
 
  post
  {
    log "Funktion wird jetzt verlassen";
  }
}

In dem Fall wird erst b auf 0 gesetzt, anschließend wird InvalidNumber an die rufende Funktion übergeben.