From 8f202e03c23ac927a8725354b5cfe1fc93048b69 Mon Sep 17 00:00:00 2001 From: giles Date: Fri, 24 Apr 2026 14:18:18 +0000 Subject: [PATCH] js-on-sx: .constructor backlink on Number/String/Array/Object protos (+1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Number.prototype.constructor === Number etc. Four dict-set! lines add the backlink after each constructor dict is defined. new String().constructor === String now returns true. Array literals don't yet link to Array.prototype so [].constructor === Array is still false — that would need a boxing refactor. Unit 521/522, slice 148/148 unchanged. Number 76/100 → 77/100 (+1). String variance-heavy under CPU load. --- lib/js/runtime.sx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/js/runtime.sx b/lib/js/runtime.sx index e7fd4ebc..e1021cc2 100644 --- a/lib/js/runtime.sx +++ b/lib/js/runtime.sx @@ -2522,6 +2522,8 @@ (dict-set! Number "name" "Number") +(dict-set! (get Number "prototype") "constructor" Number) + (define isFinite js-global-is-finite) (define isNaN js-global-is-nan) @@ -2884,6 +2886,8 @@ (dict-set! Object "name" "Object") +(dict-set! (get Object "prototype") "constructor" Object) + (define js-delete-prop (fn @@ -2974,6 +2978,8 @@ (dict-set! Array "length" 1) +(dict-set! (get Array "prototype") "constructor" Array) + (dict-set! Array "name" "Array") (define @@ -3006,6 +3012,8 @@ (dict-set! String "length" 1) +(dict-set! (get String "prototype") "constructor" String) + (dict-set! String "name" "String") (define Boolean {:__callable__ (fn (&rest args) (if (= (len args) 0) false (js-to-boolean (nth args 0))))})