Add render-active? gate to JS platform, fix parity test for &rest

- JS platform: add renderActiveP/setRenderActiveB + RENAMES for
  render-active?/set-render-active! so eval-list gate works in browser
- Rebuild sx-browser.js from updated spec
- Fix test_rest_params: &rest not supported in bare lambda (spec-correct)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 03:50:13 +00:00
parent f54ebf26f8
commit 8586f54dcb
3 changed files with 32 additions and 9 deletions

View File

@@ -189,6 +189,8 @@ class JSEmitter:
"eval-call": "evalCall",
"is-render-expr?": "isRenderExpr",
"render-expr": "renderExpr",
"render-active?": "renderActiveP",
"set-render-active!": "setRenderActiveB",
"call-lambda": "callLambda",
"call-component": "callComponent",
"parse-keyword-args": "parseKeywordArgs",
@@ -2497,10 +2499,17 @@ PLATFORM_JS_PRE = '''
// Render dispatch — call the active adapter's render function.
// Set by each adapter when loaded; defaults to identity (no rendering).
var _renderExprFn = null;
// Render mode flag — set by render-to-html/aser, checked by eval-list.
// When false, render expressions fall through to evalCall.
var _renderMode = false;
function renderActiveP() { return _renderMode; }
function setRenderActiveB(val) { _renderMode = !!val; }
function renderExpr(expr, env) {
if (_renderExprFn) return _renderExprFn(expr, env);
// No adapter loaded — just return the expression as-is
return expr;
// No adapter loaded — fall through to evalCall
return evalCall(first(expr), rest(expr), env);
}
function stripPrefix(s, prefix) {