[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-guile 4608da2 032/284: Partial support for stack tr
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-guile 4608da2 032/284: Partial support for stack trace display. |
Date: |
Sun, 1 Aug 2021 18:29:10 -0400 (EDT) |
branch: elpa/geiser-guile
commit 4608da2ac8d4bafa7b8acbd7a097e32e5eb2f764
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>
Partial support for stack trace display.
---
geiser/emacs.scm | 40 ++++++++++++++++++++++++++++++++++++----
geiser/introspection.scm | 15 ++++++++-------
2 files changed, 44 insertions(+), 11 deletions(-)
diff --git a/geiser/emacs.scm b/geiser/emacs.scm
index b9e2d67..90e03dd 100644
--- a/geiser/emacs.scm
+++ b/geiser/emacs.scm
@@ -38,6 +38,8 @@
ge:module-location)
#:use-module (srfi srfi-1)
#:use-module (system base compile)
+ #:use-module (system vm program)
+ #:use-module (ice-9 debugger utils)
#:use-module ((geiser introspection) :renamer (symbol-prefix-proc 'ge:)))
(define (make-result result output)
@@ -49,11 +51,41 @@
(define (parse-stack stack)
(if stack
- (list
- (with-output-to-string
- (lambda () (display-backtrace stack (current-output-port)))))
+ (map (lambda (n) (parse-frame (stack-ref stack n)))
+ (iota (stack-length stack)))
'()))
+(define (parse-frame frame)
+ (list (cons 'frame (frame-number frame))
+ (cons 'procedure (or (and (frame-procedure? frame)
+ (procedure-name (frame-procedure frame)))
+ '()))
+ (cons 'source (or (frame->source-position frame) '()))
+ (cons 'description (with-output-to-string
+ (lambda ()
+ (if (frame-procedure? frame)
+ (write-frame-short/application frame)
+ (write-frame-short/expression frame)))))))
+
+(define (frame->source-position frame)
+ (let ((source (if (frame-procedure? frame)
+ (or (frame-source frame)
+ (let ((proc (frame-procedure frame)))
+ (and proc
+ (procedure? proc)
+ (procedure-source proc))))
+ (frame-source frame))))
+ (and source
+ (cond ((string? (source-property source 'filename))
+ (list (source-property source 'filename)
+ (+ 1 (source-property source 'line))
+ (source-property source 'column)))
+ ((and (pair? source) (list? (cadr source)))
+ (list (caadr source)
+ (+ 1 (caddr source))
+ (cdddr source)))
+ (else #f)))))
+
(define (parse-error key . args)
(let* ((len (length args))
(subr (and (> len 0) (first args)))
@@ -119,6 +151,6 @@ SUBR, MSG and REST."
(define (ge:load-file path)
"Load file, given its full @var{path}."
- (evaluate `(compile-and-load ,path) '(geiser emacs) eval))
+ (evaluate `(load ,path) '(geiser emacs) eval))
;;; emacs.scm ends here
diff --git a/geiser/introspection.scm b/geiser/introspection.scm
index 29d059b..ca6afae 100644
--- a/geiser/introspection.scm
+++ b/geiser/introspection.scm
@@ -64,13 +64,14 @@
(else #f)))
(define (symbol-module sym)
- (call/cc
- (lambda (k)
- (apropos-fold (lambda (module name var init)
- (if (eq? name sym) (k (module-name module)) init))
- #f
- (symbol->string sym)
- (apropos-fold-accessible (current-module))))))
+ (and sym
+ (call/cc
+ (lambda (k)
+ (apropos-fold (lambda (module name var init)
+ (if (eq? name sym) (k (module-name module)) init))
+ #f
+ (symbol->string sym)
+ (apropos-fold-accessible (current-module)))))))
(define (program-args program)
(let* ((arity (program-arity program))
- [nongnu] elpa/geiser-guile 6f2ed87 018/284: Recognise empty doc string in Emacs side. Small refactorings., (continued)
- [nongnu] elpa/geiser-guile 6f2ed87 018/284: Recognise empty doc string in Emacs side. Small refactorings., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 63c39be 019/284: Initial support for module name completion., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 06fabb2 020/284: Compile command adapted to new compiled-file-name behaviour., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 3432ccf 021/284: New command: module documentation., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 08ba036 023/284: Separate commands for evaluation and compilation., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile d18c35b 025/284: Fix in symbol help signature displaying., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 3655a74 026/284: (geiser eval) functionality moved to (geiser emacs)., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 8377f5e 028/284: Refactoring of the eval/compile procedures., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 2ac3f91 027/284: Play nice with (ice-9 history) by using WRITE to return values to Emacs., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 49842df 031/284: Correct stack in load/compile file retorts., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 4608da2 032/284: Partial support for stack trace display.,
Philip Kaludercic <=
- [nongnu] elpa/geiser-guile 943e58b 039/284: Miscellaneous little fixes., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 717f3d0 040/284: Fix for autodoc when point in a rest formal arg in define., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile ea9e341 041/284: Bug fix., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile acde425 043/284: Macro-expand commands., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 7fcb4ea 047/284: Autodoc enhancements:, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile eeda11c 050/284: Leave quasiquote alone in autodoc., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile af8296f 051/284: generic-methods implemented in scheme (no emacs side yet)., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile ea52102 055/284: A bit more robust generic methods., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile c3d36f3 056/284: Don't display autodoc for function being defined., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile d5ff699 057/284: Refactoring., Philip Kaludercic, 2021/08/01