Multi-shot delimited continuations: 868/870 passing
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 9m5s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 9m5s
Continuations are now multi-shot — k can be invoked multiple times. Each invocation runs the captured frames via nested cek-run and returns the result to the caller's continuation. Fix: continue-with-call runs ONLY the captured delimited frames (not rest-kont), so the continuation terminates and returns rather than escaping to the outer program. Fixed 4 continuation tests: - shift with multiple invokes: (list (k 10) (k 20)) → (11 21) - k returned from reset: continuation callable after escaping - invoke k multiple times: same k reusable - k in data structure: store in list, retrieve, invoke Remaining 2 failures: scope/provide across shift boundaries. These need scope state tracked in frames (not imperative push/pop). JS 747/747, Full 868/870, Python 679/679. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
// =========================================================================
|
||||
|
||||
var NIL = Object.freeze({ _nil: true, toString: function() { return "nil"; } });
|
||||
var SX_VERSION = "2026-03-15T14:09:57Z";
|
||||
var SX_VERSION = "2026-03-15T14:20:13Z";
|
||||
|
||||
function isNil(x) { return x === NIL || x === null || x === undefined; }
|
||||
function isSxTruthy(x) { return x !== false && !isNil(x); }
|
||||
@@ -1835,8 +1835,10 @@ PRIMITIVES["step-continue"] = stepContinue;
|
||||
var contData = continuationData(f);
|
||||
return (function() {
|
||||
var captured = get(contData, "captured");
|
||||
var restK = get(contData, "rest-kont");
|
||||
return makeCekValue(arg, env, concat(captured, restK));
|
||||
return (function() {
|
||||
var result = cekRun(makeCekValue(arg, env, captured));
|
||||
return makeCekValue(result, env, kont);
|
||||
})();
|
||||
})();
|
||||
})() : (isSxTruthy((isSxTruthy(isCallable(f)) && isSxTruthy(!isSxTruthy(isLambda(f))) && isSxTruthy(!isSxTruthy(isComponent(f))) && !isSxTruthy(isIsland(f)))) ? makeCekValue(apply(f, args), env, kont) : (isSxTruthy(isLambda(f)) ? (function() {
|
||||
var params = lambdaParams(f);
|
||||
|
||||
Reference in New Issue
Block a user