OCaml bootstrapper Phase 2: HTML renderer, SX server, Python bridge
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -318,6 +318,7 @@
|
||||
(when (and (list? node) (not (empty? node)))
|
||||
(let ((head (first node)))
|
||||
(cond
|
||||
;; set! targets
|
||||
(and (= (type-of head) "symbol")
|
||||
(= (symbol-name head) "set!")
|
||||
(>= (len node) 2))
|
||||
@@ -327,6 +328,15 @@
|
||||
(let ((mangled (ml-mangle var-name)))
|
||||
(when (not (some (fn (x) (= x mangled)) result))
|
||||
(append! result mangled))))
|
||||
;; append! targets — need ref wrapping just like set!
|
||||
(and (= (type-of head) "symbol")
|
||||
(= (symbol-name head) "append!")
|
||||
(>= (len node) 2)
|
||||
(= (type-of (nth node 1)) "symbol"))
|
||||
(let ((var-name (symbol-name (nth node 1))))
|
||||
(let ((mangled (ml-mangle var-name)))
|
||||
(when (not (some (fn (x) (= x mangled)) result))
|
||||
(append! result mangled))))
|
||||
:else
|
||||
(for-each (fn (child)
|
||||
(when (list? child)
|
||||
@@ -543,8 +553,16 @@
|
||||
|
||||
;; Mutation forms
|
||||
(= op "append!")
|
||||
(str "(sx_append_b " (ml-expr-inner (nth args 0) set-vars)
|
||||
" " (ml-expr-inner (nth args 1) set-vars) ")")
|
||||
(let ((target (nth args 0))
|
||||
(item-expr (ml-expr-inner (nth args 1) set-vars)))
|
||||
(if (and (= (type-of target) "symbol")
|
||||
(some (fn (v) (= v (ml-mangle (symbol-name target)))) set-vars))
|
||||
;; Target is a ref variable — emit ref mutation
|
||||
(let ((mangled (ml-mangle (symbol-name target))))
|
||||
(str "(" mangled " := sx_append_b !" mangled " " item-expr "; Nil)"))
|
||||
;; Not a ref — fallback (returns new list)
|
||||
(str "(sx_append_b " (ml-expr-inner target set-vars)
|
||||
" " item-expr ")")))
|
||||
|
||||
(= op "dict-set!")
|
||||
(str "(sx_dict_set_b " (ml-expr-inner (nth args 0) set-vars)
|
||||
|
||||
Reference in New Issue
Block a user