js-on-sx: Object.assign ToObjects target, throws on null, walks string sources
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 41s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 41s
This commit is contained in:
@@ -4039,20 +4039,45 @@
|
||||
(fn
|
||||
(&rest args)
|
||||
(cond
|
||||
((= (len args) 0) (dict))
|
||||
((= (len args) 0)
|
||||
(raise (js-new-call TypeError (js-args "Object.assign called on null or undefined"))))
|
||||
(else
|
||||
(let
|
||||
((target (nth args 0)))
|
||||
(for-each
|
||||
(fn
|
||||
(src)
|
||||
(when
|
||||
(dict? src)
|
||||
((raw-target (nth args 0)))
|
||||
(cond
|
||||
((or (= raw-target nil) (js-undefined? raw-target))
|
||||
(raise (js-new-call TypeError (js-args "Object.assign called on null or undefined"))))
|
||||
(else
|
||||
(let
|
||||
((target (js-coerce-this-arg raw-target)))
|
||||
(for-each
|
||||
(fn (k) (dict-set! target k (get src k)))
|
||||
(keys src))))
|
||||
(rest args))
|
||||
target)))))
|
||||
(fn
|
||||
(src)
|
||||
(cond
|
||||
((or (= src nil) (js-undefined? src)) nil)
|
||||
((dict? src)
|
||||
(for-each
|
||||
(fn
|
||||
(k)
|
||||
(if (js-key-internal? k) nil (dict-set! target k (get src k))))
|
||||
(js-object-keys src)))
|
||||
((= (type-of src) "string")
|
||||
(let
|
||||
((n (len src)))
|
||||
(begin (js-object-assign-string-loop target src 0 n))))))
|
||||
(rest args))
|
||||
target))))))))
|
||||
|
||||
(define
|
||||
js-object-assign-string-loop
|
||||
(fn
|
||||
(target s i n)
|
||||
(cond
|
||||
((>= i n) nil)
|
||||
(else
|
||||
(begin
|
||||
(dict-set! target (js-to-string i) (char-at s i))
|
||||
(js-object-assign-string-loop target s (+ i 1) n))))))
|
||||
|
||||
(define js-object-freeze (fn (o) o))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user