diff --git a/shared/static/scripts/sx-browser.js b/shared/static/scripts/sx-browser.js index c5b6aee..4e2e83d 100644 --- a/shared/static/scripts/sx-browser.js +++ b/shared/static/scripts/sx-browser.js @@ -14,7 +14,7 @@ // ========================================================================= var NIL = Object.freeze({ _nil: true, toString: function() { return "nil"; } }); - var SX_VERSION = "2026-03-18T13:07:01Z"; + var SX_VERSION = "2026-03-18T19:18:46Z"; function isNil(x) { return x === NIL || x === null || x === undefined; } function isSxTruthy(x) { return x !== false && !isNil(x); } diff --git a/shared/sx/ocaml_bridge.py b/shared/sx/ocaml_bridge.py index f372f02..d3efbf2 100644 --- a/shared/sx/ocaml_bridge.py +++ b/shared/sx/ocaml_bridge.py @@ -62,6 +62,7 @@ class OcamlBridge: stdin=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, + limit=10 * 1024 * 1024, # 10MB readline buffer for large spec data ) # Wait for (ready) diff --git a/sx/sx/nav-data.sx b/sx/sx/nav-data.sx index 5cdcc7b..f3e0af0 100644 --- a/sx/sx/nav-data.sx +++ b/sx/sx/nav-data.sx @@ -300,8 +300,8 @@ (dict :slug "parser" :filename "parser.sx" :title "Parser" :desc "Tokenization and parsing of SX source text into AST." :prose "The parser converts SX source text into an abstract syntax tree. It tokenizes the input into atoms, strings, numbers, keywords, and delimiters, then assembles them into nested list structures. The parser is intentionally minimal — s-expressions need very little syntax to parse. Special reader macros handle quasiquote (\\`), unquote (~), splice (~@), and the quote (') shorthand. The output is a tree of plain lists, symbols, keywords, strings, and numbers that the evaluator can walk directly.") - (dict :slug "evaluator" :filename "eval.sx" :title "Evaluator" - :desc "Tree-walking evaluation of SX expressions." + (dict :slug "evaluator" :filename "evaluator.sx" :title "Evaluator" + :desc "CEK machine evaluator." :prose "The evaluator walks the AST produced by the parser and reduces it to values. It implements lexical scoping with closures, special forms (define, let, if, cond, fn, defcomp, defmacro, quasiquote, set!, do), and function application. Macros are expanded at eval time. Component definitions (defcomp) create callable component objects that participate in the rendering pipeline. The evaluator delegates rendering expressions — HTML tags, components, fragments — to whichever adapter is active, making the same source renderable to DOM nodes, HTML strings, or SX wire format.") (dict :slug "primitives" :filename "primitives.sx" :title "Primitives" :desc "All built-in pure functions and their signatures."