guix-commits
[Top][All Lists]
Advanced

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

03/05: utils: Micro-optimize 'source-properties->location'.


From: Ludovic Courtès
Subject: 03/05: utils: Micro-optimize 'source-properties->location'.
Date: Mon, 2 Jul 2018 09:28:42 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 223fa5b327b0892cf45d22e4a9fbfb06164e409d
Author: Ludovic Courtès <address@hidden>
Date:   Mon Jul 2 14:49:14 2018 +0200

    utils: Micro-optimize 'source-properties->location'.
    
    * guix/utils.scm (source-properties->location): Destructure LOC with
    'match', adding a fast path without 'assq-ref' calls.
---
 guix/utils.scm | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/guix/utils.scm b/guix/utils.scm
index 9fbb95d..f934b6e 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -782,12 +782,19 @@ be determined."
   "Return a location object based on the info in LOC, an alist as returned
 by Guile's `source-properties', `frame-source', `current-source-location',
 etc."
-  (let ((file (assq-ref loc 'filename))
-        (line (assq-ref loc 'line))
-        (col  (assq-ref loc 'column)))
-    ;; In accordance with the GCS, start line and column numbers at 1.  Note
-    ;; that unlike LINE and `port-column', COL is actually 1-indexed here...
-    (location file (and line (+ line 1)) col)))
+  ;; In accordance with the GCS, start line and column numbers at 1.  Note
+  ;; that unlike LINE and `port-column', COL is actually 1-indexed here...
+  (match loc
+    ((('line . line) ('column . col) ('filename . file)) ;common case
+     (and file line col
+          (make-location file (+ line 1) col)))
+    (#f
+     #f)
+    (_
+     (let ((file (assq-ref loc 'filename))
+           (line (assq-ref loc 'line))
+           (col  (assq-ref loc 'column)))
+       (location file (and line (+ line 1)) col)))))
 
 (define (location->source-properties loc)
   "Return the source property association list based on the info in LOC,



reply via email to

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