====== 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 mystruct__set__value bzw. mystruct__get__value 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();
}