diff --git a/racket/src/cs/Makefile b/racket/src/cs/Makefile index fca69204fe..685d3b48a6 100644 --- a/racket/src/cs/Makefile +++ b/racket/src/cs/Makefile @@ -242,6 +242,7 @@ future2-demo: $(BUILDDIR)rumble.$(CSO) RUMBLE_SRCS = rumble/define.ss \ rumble/virtual-register.ss \ + rumble/layout.ss \ rumble/check.ss \ rumble/syntax-rule.ss \ rumble/letrec.ss \ diff --git a/racket/src/cs/rumble.sls b/racket/src/cs/rumble.sls index f2ea1db9f9..d879dd7e61 100644 --- a/racket/src/cs/rumble.sls +++ b/racket/src/cs/rumble.sls @@ -706,6 +706,7 @@ (include "rumble/define.ss") (include "rumble/virtual-register.ss") + (include "rumble/layout.ss") (include "rumble/begin0.ss") (include "rumble/letrec.ss") (include "rumble/syntax-rule.ss") diff --git a/racket/src/cs/rumble/foreign.ss b/racket/src/cs/rumble/foreign.ss index edf3eaca07..d651ac3218 100644 --- a/racket/src/cs/rumble/foreign.ss +++ b/racket/src/cs/rumble/foreign.ss @@ -128,11 +128,6 @@ ;; ---------------------------------------- -;; HACK: hardwired numbers that depend on the tagging regime -;; and other representation details -(define bytevector-content-offset 9) -(define vector-content-offset (if (> (fixnum-width) 32) 9 5)) - (define (object->addr v) ; call with GC disabled (#%$object-address v 0)) diff --git a/racket/src/cs/rumble/layout.ss b/racket/src/cs/rumble/layout.ss new file mode 100644 index 0000000000..d22537c4a0 --- /dev/null +++ b/racket/src/cs/rumble/layout.ss @@ -0,0 +1,5 @@ +;; HACK: hardwired numbers that depend on the tagging regime +;; and other representation details +(define bytevector-content-offset 9) +(define vector-content-offset (if (> (fixnum-width) 32) 9 5)) +(define record-content-offset vector-content-offset) diff --git a/racket/src/cs/rumble/struct.ss b/racket/src/cs/rumble/struct.ss index bf3ea57df0..862e634bea 100644 --- a/racket/src/cs/rumble/struct.ss +++ b/racket/src/cs/rumble/struct.ss @@ -974,9 +974,9 @@ (putprop (record-type-uid rtd) 'guards new-guards)))))) (define (unsafe-struct*-ref s i) - (#3%vector-ref s i)) + (#%$object-ref 'scheme-object s (fx+ record-content-offset (fx* i (foreign-sizeof 'void*))))) (define (unsafe-struct*-set! s i v) - (#3%vector-set! s i v)) + (#%$object-set! 'scheme-object s (fx+ record-content-offset (fx* i (foreign-sizeof 'void*))) v)) (define (unsafe-struct? v r) (#3%record? v r))