c0665ba58e
Adopt Step 7 language features across SX codebase
...
112 conversions across 19 .sx files using match, let-match, and pipe operators:
match (17): type/value dispatch replacing cond/if chains
- lib/vm.sx: HO form dispatch (for-each/map/filter/reduce/some/every?)
- lib/tree-tools.sx: node-display, node-matches?, rename, count, replace, free-symbols
- lib/types.sx: narrow-type, substitute-in-type, infer-type, resolve-type
- web/engine.sx: default-trigger, resolve-target, classify-trigger
- web/deps.sx: scan-refs-walk, scan-io-refs-walk
let-match (89): dict destructuring replacing (get d "key") patterns
- shared/page-functions.sx (20), blog/admin.sx (17), pub-api.sx (13)
- events/ layouts/page/tickets/entries/forms (27 total)
- specs-explorer.sx (7), federation/social.sx (3), lib/ small files (3)
-> pipes (6): replacing triple-chained gets in lib/vm.sx
- frame-closure → closure-code → code-bytecode chains
Also: lib/vm.sx accessor upgrades (get vm "sp" → vm-sp vm throughout)
2650/2650 tests pass, zero regressions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 20:49:02 +00:00
2d7dd7d582
Step 5 piece 6: migrate 23 .sx files to define-library/import
...
Wraps all core .sx files in R7RS define-library with explicit export
lists, plus (import ...) at end for backward-compatible global re-export.
Libraries registered:
(sx bytecode) — 83 opcode constants
(sx render) — 15 tag registries + render helpers
(sx signals) — 23 reactive signal primitives
(sx r7rs) — 21 R7RS aliases
(sx compiler) — 42 compiler functions
(sx vm) — 32 VM functions
(sx freeze) — 9 freeze/thaw functions
(sx content) — 6 content store functions
(sx callcc) — 1 call/cc wrapper
(sx highlight) — 13 syntax highlighting functions
(sx stdlib) — 47 stdlib functions
(sx swap) — 13 swap algebra functions
(sx render-trace) — 8 render trace functions
(sx harness) — 21 test harness functions
(sx canonical) — 12 canonical serialization functions
(web adapter-html) — 13 HTML renderer functions
(web adapter-sx) — 13 SX wire format functions
(web engine) — 33 hypermedia engine functions
(web request-handler) — 4 request handling functions
(web page-helpers) — 12 page helper functions
(web router) — 36 routing functions
(web deps) — 19 dependency analysis functions
(web orchestration) — 59 page orchestration functions
Key changes:
- define-library now inherits parent env (env-extend env instead of
env-extend make-env) so library bodies can access platform primitives
- sx_server.ml: added resolve_library_path + load_library_file for
import resolution (maps library specs to file paths)
- cek_run_with_io: handles "import" locally instead of sending to
Python bridge
2608/2608 tests passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 21:48:54 +00:00
f3f70cc00b
Move stdlib out of spec — clean spec/library boundary
...
spec/ now contains only the language definition (5 files):
evaluator.sx, parser.sx, primitives.sx, render.sx, special-forms.sx
lib/ contains code written IN the language (8 files):
stdlib.sx, types.sx, freeze.sx, content.sx,
bytecode.sx, compiler.sx, vm.sx, callcc.sx
Test files follow source: spec/tests/ for core language tests,
lib/tests/ for library tests (continuations, freeze, types, vm).
Updated all consumers:
- JS/Python/OCaml bootstrappers: added lib/ to source search paths
- OCaml bridge: spec_dir for parser/render, lib_dir for compiler/freeze
- JS test runner: scans spec/tests/ (always) + lib/tests/ (--full)
- OCaml test runner: scans spec/tests/, lib tests via explicit request
- Docker dev mounts: added ./lib:/app/lib:ro
Tests: 1041 JS standard, 1322 JS full, 1101 OCaml — all pass
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 23:18:30 +00:00