display function args
This commit is contained in:
parent
d5800f2d31
commit
8fbcf9a83f
30
stack.scm
30
stack.scm
|
@ -3,15 +3,26 @@
|
|||
(use-modules (system vm frame)
|
||||
(system vm trace))
|
||||
|
||||
(define (to-string o)
|
||||
(match o
|
||||
((? string?) o)
|
||||
((? symbol?) (symbol->string o))
|
||||
((? number?) (number->string o))
|
||||
((? list?) (string-join (map to-string o) " "))
|
||||
((? pair?) (string-join (list (to-string (car o)) (to-string (cdr o))) " "))
|
||||
(_ "???")))
|
||||
|
||||
(define (location frame)
|
||||
(let ((source (frame-source frame)))
|
||||
(if source
|
||||
(string-append (cadr source) ":"
|
||||
(number->string (caddr source)) ":")
|
||||
(let* ((args (frame-arguments frame))
|
||||
(args (if (null? args) "" (string-append " args: " (to-string args)))))
|
||||
(string-append (cadr source) ":"
|
||||
(number->string (caddr source)) ":" args))
|
||||
source)))
|
||||
|
||||
(define (stack-trace)
|
||||
(let ((skip-stack-capture-crap 4)
|
||||
(let ((skip-stack-capture-crap 0)
|
||||
(stack (make-stack #t)))
|
||||
(filter identity (let loop ((frame (stack-ref stack skip-stack-capture-crap)))
|
||||
(if (not (frame? frame)) '()
|
||||
|
@ -30,7 +41,7 @@
|
|||
(map stdout (car args)))))
|
||||
|
||||
(define (foo)
|
||||
(bar)
|
||||
(bar '(a b))
|
||||
(format (current-output-port) "foo\n"))
|
||||
|
||||
(define (stdout . o)
|
||||
|
@ -38,13 +49,10 @@
|
|||
(newline)
|
||||
o)
|
||||
|
||||
(define (bar)
|
||||
(define (blurp o)
|
||||
(match o
|
||||
('a 'a)
|
||||
('c 'c)
|
||||
((? pair?) (map blurp o))))
|
||||
(blurp '(a b))
|
||||
(define (bar arg)
|
||||
(match arg
|
||||
('a 'a)
|
||||
((? pair?) (map bar arg)))
|
||||
(format (current-output-port) "bar\n"))
|
||||
|
||||
(main)
|
||||
|
|
Loading…
Reference in New Issue