Files

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 SUB läuft, und das Trap-Ziel im Modulrumpf liegt
  • THEN läuft der Handler und nach RETURN setzt die SUB an 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 10000 unmittelbar von NEXT gefolgt 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- oder DO/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 DOEVENTS aufruft und ein Trap fällig wird
  • THEN läuft der Handler innerhalb dieser Schleife