VF-Linienzug: Abbruch-Wickel-Handler der 3 Modi zentralisieren
Der scharfe *error*-Abbruch-Handler (wickelt Teil-Geometrie bei ESC/(exit) zu einem VF_n-Block mit vollem Journal) stand in Modus 1/2/3 dreimal WORTGLEICH, nur der Marker-String unterschied sich. Jetzt eine gemeinsame Funktion vfl-abbruch-handler-installieren (marker), die *error* als Lambda-Liste mit eingebautem Marker-Literal setzt (list-Konstruktion, kein globaler Zwischen- zustand). Der fragile Wickel-Rumpf existiert damit nur noch EINMAL - kuenftige Fixes an einer Stelle statt drei. Die je-Modus unterschiedliche old-error-Quelle bleibt an der Aufrufstelle (M1: *error*, M2/M3: dbg-old-error via fruehem dbg-Hook) - nur der wortgleiche Handler-Rumpf wird geteilt. Alle vom Handler zur Abbruchzeit dynamisch aufgeloesten Locals (old-error/lastEnt/vfl-nummer/... /dbg-an) sind unveraendert im Modus-Frame gebunden (VERTRAG in der Funktion dokumentiert). Tests (tests/test_unit.lsp, tu-tests-vfl-abbruch): der Konstruktor erzeugt eine gueltige (lambda (msg) ...)-Struktur und baut GENAU den uebergebenen Marker als letztes Argument des vfl-modus-abbruch-sichern-Aufrufs ein (linienzug2 vs linienzug3 geprueft). 240/240 LISP-Unit-Tests gruen in BricsCAD; keine neuen Python-Failures (11 = HEAD-Baseline). Modus-1-ESC-Abbruch interaktiv bestaetigt (Teilkette bleibt als editierbarer VF_n-Block stehen). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
40d79f4993
commit
008f497b5d
+47
-1
@@ -905,6 +905,52 @@
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: vf_linienzug.lsp - gemeinsamer Abbruch-Handler-Konstruktor
|
||||
;; ------------------------------------------------------------
|
||||
;; vfl-abbruch-handler-installieren baut *error* als Lambda-Liste, in die der
|
||||
;; Marker ("linienzug"/"linienzug2"/"linienzug3") als String-Literal eingebaut
|
||||
;; ist. Der wortgleiche Wickel-Handler steht damit nur noch EINMAL statt 3x.
|
||||
;; Getestet wird die KONSTRUKTION (Marker an der richtigen Stelle, Struktur
|
||||
;; aufrufbar) - NICHT ein echter Abbruch (der braeuchte Zeichnung/Geometrie).
|
||||
;; *error* wird gesichert und wiederhergestellt, damit der Testlauf unberuehrt
|
||||
;; bleibt.
|
||||
(defun tu-tests-vfl-abbruch ( / _save _h _call)
|
||||
(princ "\n[vf_linienzug/Abbruch-Handler]")
|
||||
(if (null (atoms-family 1 '("VFL-ABBRUCH-HANDLER-INSTALLIEREN")))
|
||||
(tu-record nil "vfl-abbruch/modul"
|
||||
"vf_linienzug.lsp nicht geladen (VFL-ABBRUCH-HANDLER-INSTALLIEREN fehlt)")
|
||||
(progn
|
||||
(setq _save *error*)
|
||||
(setq _h (vfl-abbruch-handler-installieren "linienzug2"))
|
||||
;; Rueckgabe = das gesetzte *error* (identisch)
|
||||
(tu-true "vfl-abbruch/setzt-error" (equal _h *error*))
|
||||
;; Struktur: (lambda (msg) ...) - erstes Element lambda, zweites (msg)
|
||||
(tu-eq "vfl-abbruch/ist-lambda" 'lambda (car _h))
|
||||
(tu-eq "vfl-abbruch/arg-msg" '(msg) (cadr _h))
|
||||
;; Der vfl-modus-abbruch-sichern-Aufruf im Rumpf traegt GENAU den
|
||||
;; uebergebenen Marker als letztes Argument (nicht einen anderen Modus).
|
||||
(setq _call (car (vl-member-if
|
||||
(function (lambda (f)
|
||||
(and (listp f) (eq (car f) 'vfl-modus-abbruch-sichern))))
|
||||
(cddr _h))))
|
||||
(tu-true "vfl-abbruch/ruft-sichern" (not (null _call)))
|
||||
(tu-eq "vfl-abbruch/marker-linienzug2" "linienzug2" (last _call))
|
||||
;; Anderer Marker -> anderes Literal an derselben Position
|
||||
(vfl-abbruch-handler-installieren "linienzug3")
|
||||
(setq _call (car (vl-member-if
|
||||
(function (lambda (f)
|
||||
(and (listp f) (eq (car f) 'vfl-modus-abbruch-sichern))))
|
||||
(cddr *error*))))
|
||||
(tu-eq "vfl-abbruch/marker-linienzug3" "linienzug3" (last _call))
|
||||
;; *error* wiederherstellen - Testlauf darf nicht mit einem Wickel-Handler
|
||||
;; ohne gebundene Modus-Locals zurueckbleiben.
|
||||
(setq *error* _save)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; BEFEHL: TEST_UNIT
|
||||
;; ------------------------------------------------------------
|
||||
@@ -927,7 +973,7 @@
|
||||
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
|
||||
"tu-tests-export" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel"
|
||||
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs")
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch")
|
||||
(tu-run-block fn))
|
||||
|
||||
(princ "\n\n----------------------------------------------------------------")
|
||||
|
||||
Reference in New Issue
Block a user