abstract

abstract verlangt von einem Identifier, dass Zugriffe zu diesem Identifier abgefangen werden können.

mystruct contains
  value is abstract int;

Der Zugriff auf Value kann in dieser Kompilier-Unit direkt auf das int schreiben und von dem int lesen. Extern muss allerdings eine Funktion mystructsetvalue bzw. mystructgetvalue gerufen werden, um das int zu verarbeiten. Diese werden automatisch angelegt.

Ziel der Sache ist, dass man den Getter bzw. Setter überladen kann - auch nachträglich.

mystruct contains
  value is abstract int
  {
    get := { print "get"; return .value; }
    set := { print "set"; .value = value; }
  }

Das ganze funktioniert auch für Funktionen.

mystruct contains
  func is abstract code := print "func";

Es wird eine Aufruffunktion exportiert, die wiederum mystruct::func::pre, mystruct::func::body und mystruct::func::post aufruft:

func is code
{
  .func.pre();
  result : .func.body();
  .func.post();
}