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.