From 2c09b2c86de433a0f57e9317ce6f67174424ae45 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 2 Mar 2019 11:01:09 -0700 Subject: [PATCH] cs: unbreak `ffi/unsafe` immobile cells --- racket/src/cs/rumble/foreign.ss | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/racket/src/cs/rumble/foreign.ss b/racket/src/cs/rumble/foreign.ss index 735383914e..edf3eaca07 100644 --- a/racket/src/cs/rumble/foreign.ss +++ b/racket/src/cs/rumble/foreign.ss @@ -128,9 +128,10 @@ ;; ---------------------------------------- -;; Hack: hardwired number that depends on the tagging regime, -;; but happens currently to be the same for all platforms: +;; 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)) @@ -138,9 +139,12 @@ (define (address->object n) ; call with GC disabled (#%$address->object n 0)) -(define (bytevector->addr bv) ; call with GC disabled +(define (bytevector->addr bv) ; call with GC disabled or locked object (#%$object-address bv bytevector-content-offset)) +(define (vector->addr bv) ; call with GC disabled or locked object + (#%$object-address bv vector-content-offset)) + ;; Convert a raw foreign address to a Scheme value on the ;; assumption that the address is the payload of a byte ;; string: @@ -185,6 +189,7 @@ (cond [(integer? memory) memory] [(bytes? memory) (bytevector->addr memory)] + [(vector? memory) (vector->addr memory)] ; used for immobile cells [else (object->addr memory)])) ;; ----------------------------------------