Tweak fasdumper to null-terminate bytevectors too.
authorTaylor R Campbell <campbell@mumble.net>
Tue, 11 Dec 2018 15:32:34 +0000 (15:32 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 11 Dec 2018 15:32:34 +0000 (15:32 +0000)
find_primitive relies on symbol names (which were formerly `strings',
i.e. `vector-8b' or TC_CHARACTER_STRING, and are now `bytevectors')
to be null-terminated.

Rather than try to figure out which ones are primitive names and
which ones are not, we'll just null-terminate all of them.

We can undo this if we change find_primitive.  (We need to change the
compile-time tool findprim.c anyway because its strcmp_ci misuses
islower/toupper.)

src/compiler/base/fasdump.scm

index 3b6411a4b9cafc1713a8bbe28d72ad0da79780cf..e4228902d64b2636b6373aa4a175f272d0964d4b 100644 (file)
@@ -443,7 +443,10 @@ USA.
 \f
 (define (fasdump-bytevector-n-words format bytevector)
   (let ((n-bytes (bytevector-length bytevector)))
-    (quotient (+ n-bytes (- (format.bytes-per-word format) 1))
+    ;; Add a terminating null byte.  Bytevectors don't actually require
+    ;; this in general -- but the bytevectors that are symbol names do.
+    ;; This is pretty kludgey.
+    (quotient (+ 1 n-bytes (- (format.bytes-per-word format) 1))
               (format.bytes-per-word format))))
 
 (define (fasdump-bytevector state bytevector)