diff --git a/lib/hyperscript/parser.sx b/lib/hyperscript/parser.sx index 15e05503..8a125aaa 100644 --- a/lib/hyperscript/parser.sx +++ b/lib/hyperscript/parser.sx @@ -2878,19 +2878,17 @@ (let ((expr (parse-expr))) (if - (if - (and (dict? expr) (get expr :hs-ast)) - (= (get expr :kind) "arith") - (and - (list? expr) - (let - ((h (first expr))) - (or - (= h (quote +)) - (= h (quote -)) - (= h (quote *)) - (= h (quote /)) - (= h (make-symbol "%")))))) + (and + (list? expr) + (not (= (tp-type) "paren-close")) + (let + ((h (first expr))) + (or + (= h (quote +)) + (= h (quote -)) + (= h (quote *)) + (= h (quote /)) + (= h (make-symbol "%"))))) (error "Pseudo-commands must be function calls") expr)))))))) (define @@ -3220,7 +3218,15 @@ (error "worker plugin is not installed — see https://hyperscript.org/features/worker")) ((= val "bind") (do (adv!) (parse-bind-feat))) - (true (parse-cmd-list)))))) + (true + (let + ((saved-p p)) + (let + ((expr (guard (_e (true nil)) (parse-expr)))) + (if + (and expr (at-end?)) + expr + (do (set! p saved-p) (parse-cmd-list)))))))))) (define coll-feats (fn diff --git a/shared/static/wasm/sx/hs-parser.sx b/shared/static/wasm/sx/hs-parser.sx index 15e05503..8a125aaa 100644 --- a/shared/static/wasm/sx/hs-parser.sx +++ b/shared/static/wasm/sx/hs-parser.sx @@ -2878,19 +2878,17 @@ (let ((expr (parse-expr))) (if - (if - (and (dict? expr) (get expr :hs-ast)) - (= (get expr :kind) "arith") - (and - (list? expr) - (let - ((h (first expr))) - (or - (= h (quote +)) - (= h (quote -)) - (= h (quote *)) - (= h (quote /)) - (= h (make-symbol "%")))))) + (and + (list? expr) + (not (= (tp-type) "paren-close")) + (let + ((h (first expr))) + (or + (= h (quote +)) + (= h (quote -)) + (= h (quote *)) + (= h (quote /)) + (= h (make-symbol "%"))))) (error "Pseudo-commands must be function calls") expr)))))))) (define @@ -3220,7 +3218,15 @@ (error "worker plugin is not installed — see https://hyperscript.org/features/worker")) ((= val "bind") (do (adv!) (parse-bind-feat))) - (true (parse-cmd-list)))))) + (true + (let + ((saved-p p)) + (let + ((expr (guard (_e (true nil)) (parse-expr)))) + (if + (and expr (at-end?)) + expr + (do (set! p saved-p) (parse-cmd-list)))))))))) (define coll-feats (fn