diff --git a/pkgs/racket-test-core/tests/racket/object.rktl b/pkgs/racket-test-core/tests/racket/object.rktl index 31c6102336..c407287500 100644 --- a/pkgs/racket-test-core/tests/racket/object.rktl +++ b/pkgs/racket-test-core/tests/racket/object.rktl @@ -1939,7 +1939,7 @@ (define q 1) (field [s 1]) (super-new))) - + (err/rt-test (new d%) (make-undefined-exn? 'z)) (err/rt-test (new d!%) (make-undefined-exn? 'z)) (err/rt-test (new e%) (make-undefined-exn? 'z)) diff --git a/racket/src/cs/rumble/impersonator.ss b/racket/src/cs/rumble/impersonator.ss index 81158d7fcf..c8631932f5 100644 --- a/racket/src/cs/rumble/impersonator.ss +++ b/racket/src/cs/rumble/impersonator.ss @@ -56,7 +56,8 @@ rtd) (let ([r (loop (impersonator-next v))]) (when (eq? r unsafe-undefined) - (raise-unsafe-undefined 'struct-ref "undefined" "use" acc (impersonator-val v) (cdr key))) + (let ([abs-pos (fx+ (cdr key) (struct-type-parent-total*-count (car key)))]) + (raise-unsafe-undefined 'struct-ref "undefined" "use" acc (impersonator-val v) abs-pos))) r)] [(impersonator? v) (loop (impersonator-next v))] @@ -95,7 +96,7 @@ (when (eq? (unsafe-struct*-ref (impersonator-val v) abs-pos) unsafe-undefined) (unless (eq? (continuation-mark-set-first #f prop:chaperone-unsafe-undefined) unsafe-undefined) - (raise-unsafe-undefined 'struct-set! "assignment disallowed" "assign" set (impersonator-val v) pos))) + (raise-unsafe-undefined 'struct-set! "assignment disallowed" "assign" set (impersonator-val v) abs-pos))) (loop (impersonator-next v) a)] [(impersonator? v) (loop (impersonator-next v) a)]