diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2018-01-30 23:45:41 +0100 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2018-01-30 23:45:41 +0100 | 
| commit | e975e10772f8c0595dfed21f1ac2ad783deeb9f2 (patch) | |
| tree | 80fb033ca2b342f954d93674c6e26434c7e307c7 /geiser | |
| parent | a1078b906f73bfe69754390908083ae8fab48b3f (diff) | |
| download | geiser-guile-e975e10772f8c0595dfed21f1ac2ad783deeb9f2.tar.gz geiser-guile-e975e10772f8c0595dfed21f1ac2ad783deeb9f2.tar.bz2 | |
guile 2.2: program-arities and program-module reloaded
Those two procedures are gone in these 2.2 times, and things like
autodoc and xref were broken as a result.  With Andy's help,
apparently good enough approximations of their functionality are now
in place: let's see how they go.
Diffstat (limited to 'geiser')
| -rw-r--r-- | geiser/doc.scm | 11 | ||||
| -rw-r--r-- | geiser/modules.scm | 29 | 
2 files changed, 35 insertions, 5 deletions
| diff --git a/geiser/doc.scm b/geiser/doc.scm index 185b204..9f28f7f 100644 --- a/geiser/doc.scm +++ b/geiser/doc.scm @@ -1,6 +1,6 @@  ;;; doc.scm -- procedures providing documentation on scheme objects -;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2018 Jose Antonio Ortega Ruiz  ;; This program is free software; you can redistribute it and/or  ;; modify it under the terms of the Modified BSD License. You should @@ -17,6 +17,7 @@    #:use-module (geiser utils)    #:use-module (geiser modules)    #:use-module (system vm program) +  #:use-module (system vm debug)    #:use-module (ice-9 session)    #:use-module (ice-9 documentation)    #:use-module (ice-9 regex) @@ -75,11 +76,13 @@          ((macro? obj) default-macro-args)          (else 'variable))) +(define (program-arities prog) +  (let ((addrs (program-address-range prog))) +    (when (pair? addrs) (find-program-arities (car addrs))))) +  (define (arguments proc)    (define (p-args prog) -    (let ((as (map (lambda (a) -                     ((@@ (system vm program) arity->arguments-alist) prog a)) -                     (or (program-arities prog) '())))) +    (let ((as (map arity-arguments-alist (or (program-arities prog) '()))))        (and (not (null? as)) as)))    (define (clist f) (lambda (x) (let ((y (f x))) (and y (list y)))))    (cond ((is-a? proc <generic>) (generic-args proc)) diff --git a/geiser/modules.scm b/geiser/modules.scm index 780d39e..32b0f1f 100644 --- a/geiser/modules.scm +++ b/geiser/modules.scm @@ -1,6 +1,6 @@  ;;; modules.scm -- module metadata -;; Copyright (C) 2009, 2010, 2011 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011, 2018 Jose Antonio Ortega Ruiz  ;; This program is free software; you can redistribute it and/or  ;; modify it under the terms of the Modified BSD License. You should @@ -11,6 +11,7 @@  (define-module (geiser modules)    #:export (symbol-module +            program-module              module-name?              module-path              find-module @@ -19,10 +20,36 @@              module-location)    #:use-module (geiser utils)    #:use-module (system vm program) +  #:use-module (system vm debug)    #:use-module (ice-9 regex)    #:use-module (ice-9 session)    #:use-module (srfi srfi-1)) +;; Return hash table mapping filename to list of modules defined in that +;; file. H/t andy wingo. +(define (fill-file->module-mapping! ret) +  (define (record-module m) +    (let ((f (module-filename m))) +      (hash-set! ret f (cons m (hash-ref ret f '()))))) +  (define (visit-module m) +    (record-module m) +    (hash-for-each (lambda (k v) (visit-module v)) +                   (module-submodules m))) +  (visit-module (resolve-module '() #f)) +  ret) + +(define file->modules (fill-file->module-mapping! (make-hash-table))) + +(define (program-file p) +  (let ((src (program-source p 0))) +    (and (pair? src) (cadr src)))) + +(define (program-module p) +  (let* ((f (program-file p)) +         (mods (or (hash-ref file->modules f) +                   (hash-ref (fill-file->module-mapping! file->modules) f)))) +    (and (pair? mods) (not (null? mods)) (car mods)))) +  (define (module-name? module-name)    (and (list? module-name)         (not (null? module-name)) | 
