emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/beardbolt a9e5fbfd7a 028/323: Implement line number par


From: ELPA Syncer
Subject: [elpa] externals/beardbolt a9e5fbfd7a 028/323: Implement line number parsing for disassembled files
Date: Thu, 9 Mar 2023 10:57:56 -0500 (EST)

branch: externals/beardbolt
commit a9e5fbfd7a77d8acc83ceae610a1fa1be0607923
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>

    Implement line number parsing for disassembled files
---
 rmsbolt.el | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/rmsbolt.el b/rmsbolt.el
index effa8170d7..24a7d1f93c 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -310,6 +310,10 @@ int main() {
       matches)))
 
 ;;;;; Filter Functions
+
+;; Filtering functions were more or less lifted from the godbolt compiler 
exporter to maintain compatiblity.
+;; https://github.com/mattgodbolt/compiler-explorer/blob/master/lib/asm.js
+
 (defun rmsbolt--has-opcode-p (line)
   "Check if LINE has opcodes."
   (save-match-data
@@ -385,16 +389,22 @@ int main() {
         (not (string-match-p regexp func))
       t)))
 
+;; TODO godbolt does not handle dissasembly with filter=off, but we should.
 (cl-defun rmsbolt--process-dissasembled-lines (src-buffer asm-lines)
   "Process and filter dissasembled ASM-LINES from SRC-BUFFER."
   (let* ((result nil)
-         (func nil))
+         (func nil)
+         (source-linum nil))
     (dolist (line asm-lines)
       (cl-tagbody
        (when (> (length result) rmsbolt-binary-asm-limit)
          (cl-return-from rmsbolt--process-dissasembled-lines
            '("Aborting processing due to exceeding the binary limit.")))
-       ;; TODO process line numbers
+       (when (string-match rmsbolt-dissas-line line)
+         (setq source-linum (string-to-number (match-string 2 line)))
+         ;; We are just setting a linum, no data here.
+         (go continue))
+
        (when (string-match rmsbolt-dissas-label line)
          (setq func (match-string 2 line))
          (when (rmsbolt--user-func-p src-buffer func)
@@ -404,7 +414,12 @@ int main() {
                     (rmsbolt--user-func-p src-buffer func))
          (go continue))
        (when (string-match rmsbolt-dissas-opcode line)
-         (push (concat "\t" (match-string 3 line)) result)
+         (let ((line (concat "\t" (match-string 3 line))))
+           ;; Add line text property if available
+           (when source-linum
+             (add-text-properties 0 (length line)
+                                  `(rmsbolt-src-line ,source-linum) line))
+           (push line result))
          (go continue))
        continue))
     (nreverse result)))
@@ -431,6 +446,7 @@ int main() {
                     (match-string 2 line))))
            (when (string-match rmsbolt-source-stab line)
              (pcase (string-to-number (match-string 1 line))
+               ;; http://www.math.utah.edu/docs/info/stabs_11.html
                (68
                 (setq source-linum (match-string 2 line)))
                ((or 100 132)
@@ -495,12 +511,12 @@ int main() {
                      (linum 0))
                  ;; Add lines to hashtable
                  (dolist (line lines)
-                   (cl-pushnew
-                    linum
-                    (gethash
-                     (get-text-property
-                      0 'rmsbolt-src-line line)
-                     ht))
+                   (when-let ((property
+                               (get-text-property
+                                0 'rmsbolt-src-line line)))
+                     (cl-pushnew
+                      linum
+                      (gethash property ht)))
                    (incf linum))
                  (with-current-buffer src-buffer
                    (setq-local rmsbolt-line-mapping ht))



reply via email to

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