Der Klassen-Lader ist erreichbar als tycoon.tl.loader.
tycoon.tl.loader.registerClassFile("Foo", "MeinPaket/Foo.tc");
oder etwas bequemer mit
tycoon.tl.loader.registerFile("MeinPaket/Foo.tc");
(dann wird angenommen, die Klasse hätte den Namen der Datei). Am
einfachsten ist es, alle Dateien der Form *.tc einzulesen, dies
geschieht mit
tycoon.tl.loader.registerDirectory("MeinPaket");
Der Lader gibt ein Meldung "Building Foo" für jede bis dato
unbekannte Klasse aus. Für Klassen, die vorher unter einem anderen
Dateinamen bekannt waren, wird eine Warnung mit altem und neuem
Pfad ausgegeben.
Der Klassen-Lader interpretiert alle Dateinamen relativ zum ersten passenden Element der Environment-Variable TL2_PATH. Bei einem Wert von .:/local/teamware/tycoon2/hox/src/TL2 heißt der tatsächlich verwendete Pfad dann ./MeinPaket/Foo.tc, oder /local/teamware/tycoon2/hox/src/TL2/MeinPaket/Foo.tc, falls die erste Datei nicht existiert.
Durch "registerDirectory" werden die DO load-Skripte des alten Systems überflüssig. Achte darauf, dass auch die Wurzelklasse Deines Pakets als einzelnes File existieren muss ("MeinPaket/MeinPaket.tc"). Initialisierungen der Singletons etc. müssen wie vorher explizit durchgeführt werden. Am besten schreibt man sie in ein Skript, das dann mit
DO load "MeinPaket/Init.tyc";
ausgeführt wird. Dieses Skript sollte KEINE Klassendefinitionen
enthalten.
Werden später Dateien gelöscht, beschwert sich der Klassen-Lader, wenn er die zugehörige Klasse überprüft. Um die Überprüfung einer Klasse auszuschalten, ruft man
tycoon.tl.loader.unregisterClass("Foo");
auf. Da Klassen nicht gelöscht werden können, überschreibt man eine nicht mehr benötigte Klasse am besten, indem
man eine leere Definition, also
class Foo metaclass AbstractClass;
eingibt. Dies ist z.B. für die Typüberprüfung wichtig. Zum einen treten dann keine Fehler mehr in dieser Klasse auf und zum anderen treten mit großer Wahrscheinlichkeit Fehler auf, wenn diese Klasse noch irgendwo benutzt wird.
tycoon.tl.loader.update;
Nun werden erst (3a) alle veränderten Klassen eingeparset, es wird
geprüft, ob alle benötigten Klassen bekannt sind (3b), und
schliesslich werden die Klassen in geschickter Reihenfolge übersetzt
(3c). Tritt dabei ein Fehler auf, bricht die Bearbeitung ab. Bereits
geparsete Klassen gehen nicht verloren, beim nächsten Aufruf von
tycoon.tl.update geht es einfach weiter wie vorher.
Wie sehen die einzelnen Schritte aus?
[../TWL/MeinPaket/Foo.tc...
]
[Checking for unknown class names...]evtl. einige Fehlermeldungen.
Circular relationship in Class MetaClass
...
Circular relationship in Class Class
...
Dann beginnen die eigentlichen Übersetzungen:
[Building Foo
recomputing cpl in class BlibBlurb
...
]
plus eventuelle Fehlermeldungen.