- If/For/Repeat/While/Switch - Steuerelemente sind nun voll implementiert.
- Variablen Scopes (lokal im Hauptprogramm, lokal pro Procedure, statisch in Procedure, Global)
- Proceduren ("proc") vollständig implementiert, Rekursionen möglich (automatisches Sichern&Wiederherstellen lokaler Variablen), automatisches Initialisieren lokaler Variablen (außer statisch, natürlich), ...
- Ein paar Verbesserungen am Optimizer, ein paar neue Peephole-Regeln und schon in der Code-Generation Phase wird nun versucht die effizienteste aus mehreren verschiedenen Varianten zu wählen.
Und: Pointer Anders als in PB ist der "*" nicht Teil des Variablennamens eines Pointers sondern ein Operator, der Dereferenzierungs oder Indirektions-Operator.
Dadurch werden solche (mehr oder weniger sinnvollen) Konstrukte wie in C möglich, bis zu 2 (Pointer-Pointer "**") fallen mir noch sinnvolle Anwendungen ein:
Code: Alles auswählen
var {[x], [p1], [p2], [p3], [p4]}
{[p1] = &[x]}
{[p2] = &[p1]}
{[p3] = &[p2]}
{[p4] = &[p3]}
repeat
{****(0+[p4]) += 1}
until {[x] == 1000000}
out [x]
Nebenbei sind beinahe alle Verbesserungen vollständig auf den PB - Part zurückzuführen (Compiler). Lediglich für die Pointer musste ein Indirektionslayer ins Variablen - Management der ByteCode - VM eingezogen werden.
Der Source ist wie immer im Repository zu finden, ebenso alle nötigen Files zum Compilieren (Eclipse - Config Files, usw...) Binarys liegen keine vor, die werden wohl erst wieder geliefert wenn der Cross-Compiler steht, durch die stark verbesserten Syntaktischen Fähigkeiten der Zwischensprache sollte der bald mit reinem Pattern - Matching & Replace zu ermöglichen sein
Gruß, Alex