7.9 KiB
7.9 KiB
1. Belege aus der Original-Hilfe
- 1.1 Einzelseiten zu
ON TIMER,ON KEY,ON UEVENT,ON SIGNAL,TIMER,KEY(n),UEVENT,SIGNAL(n),EVENTundSetUEventerfassen und inumfang-und-form.mddieses Changes wortgetreu festhalten (Syntaxzeilen, Wertebereiche vonn, Reihenfolge gleichzeitig fälliger Ereignisse, Verhalten in Prozeduren); verifiziert durch die vorhandene Datei mit Quellenangabe je Element - 1.2 Aus 1.1 die Festlegungen ableiten, die die Hilfe nicht hergibt, und sie als Abweichung in
docs/sprachreferenz.md§8 eintragen — insbesondere die Quellenzuordnung vonSIGNAL(n); verifiziert durch den Abschnitt „Abweichungen" mit je einem Satz Begründung - 1.3 Delta-Specs an die Belege aus 1.1 angleichen (Leitplanke „Referenzverhalten schlägt Eleganz"):
EVENTohneSTOP, automatischerSTOP/ONum den Handler,OFFverwirft Gemerktes, Wertebereiche vonKEY/TIMER/SIGNAL; verifiziert durchopenspec validate --strictund die geänderten Requirements
2. Zeit- und Mausquelle im Host (BREAKING)
- 2.1
Host-Trait um eine monotone Zeitabfrage erweitern undTerminalHostdaran anschließen; verifiziert durchcargo build, das alle drei Host-Implementierungen ohne Warnung übersetzt - 2.2
CaptureHostum eine stellbare virtuelle Uhr erweitern (setzen und vorrücken); verifiziert durch einen Unit-Test, der die Uhr vorrückt und den gelesenen Wert prüft - 2.3 Signalquelle: Marke im Signalhandler setzen, Übersetzung in ein Ereignis beim Abholen (D8),
SIGINTundSIGTERMplattformübergreifend übersignal-hook; verifiziert durch einen Unit-Test, der eine gesetzte Marke als Ereignis wiederfindet - 2.4 Mausereignis in das Ereignismodell aufnehmen (Drücken, Loslassen, Bewegung, Taste, Umschaltzustand, Position) und
TerminalHostdiecrossterm-Mausereignisse durchreichen lassen, statt sie zu verwerfen; verifiziert durch Unit-Tests der Abbildung je Ereignisart - 2.5 Umrechnung auf 1-basierte Zellenkoordinaten in der Darstellungsschicht, Ereignisse außerhalb der Fläche verwerfen (D7); verifiziert durch Unit-Tests an den Rändern — Zelle 1,1, letzte Zelle, Position außerhalb, und dieselben Fälle nach einer Größenänderung
- 2.6
CaptureHostkann Mausereignisse einspeisen und die Reihenfolge gegenüber Tastenereignissen bleibt erhalten; verifiziert durch einen Unit-Test mit gemischter Folge
3. Trap-Zustände in der Laufzeit
- 3.1 Trap-Tabelle in
RtState: je Quelle ZustandON/OFF/STOP, höchstens ein anstehendes Ereignis, Zielkennung; verifiziert durch Unit-Tests für die drei Zustandsübergänge inklusive „STOP merkt genau eines" - 3.2 Hauptschalter
EVENTals Überlagerung der Einzelzustände; verifiziert durch einen Unit-Test, der nachEVENT ONden vorherigen Einzelzustand wiederfindet - 3.3 Fälligkeit der Zeit-Traps aus der Host-Zeit berechnen; verifiziert durch einen Unit-Test mit virtueller Uhr über mehrere Fristen inklusive übersprungener Frist
- 3.4
SetUEventals Auslöser des benutzerdefinierten Ereignisses; verifiziert durch einen Unit-Test, der genau eine Zustellung sieht - 3.5 Getrappte Tasten am Zustellpunkt aus der Tastenschlange nehmen (D5); verifiziert durch Unit-Tests für beide Richtungen — getrappte Taste erscheint nicht bei
INKEY$, nicht getrappte bleibt erhalten - 3.7 Umschaltzustand im Tastenereignis mitführen und
KEY n, CHR$(flag)+CHR$(scan)für n = 15–25 als Erklärung einer Trap-Taste (statt Makrozuweisung); verifiziert durch Unit-Tests für Strg+A mit und ohne Strg sowie durch die Scancode-Tabelle aus der Original-Hilfe - 3.6 Mausereignisse ohne Verbraucher am Zustellpunkt verwerfen und die Warteschlange begrenzen (D7); verifiziert durch einen Unit-Test, der viele Bewegungsereignisse einspeist und die Warteschlangenlänge prüft
4. Zustellung in der VM
- 4.1 Zustellbit im Flagwort und Fälligkeitsprüfung an
Instr::Stmt; verifiziert durch einen VM-Test, der ohne aktiven Trap keine Zustellung auslöst - 4.2 Trap-Frame auf den Modulrumpf legen und mit
RETURNabräumen (D2), inklusive eigenemGOSUB-Stapel undRETURN label; verifiziert durch VM-Tests für Zustellung aus dem Modulrumpf und aus einerSUBheraus, jeweils mit unverändertem Zustand danach - 4.3 Eigene Quelle während des Handlers stoppen und mit
RETURNfreigeben; verifiziert durch einen VM-Test, der den Handler nicht erneut betritt - 4.7 Anweisungsgrenze in den Rücksprung jeder Schleife legen — ohne sie ist
FOR i = 1 TO n: NEXTfür Ereignisse, Breakpoints und Abbruch taub (Befund bei 4.2); verifiziert durch einen Test, der für alle vier Schleifenformen eine Grenze im Kreis nachweist, und dadurch, dass die Trap-Tests mit leerem Schleifenrumpf laufen - 4.4 Reihenfolge bei mehreren fälligen Ereignissen nach Beleg aus 1.1 festlegen; verifiziert durch einen VM-Test mit zwei gleichzeitig fälligen Quellen
- 4.5
DOEVENTSundSLEEPvon Builtins auf Anweisungen mit Zustellung umstellen; verifiziert durch VM-Tests — Handler läuft innerhalb einerDOEVENTS-Schleife, undSLEEPendet vorzeitig durch eine Zustellung - 4.8 Befund bei 4.6:
ERLmeldete die Zeile des Fehlerhandlers statt der Fehlerzeile, sobald der Handler selbst nummeriert war — laufende Zeilennummer undERLgetrennt; verifiziert durch einen Regressionstest mit nummeriertem Handler - 4.6 Fehler in einem Handler an die geltende Fehlerbehandlung geben,
RESUMEbezieht sich auf den Handler; verifiziert durch einen VM-Test, dessenERLdie Zeile im Handler nennt
5. Frontend
- 5.1 Grammatik für
ON TIMER(n)/KEY(n)/UEVENT/SIGNAL(n) GOSUB zielals eigene Konstrukte; verifiziert durch einen Parser-Test, der zeigt, dass daraus kein berechnetesON ausdruck GOSUBentsteht - 5.2 Signaturen und Wertebereichsprüfung der Steueranweisungen und von
SetUEvent; verifiziert durch Sema-Tests, deren Diagnosen das Element namentlich nennen (ON KEY(99),ON PEN,CALL SetUEvent) - 5.3 Trap-Ziele wie
GOSUB-Ziele auflösen; verifiziert durch einen Sema-Test, der ein fehlendes Label namentlich meldet - 5.4 Absenkung ins HIR/Bytecode,
Unsupported-Absenkung vonSETUEVENTentfernen; verifiziert durchcargo test -p tb-frontend, inklusive des Inventartests
6. Korpus und Harness
- 6.1 Kopfzeilen-Direktive
' tb-clock: <n>ms/Zustellpunktim Harness auswerten und ohne Direktive den Lauf mit zeitgesteuerten Traps abweisen (D6); verifiziert durch einen Harness-Test für beide Fälle - 6.2 Korpusprogramme mit Sollausgabe anlegen: Zeit-Trap, Tasten-Trap mit Eingabestrom-Nachweis,
SetUEvent, die drei Maskierungszustände,EVENT-Hauptschalter, Rückkehr in eine unterbrochene Schleife; verifiziert durchcargo test -p tb-cli, byte-genau gegen die.out - 6.3 Denselben Korpuslauf zweimal ausführen und auf identische Ausgabe prüfen; verifiziert durch einen Test, der die Reproduzierbarkeit sicherstellt
7. Dokumentation und Inventar
- 7.1
docs/sprachreferenz.md§8 ausformulieren: Zustellpunkte, Maskierung, Wiedereintritt, Wertebereiche; verifiziert durch den Abschnitt, der jede Spec-Zusicherung wiederfindet - 7.2
docs/bibliothek.mdum die zehn Elemente erweitern; verifiziert durch je einen Eintrag mit Syntax und Wirkung - 7.3
docs/inventar.md: die zehn Einträge aufimplementiertmit Fundstelle setzen; verifiziert durchinventar_stimmt_mit_code_ueberein - 7.4 PLAN.md: Eingangsaufgabe und Punkt „Klassische Ereignis-Traps" der Phase 4 abhaken, Befunde festhalten; verifiziert durch die aktualisierte Phase-4-Liste
8. Abnahme
- 8.1
benches/vm.rsvor und nach der Änderung messen und das Ergebnis in der Änderungsnotiz festhalten; verifiziert durch die Messwerte zur Zusicherung „ohne aktiven Trap kein messbarer Aufwand" - 8.2
cargo testüber alle Crates grün undopenspec validate phase-4-ereignisschleife --strictohne Befund; verifiziert durch beide Kommandos