guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 06/09: assembler: Separate effectful part of 'link-docst


From: Ludovic Courtès
Subject: [Guile-commits] 06/09: assembler: Separate effectful part of 'link-docstrs'.
Date: Sat, 7 Jan 2023 16:54:53 -0500 (EST)

civodul pushed a commit to branch wip-linker-assembler-memory-consumption
in repository guile.

commit 8194e8a6e91664f0ba150a3d4e276eb02f3b5497
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Jan 6 17:06:47 2023 +0100

    assembler: Separate effectful part of 'link-docstrs'.
    
    * module/system/vm/assembler.scm (link-docstrs): Define
    'write-docstrings!' and use it.
---
 module/system/vm/assembler.scm | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 872cc31c6..e82eb953a 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -2684,16 +2684,19 @@ procedure with label @var{rw-init}.  @var{rw-init} may 
be false.  If
          (docstrings (find-docstrings))
          (strtab (make-string-table))
          (bv (make-bytevector (* (length docstrings) docstr-size) 0)))
-    (fold (lambda (pair pos)
-            (match pair
-              ((pc . string)
-               (bytevector-u32-set! bv pos pc endianness)
-               (bytevector-u32-set! bv (+ pos 4)
-                                    (string-table-intern! strtab string)
-                                    endianness)
-               (+ pos docstr-size))))
-          0
-          docstrings)
+    (define (write-docstrings! bv offset)
+      (fold (lambda (pair pos)
+              (match pair
+                ((pc . string)
+                 (bytevector-u32-set! bv pos pc endianness)
+                 (bytevector-u32-set! bv (+ pos 4)
+                                      (string-table-intern! strtab string)
+                                      endianness)
+                 (+ pos docstr-size))))
+            offset
+            docstrings))
+
+    (write-docstrings! bv 0)
     (let ((strtab (make-object asm '.guile.docstrs.strtab
                                (link-string-table! strtab)
                                '() '()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]