2.3 KiB
ADDED Requirements
Requirement: Ereigniszustellung an Anweisungsgrenzen
Die VM SHALL an Anweisungsgrenzen prüfen, ob ein Ereignis zuzustellen
ist, und in diesem Fall das GOSUB-Ziel des zugehörigen Traps
ausführen. Der unterbrochene Zustand — Aufrufkette, Schleifen, Locals,
GOSUB-Stapel und Fehlerzustand — MUST dabei erhalten bleiben; mit
RETURN SHALL die Ausführung an der unterbrochenen Stelle fortfahren.
Die Prüfung MUST NOT pro Opcode erfolgen; solange kein Trap definiert ist,
MUST sie auf einen einzelnen Test hinauslaufen und MUST NOT die Uhr lesen.
Scenario: Trap aus einer Prozedur heraus
- WHEN ein Ereignis zugestellt wird, während eine
SUBläuft, und das Trap-Ziel im Modulrumpf liegt - THEN läuft der Handler und nach
RETURNsetzt dieSUBan der unterbrochenen Anweisung fort
Scenario: Ohne aktiven Trap wird die Uhr nicht gelesen
- WHEN ein Programm ohne jede
ON …-Trap-Definition ausgeführt wird - THEN fragt die Ausführung an keiner Anweisungsgrenze die Zeit ab, und der Durchsatz bleibt im Rahmen der Messgenauigkeit unverändert
Requirement: Jede Schleife trägt eine Anweisungsgrenze im Kreis
Der zurückspringende Zweig jeder Schleife (FOR/NEXT, WHILE/WEND,
DO/LOOP in allen Bedingungsformen) MUST über mindestens eine
Anweisungsgrenze führen, auch wenn der Schleifenrumpf leer ist. Andernfalls
gäbe es in einer Warteschleife keinen Zustellpunkt: kein Ereignis, kein
Breakpoint und kein Abbruch würden dort wirken.
Scenario: Leere Warteschleife
- WHEN
FOR i% = 1 TO 10000unmittelbar vonNEXTgefolgt wird - THEN führt der Rücksprung über eine Anweisungsgrenze und ein aktiver Zeit-Trap wird darin zugestellt
Scenario: Leere Schleife in jeder Form
- WHEN eine
WHILE/WEND-,DO WHILE/LOOP- oderDO/LOOP UNTIL-Schleife ohne Rumpf übersetzt wird - THEN liegt zwischen Rücksprungziel und Rücksprung eine Anweisungsgrenze
Requirement: DOEVENTS gibt die Kontrolle ab
DOEVENTS SHALL anstehende Ereignisse zustellen und danach einen Wert
liefern. Solange keine Formulare geladen werden können, SHALL der Wert 0
sein.
Scenario: DOEVENTS in einer Warteschleife
- WHEN ein Programm in einer Schleife
DOEVENTSaufruft und ein Trap fällig wird - THEN läuft der Handler innerhalb dieser Schleife