js-on-sx: NativeError prototype chain + [object Error/Date/Map/Set] brands
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 49s

This commit is contained in:
2026-05-08 23:08:01 +00:00
parent a1030dce5d
commit 20997d3360
2 changed files with 46 additions and 1 deletions

View File

@@ -1265,6 +1265,10 @@
((contains? (keys v) "__js_string_value__") "[object String]")
((contains? (keys v) "__js_number_value__") "[object Number]")
((contains? (keys v) "__js_boolean_value__") "[object Boolean]")
((contains? (keys v) "__js_error_data__") "[object Error]")
((contains? (keys v) "__js_is_date__") "[object Date]")
((contains? (keys v) "__map_keys__") "[object Map]")
((contains? (keys v) "__set_items__") "[object Set]")
((= v (get Number "prototype")) "[object Number]")
((= v (get String "prototype")) "[object String]")
((= v (get Boolean "prototype")) "[object Boolean]")
@@ -3790,6 +3794,8 @@
(define js-object-freeze (fn (o) o))
(define __js_ctor_proto__ (dict))
(define
js-object-get-prototype-of
(fn
@@ -3799,7 +3805,16 @@
((js-undefined? o)
(error "TypeError: Cannot convert undefined to object"))
((dict? o)
(if (contains? (keys o) "__proto__") (get o "__proto__") nil))
(cond
((contains? (keys o) "__proto__") (get o "__proto__"))
(else nil)))
((js-function? o)
(let
((id (js-ctor-id o)))
(cond
((dict-has? __js_ctor_proto__ id)
(get __js_ctor_proto__ id))
(else nil))))
(else nil))))
(define
@@ -5659,6 +5674,34 @@
(dict-set! Map "__proto__" (get js-function-global "prototype"))
(dict-set! Set "__proto__" (get js-function-global "prototype"))
(dict-set! Date "__proto__" (get js-function-global "prototype"))
(dict-set! __js_ctor_proto__ (js-ctor-id TypeError) Error)
(dict-set! __js_ctor_proto__ (js-ctor-id RangeError) Error)
(dict-set! __js_ctor_proto__ (js-ctor-id SyntaxError) Error)
(dict-set! __js_ctor_proto__ (js-ctor-id ReferenceError) Error)
(dict-set! __js_ctor_proto__ (js-ctor-id URIError) Error)
(dict-set! __js_ctor_proto__ (js-ctor-id EvalError) Error)
(dict-set! (js-get-ctor-proto TypeError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto RangeError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto SyntaxError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto ReferenceError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto URIError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto EvalError) "__proto__" (js-get-ctor-proto Error))
(dict-set! (js-get-ctor-proto Error) "__proto__" (get Object "prototype"))
(dict-set! (js-get-ctor-proto Error) "name" "Error")
(dict-set! (js-get-ctor-proto Error) "message" "")
(dict-set! (js-get-ctor-proto Error) "constructor" Error)
(dict-set! (js-get-ctor-proto TypeError) "name" "TypeError")
(dict-set! (js-get-ctor-proto TypeError) "constructor" TypeError)
(dict-set! (js-get-ctor-proto RangeError) "name" "RangeError")
(dict-set! (js-get-ctor-proto RangeError) "constructor" RangeError)
(dict-set! (js-get-ctor-proto SyntaxError) "name" "SyntaxError")
(dict-set! (js-get-ctor-proto SyntaxError) "constructor" SyntaxError)
(dict-set! (js-get-ctor-proto ReferenceError) "name" "ReferenceError")
(dict-set! (js-get-ctor-proto ReferenceError) "constructor" ReferenceError)
(dict-set! (js-get-ctor-proto URIError) "name" "URIError")
(dict-set! (js-get-ctor-proto URIError) "constructor" URIError)
(dict-set! (js-get-ctor-proto EvalError) "name" "EvalError")
(dict-set! (js-get-ctor-proto EvalError) "constructor" EvalError)
(dict-set! (get Array "prototype") "__proto__" (get Object "prototype"))
(dict-set! (get Number "prototype") "__proto__" (get Object "prototype"))
(dict-set! (get String "prototype") "__proto__" (get Object "prototype"))