

	Release Notes zu Version 2.02 des PTOC
	-------------------------------------

	Das Release 2.01 des PTOC enthaelt Fehlerbehebungen fuer die
	7 Programme aus der PASCAL Validation Suite, in denen Fehler
	auftraten.

	Es folgen Bemerkungen zu den einzelnen Fehlern und Ihrer Behebung:

	1) Hier liegt ein Irrtum meinerseits vor, da in diesem Fall die
	Fehlermeldung, die vom PTOC erzeugt wird, zwar nicht mehr die
	ganze Quelltextzeile (wie bei den meisten Fehlermeldungen) enthaelt,
	aber immerhin noch die Zeilennummer und den Identifier auf den
	sich die Fehlermeldung bezieht. Dies ist deshalb so implementiert,
	weil zu dem Zeitpunkt, zu dem der Fehler festgestellt wird,
	die urspruengliche Zeile, auf die sich der Fehler bezieht, nicht
	mehr im Speicher vorhanden ist.

	2) Fehler in der Funktion "IsZero" bei Konstanten vom Typ "real"
	in der Quelldatei "common/fold.c", der beim Falten von konstanten
	Ausdruecken zum Vorschein kam (siehe PVS Testprogramm).

	3) Dieser Fehler haengt mit der Definition des Modulo Operators
	in PASCAL zusammen, die sich von der in C unterscheidet, u. zw.
	ist in PASCAL "i mod j" definiert als "i - K * j", wobei K eine
	Konstante ist so dass "0 <= (i mod j) < j", waehrend in C (und
	in der Mathematik) "i % j" definiert ist als "i - (i / j) * j".
	Aus den obigen Definitionen ist ersichtlich, dass das Resultat
	des Modulo Operators in PASCAL und in C dasselbe ist wenn  der
	erste Operand positiv ist oder das Resultat gleich 0 ist, andernfalls
	aber verschiedenist. In der HDG-Zwischensprache gibt es auch
	2 verschiedene Modulo Operatoren (einen ModuloOp fuer PASCAL
	und einen ModOp fuer C) die aber faelschlicherweise gleichgesetzt
	wurden bei der bisherigen Implementierung des PTOC. Fehlerbehebung
	in "pascl/sem.P".

	4) Dieser Fehler trat in Zusammenhang mit lokalen Variablen vom
	Typ "file" auf, u. zw. lag der Fehler in der Funktion "sql__gc"
	in der Quelldatei "libpc/sql__pmain.c". Diese Funktion sollte
	den Inhalt des "Frame Pointer Registers" der aufrufenden Funktion
	zurueckliefern, der dann einer anderen Funktion "sql__closea"
	als Parameter uebergeben wurde und in dieser dann verwendet wurde
	um festzustellen welche Files lokale Variablen sind und aus 
	der verketteten Liste aller Files entfernt werden mussten, bevor
	der Speicherplatz auf dem Stack, den sie belegt hatten, wieder
	freigegeben wurde. Das Problem bei der Behebung dieses Fehlers
	liegt darin, dass ein spezieller Hardwareregister nur in Assembler
	angesprochen werden kann, nicht aber in C. Ich habe zwar eine
	Implementierung dieser Funktion in C gemacht, die auf den
	meisten Architekturen ( Intel, Motorola) funktioniert, doch
	gibt es auch einige (wie die Pyramid) auf denen dieser Trick
	nicht funktioniert. Falls dieses Thema, naemlich lokale Variablen
	vom Typ File, fuer Sie von Bedeutung ist, sollte man eine
	maschinenunabhaengige Loesung entwerfen und implementieren.

	5) Dieser Fehler hatte dieselbe Ursache wie der unter Nr. 3.

	6) Dieser Fehler trat auf, wenn der Returnwert einer Funktion
	vom Typ "array", "file" oder "set" war. Da es im Standard PASCAL
	verboten ist, dass der Typ des Returnwerts einer Funktion ein struktu-
	rierter Typ ist, habe ich eine Fehlermeldung fuer diesen Fall
	eingebaut. Dadurch wird jetzt immer ein Fehler gemeldet wenn
	ein Returnwert vom Typ "array", "file", "set" oder "record"
	deklariert wird. Sollte der Typ "record" fuer Returnwerte
	in Ihren Programmen erwuenscht sein, koennte man dieses leicht
	einbauen.

	7) Dieser Fehler hatte dieselbe Ursache wie der unter Nr. 4.
	
