diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-03-18 23:59:12 +0100 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-03-18 23:59:12 +0100 | 
| commit | 33b8c5311efda6d0b1aaaad0465f59415f5540c4 (patch) | |
| tree | d8e208b8de851d461025c0af8e7fceebf7dce73e | |
| parent | e912bbf664f7199a702a01993be6a6aa70c3c6da (diff) | |
| download | geiser-guile-33b8c5311efda6d0b1aaaad0465f59415f5540c4.tar.gz geiser-guile-33b8c5311efda6d0b1aaaad0465f59415f5540c4.tar.bz2 | |
Callers/callees (C-c <, C-c >).
| -rw-r--r-- | geiser/emacs.scm | 4 | ||||
| -rw-r--r-- | geiser/xref.scm | 34 | 
2 files changed, 29 insertions, 9 deletions
| diff --git a/geiser/emacs.scm b/geiser/emacs.scm index 0c99216..13bd8db 100644 --- a/geiser/emacs.scm +++ b/geiser/emacs.scm @@ -37,7 +37,9 @@                 ge:symbol-documentation                 ge:all-modules                 ge:module-children -               ge:module-location) +               ge:module-location +               ge:callers +               ge:callees)    #:use-module (geiser evaluation)    #:use-module ((geiser modules) :renamer (symbol-prefix-proc 'ge:))    #:use-module ((geiser completion) :renamer (symbol-prefix-proc 'ge:)) diff --git a/geiser/xref.scm b/geiser/xref.scm index cb39c5d..ec86d7c 100644 --- a/geiser/xref.scm +++ b/geiser/xref.scm @@ -26,11 +26,14 @@  (define-module (geiser xref)    #:export (symbol-location -            generic-methods) +            generic-methods +            callers +            callees)    #:use-module (geiser utils)    #:use-module (geiser modules)    #:use-module (geiser doc)    #:use-module (oop goops) +  #:use-module (system xref)    #:use-module (system vm program))  (define (symbol-location sym) @@ -41,14 +44,15 @@    (let* ((gen (symbol->object sym))           (methods (if (is-a? gen <generic>) (generic-function-methods gen) '())))      (filter (lambda (x) (not (null? x))) -            (map (lambda (m) (describe-method sym m)) methods)))) +            (map (lambda (m) +                   (make-xref (method-procedure m) sym (symbol-module sym))) +                 methods)))) -(define (describe-method name m) -  (let ((proc (method-procedure m))) -    (if proc -        `((location . ,(or (program-location proc) (symbol-location name))) -          (signature . ,(object-signature name proc))) -        '()))) +(define (make-xref proc name module) +  (and proc +       `((location . ,(or (program-location proc) (symbol-location name))) +         (signature . ,(object-signature name proc)) +         (module . ,module))))  (define (program-location p)    (cond ((not (program? p)) #f) @@ -63,4 +67,18 @@           (name (and mod (module-name mod))))      (and name (module-filename name)))) +(define (procedure-xref proc) +  (let ((name (procedure-name proc))) +    (make-xref proc name (symbol-module name)))) + +(define (callers sym) +  (let ((mod (symbol-module sym))) +    (and mod +         (map procedure-xref (procedure-callers (cons mod sym)))))) + +(define (callees sym) +  (let ((obj (symbol->object sym))) +    (and obj +         (map procedure-xref (procedure-callees obj))))) +  ;;; xref.scm ends here | 
