HS: js-block return values + worker stub test
Parser: parse-js-block extracts raw JS source by character positions. Compiler: js-block AST → hs-js-exec call, stores result in it. Runtime: hs-js-exec creates JS Function, handles promise rejection. Test runner: host-new-function/host-promise-state natives + promise monkey-patch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2506,6 +2506,33 @@
|
||||
(let
|
||||
((target (cond ((at-end?) (list (quote beingTold))) ((and (= (tp-type) "keyword") (or (= (tp-val) "then") (= (tp-val) "end"))) (list (quote beingTold))) (true (parse-expr)))))
|
||||
(list (quote close-element) target))))
|
||||
(define
|
||||
parse-js-block
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((params (if (= (tp-type) "paren-open") (do (adv!) (define collect-params! (fn (acc) (cond ((or (at-end?) (= (tp-type) "paren-close")) (do (when (= (tp-type) "paren-close") (adv!)) acc)) ((= (tp-type) "comma") (do (adv!) (collect-params! acc))) (true (let ((pname (tp-val))) (do (adv!) (collect-params! (append acc pname)))))))) (collect-params! (list))) (list))))
|
||||
(let
|
||||
((js-start (cur-start)))
|
||||
(define
|
||||
skip-to-end!
|
||||
(fn
|
||||
()
|
||||
(if
|
||||
(or
|
||||
(at-end?)
|
||||
(and (= (tp-type) "keyword") (= (tp-val) "end")))
|
||||
nil
|
||||
(do (adv!) (skip-to-end!)))))
|
||||
(skip-to-end!)
|
||||
(let
|
||||
((js-end (cur-start)))
|
||||
(let
|
||||
((js-src (substring src js-start js-end)))
|
||||
(when
|
||||
(and (= (tp-type) "keyword") (= (tp-val) "end"))
|
||||
(adv!))
|
||||
(list (quote js-block) params js-src)))))))
|
||||
(define
|
||||
parse-cmd
|
||||
(fn
|
||||
@@ -2655,6 +2682,8 @@
|
||||
(do (adv!) (list (quote continue))))
|
||||
((and (= typ "keyword") (or (= val "exit") (= val "halt")))
|
||||
(do (adv!) (list (quote exit))))
|
||||
((and (= typ "keyword") (= val "js"))
|
||||
(do (adv!) (parse-js-block)))
|
||||
(true (parse-expr))))))
|
||||
(define
|
||||
parse-cmd-list
|
||||
@@ -2710,7 +2739,8 @@
|
||||
(= v "close")
|
||||
(= v "pick")
|
||||
(= v "ask")
|
||||
(= v "answer"))))
|
||||
(= v "answer")
|
||||
(= v "js"))))
|
||||
(define
|
||||
cl-collect
|
||||
(fn
|
||||
|
||||
Reference in New Issue
Block a user