wingo pushed a commit to branch wip-whippet
in repository guile.

commit 9ab8f3d807966db2e7c74b2da0d07c12bd5ce893
Author: Andy Wingo <wi...@pobox.com>
AuthorDate: Fri May 9 14:57:37 2025 +0200

    tree-il-src is a vector, replaces tree-il-srcv
    
    * module/language/tree-il.scm (tree-il-src): Always a vector now;
    tree-il-srcv is gone.  An incompatible change but we are in the
    compiler.
    (location): For parse-tree-il, make vector locations instead of alists.
    * module/language/tree-il/analyze.scm:
    * module/language/tree-il/compile-bytecode.scm:
    * module/language/tree-il/compile-cps.scm:
    * module/language/tree-il/debug.scm:
    * module/language/tree-il/letrectify.scm:
    * module/language/tree-il/peval.scm:
    * module/system/vm/assembler.scm: Update all uses to expect vectors
    instead of alists and to use tree-il-src instead of tree-il-srcv.
    * module/language/elisp/compile-tree-il.scm (location): Create vectors,
    not alists.
    * test-suite/tests/compiler.test ("psyntax"): Update syntax-source
    expectation.
---
 module/language/elisp/compile-tree-il.scm    |  6 +++--
 module/language/tree-il.scm                  | 23 +++++--------------
 module/language/tree-il/analyze.scm          |  8 +++----
 module/language/tree-il/compile-bytecode.scm |  4 ++--
 module/language/tree-il/compile-cps.scm      | 10 ++++-----
 module/language/tree-il/debug.scm            |  2 +-
 module/language/tree-il/letrectify.scm       |  4 ++--
 module/language/tree-il/peval.scm            |  4 ++--
 module/system/vm/assembler.scm               | 33 ++++++++++------------------
 test-suite/tests/compiler.test               |  2 +-
 10 files changed, 39 insertions(+), 57 deletions(-)

diff --git a/module/language/elisp/compile-tree-il.scm 
b/module/language/elisp/compile-tree-il.scm
index adbeb2005..431d42bdc 100644
--- a/module/language/elisp/compile-tree-il.scm
+++ b/module/language/elisp/compile-tree-il.scm
@@ -1,6 +1,6 @@
 ;;; Guile Emacs Lisp
 
-;; Copyright (C) 2009-2011, 2013, 2018 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2011, 2013, 2018, 2025 Free Software Foundation, Inc.
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -69,7 +69,9 @@
   (and (pair? x)
        (let ((props (source-properties x)))
          (and (not (null? props))
-              props))))
+              (vector (assq-ref props 'filename)
+                      (assq-ref props 'line)
+                      (assq-ref props 'column))))))
 
 ;;; Values to use for Elisp's nil and t.
 
diff --git a/module/language/tree-il.scm b/module/language/tree-il.scm
index 9ff7158b8..78c08c200 100644
--- a/module/language/tree-il.scm
+++ b/module/language/tree-il.scm
@@ -1,4 +1,4 @@
-;;;;   Copyright (C) 2009-2014,2017-2020,2022-2023 Free Software Foundation, 
Inc.
+;;;;   Copyright (C) 2009-2014,2017-2020,2022-2023,2025 Free Software 
Foundation, Inc.
 ;;;;
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -21,8 +21,7 @@
   #:use-module (srfi srfi-11)
   #:use-module (ice-9 match)
   #:use-module (system base syntax)
-  #:export ((tree-il-src/ensure-alist . tree-il-src)
-            (tree-il-src . tree-il-srcv)
+  #:export (tree-il-src
             <void> void? make-void void-src
             <const> const? make-const const-src const-exp
             <primitive-ref> primitive-ref? make-primitive-ref 
primitive-ref-src primitive-ref-name
@@ -136,19 +135,6 @@
   (<prompt> escape-only? tag body handler)
   (<abort> tag args tail))
 
-(define tree-il-src/ensure-alist
-  (make-procedure-with-setter
-   (lambda (tree)
-     "Return the source location of TREE as a source property alist."
-     ;; psyntax gives us "source vectors"; convert them lazily to reduce
-     ;; allocations.
-    (match (tree-il-src tree)
-      (#(file line column)
-       `((filename . ,file) (line . ,line) (column . ,column)))
-      (src
-       src)))
-   (lambda (tree src)
-     (set! (tree-il-src tree) src))))
 
 
 
@@ -166,7 +152,10 @@
 (define (location x)
   (and (pair? x)
        (let ((props (source-properties x)))
-        (and (pair? props) props))))
+        (and (pair? props)
+              (vector (assq-ref props 'filename)
+                      (assq-ref props 'line)
+                      (assq-ref props 'column))))))
 
 (define (parse-tree-il exp)
   (let ((loc (location exp))
diff --git a/module/language/tree-il/analyze.scm 
b/module/language/tree-il/analyze.scm
index 418a7ccb0..c081c8844 100644
--- a/module/language/tree-il/analyze.scm
+++ b/module/language/tree-il/analyze.scm
@@ -71,7 +71,7 @@ given `tree-il' element."
                    (cdr results))))))
 
   ;; Extending and shrinking the location stack.
-  (define (extend-locs x locs) (cons (tree-il-srcv x) locs))
+  (define (extend-locs x locs) (cons (tree-il-src x) locs))
   (define (shrink-locs x locs) (cdr locs))
 
   (let ((results
@@ -114,7 +114,7 @@ given `tree-il' element."
      ;; accordingly.
      (let ((refs (binding-info-refs info))
            (vars (binding-info-vars info))
-           (src  (tree-il-srcv x)))
+           (src  (tree-il-src x)))
        (define (extend inner-vars inner-names)
          (fold (lambda (var name vars)
                  (vhash-consq var (list name src) vars))
@@ -525,7 +525,7 @@ given `tree-il' element."
         (match (vhash-assq name defs)
           ((_ . previous-definition)
            (warning 'shadowed-toplevel src name
-                    (tree-il-srcv previous-definition))
+                    (tree-il-src previous-definition))
            defs)
           (#f
            (vhash-consq name x defs))))
@@ -926,7 +926,7 @@ given `tree-il' element."
                     (values #f #f))))))))
 
   (let ((args (call-args call))
-        (src  (tree-il-srcv call)))
+        (src  (tree-il-src call)))
     (call-with-values (lambda () (arities proc))
       (lambda (name arities)
         (define matches?
diff --git a/module/language/tree-il/compile-bytecode.scm 
b/module/language/tree-il/compile-bytecode.scm
index a581b7f6c..947715ca6 100644
--- a/module/language/tree-il/compile-bytecode.scm
+++ b/module/language/tree-il/compile-bytecode.scm
@@ -1,6 +1,6 @@
 ;;; Lightweight compiler directly from Tree-IL to bytecode
 
-;; Copyright (C) 2020-2021,2023 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2021,2023,2025 Free Software Foundation, Inc.
 
 ;;; This library is free software; you can redistribute it and/or modify it
 ;;; under the terms of the GNU Lesser General Public License as published by
@@ -604,7 +604,7 @@
     (()
      (let ()
        (define x-thunk
-         (let ((src (tree-il-srcv exp)))
+         (let ((src (tree-il-src exp)))
            (make-lambda src '()
                         (make-lambda-case src '() #f #f #f '() '() exp #f))))
        (values (cons (make-closure 'init x-thunk #f '())
diff --git a/module/language/tree-il/compile-cps.scm 
b/module/language/tree-il/compile-cps.scm
index ea5be8aa8..6dcb16963 100644
--- a/module/language/tree-il/compile-cps.scm
+++ b/module/language/tree-il/compile-cps.scm
@@ -1,6 +1,6 @@
 ;;; Continuation-passing style (CPS) intermediate language (IL)
 
-;; Copyright (C) 2013-2015,2017-2021,2023 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015,2017-2021,2023,2025 Free Software Foundation, Inc.
 
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -1309,7 +1309,7 @@ use as the proc slot."
 (define (init-default-value cps name sym subst init body)
   (match (hashq-ref subst sym)
     ((orig-var subst-var box?)
-     (let ((src (tree-il-srcv init)))
+     (let ((src (tree-il-src init)))
        (define (maybe-box cps k make-body)
          (if box?
              (with-cps cps
@@ -1964,10 +1964,10 @@ use as the proc slot."
                    (lambda (cps thunk)
                      (with-cps cps
                        (letk kbody ($kargs () ()
-                                     ($continue krest (tree-il-srcv body)
+                                     ($continue krest (tree-il-src body)
                                        ($primcall 'call-thunk/no-inline #f
                                                   (thunk)))))
-                       (build-term ($prompt kbody khargs (tree-il-srcv body)
+                       (build-term ($prompt kbody khargs (tree-il-src body)
                                      #f tag)))))))
            (with-cps cps
              (letv prim vals apply)
@@ -2223,7 +2223,7 @@ integer."
       (letk kclause ($kclause ('() '() #f '() #f) kbody #f))
       ($ ((lambda (cps)
             (let ((init (build-cont
-                          ($kfun (tree-il-srcv exp) '() init ktail kclause))))
+                          ($kfun (tree-il-src exp) '() init ktail kclause))))
               (with-cps (persistent-intmap (intmap-replace! cps kinit init))
                 kinit))))))))
 
diff --git a/module/language/tree-il/debug.scm 
b/module/language/tree-il/debug.scm
index 2dec39bd0..cf55196fb 100644
--- a/module/language/tree-il/debug.scm
+++ b/module/language/tree-il/debug.scm
@@ -244,7 +244,7 @@
        (visit tail env))
       (_
        (error "unexpected tree-il" exp)))
-    (match (tree-il-srcv exp)
+    (match (tree-il-src exp)
       (#f #t)
       (#((or #f (? string?)) (? exact-integer?) (? exact-integer?)) #t)
       (src (error "bad src" src)))
diff --git a/module/language/tree-il/letrectify.scm 
b/module/language/tree-il/letrectify.scm
index 0f9c6aa3c..3b79d24fa 100644
--- a/module/language/tree-il/letrectify.scm
+++ b/module/language/tree-il/letrectify.scm
@@ -1,6 +1,6 @@
 ;;; transformation of top-level bindings into letrec*
 
-;; Copyright (C) 2019-2021,2023 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2021,2023,2025 Free Software Foundation, Inc.
 
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -190,7 +190,7 @@
                     (cons name names) (cons var vars) (cons val vals)
                     tail))
       (_
-       (make-letrec (tree-il-srcv tail) #t
+       (make-letrec (tree-il-src tail) #t
                     (list name) (list var) (list val)
                     tail))))
 
diff --git a/module/language/tree-il/peval.scm 
b/module/language/tree-il/peval.scm
index 27a0acbcb..5940c00f0 100644
--- a/module/language/tree-il/peval.scm
+++ b/module/language/tree-il/peval.scm
@@ -1,6 +1,6 @@
 ;;; Tree-IL partial evaluator
 
-;; Copyright (C) 2011-2014,2017,2019-2024 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2014,2017,2019-2025 Free Software Foundation, Inc.
 
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -110,7 +110,7 @@
   "Discard all but the first value of X."
   (if (singly-valued-expression? x)
       x
-      (make-primcall (tree-il-srcv x) 'values (list x))))
+      (make-primcall (tree-il-src x) 'values (list x))))
 
 ;; Peval will do a one-pass analysis on the source program to determine
 ;; the set of assigned lexicals, and to identify unreferenced and
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 8b228d2e3..bacf7996e 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -582,7 +582,7 @@ N-byte unit."
 
   ;; A list of (pos . source) pairs, indicating source information.  POS
   ;; is relative to the beginning of the text section, and SOURCE is in
-  ;; the same format that source-properties returns.
+  ;; the same format that syntax-sourcev returns.
   ;;
   (sources asm-sources set-asm-sources!)
 
@@ -2900,26 +2900,17 @@ procedure with label @var{rw-init}.  @var{rw-init} may 
be false.  If
 
       (let lp ((sources (asm-sources asm)) (out '()))
         (match sources
-          (((pc . location) . sources)
-           (let-values (((file line col)
-                         ;; Usually CPS records contain a "source
-                         ;; vector" coming from tree-il, but some might
-                         ;; contain a source property alist.
-                         (match location
-                           (#(file line col) (values file line col))
-                           (lst (values (assq-ref lst 'filename)
-                                        (assq-ref lst 'line)
-                                        (assq-ref lst 'column))))))
-             (lp sources
-                 ;; Guile line and column numbers are 0-indexed, but
-                 ;; they are 1-indexed for DWARF.
-                 (if (and line col)
-                     (cons (list pc
-                                 (if (string? file) (intern-file file) 0)
-                                 (1+ line)
-                                 (1+ col))
-                           out)
-                     out))))
+          (((pc . #(file line col)) . sources)
+           (lp sources
+               ;; Guile line and column numbers are 0-indexed, but
+               ;; they are 1-indexed for DWARF.
+               (if (and line col)
+                   (cons (list pc
+                               (if (string? file) (intern-file file) 0)
+                               (1+ line)
+                               (1+ col))
+                         out)
+                   out)))
           (()
            ;; Compilation unit header for .debug_line.  We write in
            ;; DWARF 2 format because more tools understand it than DWARF
diff --git a/test-suite/tests/compiler.test b/test-suite/tests/compiler.test
index 788433b99..cf0ea52de 100644
--- a/test-suite/tests/compiler.test
+++ b/test-suite/tests/compiler.test
@@ -75,7 +75,7 @@
       (eq? round (module-ref m 'round))))
 
   (pass-if-equal "syntax-source with read-hash-extend"
-      '((filename . "sample.scm") (line . 2) (column . 5))
+      #("sample.scm" 2 5)
     (with-fluids ((%read-hash-procedures
                    (fluid-ref %read-hash-procedures)))
       (read-hash-extend #\~ (lambda (chr port)

Reply via email to