Fix 2 pre-existing scope test failures: CEK-to-scope_stacks fallback
When aser manages scope via scope_stacks but a sub-expression falls through to the CEK machine, context/emit!/emitted couldn't find the scope frames (they're in scope_stacks, not on the kont). Now the CEK special forms fall back to env-bound primitives when kont lookup fails. 2568/2568 tests pass (was 2566/2568). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1701,7 +1701,11 @@
|
||||
nil))
|
||||
(frame (kont-find-provide kont name)))
|
||||
(make-cek-value
|
||||
(if (nil? frame) default-val (get frame "value"))
|
||||
(if frame
|
||||
(get frame "value")
|
||||
(if (env-has? env "context")
|
||||
(apply (env-get env "context") (list name default-val))
|
||||
default-val))
|
||||
env
|
||||
kont))))
|
||||
|
||||
@@ -1713,13 +1717,14 @@
|
||||
((name (trampoline (eval-expr (first args) env)))
|
||||
(val (trampoline (eval-expr (nth args 1) env)))
|
||||
(frame (kont-find-scope-acc kont name)))
|
||||
(when
|
||||
frame
|
||||
(dict-set!
|
||||
frame
|
||||
"emitted"
|
||||
(append (get frame "emitted") (list val))))
|
||||
(make-cek-value nil env kont))))
|
||||
(if frame
|
||||
(do
|
||||
(dict-set! frame "emitted" (append (get frame "emitted") (list val)))
|
||||
(make-cek-value nil env kont))
|
||||
(do
|
||||
(when (env-has? env "scope-emit!")
|
||||
(apply (env-get env "scope-emit!") (list name val)))
|
||||
(make-cek-value nil env kont))))))
|
||||
|
||||
(define
|
||||
step-sf-emitted
|
||||
@@ -1729,7 +1734,11 @@
|
||||
((name (trampoline (eval-expr (first args) env)))
|
||||
(frame (kont-find-scope-acc kont name)))
|
||||
(make-cek-value
|
||||
(if (nil? frame) (list) (get frame "emitted"))
|
||||
(if frame
|
||||
(get frame "emitted")
|
||||
(if (env-has? env "emitted")
|
||||
(apply (env-get env "emitted") (list name))
|
||||
(list)))
|
||||
env
|
||||
kont))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user