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? make-void void-src const? make-const const-src const-exp primitive-ref? make-primitive-ref primitive-ref-src primitive-ref-name @@ -136,19 +135,6 @@ ( escape-only? tag body handler) ( 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)