Call the primitives directly.
authorTaylor R Campbell <campbell@mumble.net>
Wed, 12 Dec 2018 22:07:09 +0000 (22:07 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 12 Dec 2018 22:25:34 +0000 (22:25 +0000)
These are no longer integrated, so we can't make a compound procedure
call if they are interpreted -- the interpreter will stomp all over
Free while we're in the middle of allocating the string, leading to
mayhem.  But it is safe to call the primitive, even though it is no
longer open-coded.

src/edwin/utils.scm

index d4993ff09445e5c9d6845a426781c55be469c627..c2a164cae8e69793259273a61ea26f658df3066d 100644 (file)
@@ -106,9 +106,9 @@ USA.
           ((ucode-primitive primitive-object-set-type 2)
            (ucode-type manifest-nm-vector)
            (fix:- n-words 1)))         ;Subtract one for the manifest.
-         (set-string-length! result (fix:+ n-chars 1))
-         (string-set! result n-chars #\nul)
-         (set-string-length! result n-chars)
+         ((ucode-primitive set-string-length! 2) result (fix:+ n-chars 1))
+         ((ucode-primitive string-set! 3) result n-chars #\nul)
+         ((ucode-primitive set-string-length! 2) result n-chars)
          ((ucode-primitive primitive-increment-free 1) n-words)
          (set-interrupt-enables! mask)
          result)))))