Planung B++ 2.0

Änderungen nach Version 1.5

Änderungen nach Version 1.4

Änderungen nach Version 1.3

Änderungen nach Version 1.2

Änderungen nach B++1.1

 

 

Änderungen von B++ 1.1 gegenüber 1.0

Änderungen von BOB+2 gegenüber BOB+


 Allgemeines

Literale

Verarbeitungsanweisungen

Vordefinierte Operatoren

Funktionen

Deklaration von Klassen

Überladen von Operatoren

Ausnahmebehandlung

Beispiel:
try { myVar = anyFunc(); if (myVar) < 0) throw "myVar must not be negative"; // do something else } catch (e) { print(e, "catched\n"); throw; // rethrow exception }

Fallunterscheidung (switch-case)


   
Beispiel:
switch (myVariable)
{
   case 1:
	 // do something
	 break;
   case 2:
	 // do any other
	 // fall through 
   default:
	 // do something else
}

Neue vordefinierte globale Variablen

Die Variablen (die eigentlich als Konstanten zu verstehen sind) sollen helfen, plattformunabhängige Programme zu schreiben. Anders als die vordefiniertten Literale bekommen sie ihren Wert nicht zur Kompilier- sondern zur Laufzeit. Ein Programm kann so beispielsweise prüfen, ob es in der selben Umgebung abläuft, in der es übersetzt wurde.

Vordefinierte Funktionen

Aufbau des Bytecode-Vektors einer Funktion

IndexSymbolBeschreibung
0IDX_CODEBytecode-Puffer (BppBuffer)
1 IDX_CLASS Verweis auf Klasse (bei Mehoden), sonst null
2 IDX_NAME Funktionsname
2 IDX_FIRSTLITERAL erstes Literal (=Funktionsname)
3 IDX_DEFAULTARGS Vektor mit default-Argumentwerten
4 IDX_SELFREFERENCE Zeige auf eigenen Code-Vektor (self-Referenz)
... Werte von Literalen und lokalen statischen Variablen
(last)   Vector(Vector(paramnames),Vector(localvarnames)) - nur wenn _genLocalVarInfo in Compiler gesetzt; wenn statische lokale Variablen existieren, enthält localvarnames ein zusätzliches Element (letztes, Dictionary) mit Zuordnungen der Namen der lokalen statischen Variablen zu Indizes im Vektor.

Stack-Frame bei Funktionsaufruf

Index Beschreibung
BP Objektverweis bei Methodenaufrufen
BP+1 1. Argument
BP+nargs letztes Argument)
FP (= BP+nargs) vor erster lokalen Variablen (falls vorhanden)
FP+1 erste lokale Variable (reserviert für throw Exception)
... lokale Variablen (mit erstem opcode eingefügt)
SP aktueller Stack-Pointer

Weitere Vorhaben