js-on-sx: postfix + prefix ++/--
Parser: jp-parse-postfix emits (js-postfix op target) on trailing ++/--; jp-parse-primary emits (js-prefix op target) before the unary -/+/!/~ branch. Transpile: js-transpile-prefix → (set! name (+ (js-to-number name) ±1)) for idents, (js-set-prop obj key ...) for members/indices. js-transpile-postfix caches old value in a let binding, updates, returns the saved value. 340/342 unit (+11), 148/148 slice unchanged.
This commit is contained in:
@@ -333,6 +333,10 @@
|
||||
(do (jp-advance! st) (jp-parse-new-expr st)))
|
||||
((and (= (get t :type) "keyword") (= (get t :value) "this"))
|
||||
(do (jp-advance! st) (list (quote js-ident) "this")))
|
||||
((and (= (get t :type) "op") (or (= (get t :value) "++") (= (get t :value) "--")))
|
||||
(do
|
||||
(jp-advance! st)
|
||||
(list (quote js-prefix) (get t :value) (jp-parse-unary st))))
|
||||
((and (= (get t :type) "op") (or (= (get t :value) "-") (= (get t :value) "+") (= (get t :value) "!") (= (get t :value) "~")))
|
||||
(do
|
||||
(jp-advance! st)
|
||||
@@ -582,6 +586,11 @@
|
||||
(jp-call-args-loop st args)
|
||||
(jp-expect! st "punct" ")")
|
||||
(jp-parse-postfix st (list (quote js-call) left args)))))
|
||||
((or (jp-at? st "op" "++") (jp-at? st "op" "--"))
|
||||
(let
|
||||
((op (get (jp-peek st) :value)))
|
||||
(jp-advance! st)
|
||||
(list (quote js-postfix) op left)))
|
||||
(else left))))
|
||||
|
||||
(define
|
||||
|
||||
Reference in New Issue
Block a user