diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-10-22 22:33:53 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-10-22 22:33:53 +0200 |
commit | 6bb891dc6137885182f86aa147dba428e1149a63 (patch) | |
tree | d3e2db745ba31d2c1b0cc473360f3d1f27de1e09 | |
parent | 3c365b8efcee9e953b0cad8085ca14f4b0d5d7d5 (diff) | |
download | guile-6bb891dc6137885182f86aa147dba428e1149a63.tar.gz |
Adjust `unbound-variable' GOOPS heuristic for `goops.scm'.
* module/language/tree-il/analyze.scm (goops-toplevel-definition): Add
ENV argument. Deal with GOOPS macros expanded within `goops.scm'.
(report-possibly-unbound-variables): Adjust.
-rw-r--r-- | module/language/tree-il/analyze.scm | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/module/language/tree-il/analyze.scm b/module/language/tree-il/analyze.scm index 352462f44..d6895591c 100644 --- a/module/language/tree-il/analyze.scm +++ b/module/language/tree-il/analyze.scm @@ -633,21 +633,29 @@ (defs toplevel-info-defs) ;; (VARIABLE-NAME ...) (locs toplevel-info-locs)) ;; (LOCATION ...) -(define (goops-toplevel-definition proc args) +(define (goops-toplevel-definition proc args env) ;; If application of PROC to ARGS is a GOOPS top-level definition, return ;; the name of the variable being defined; otherwise return #f. This ;; assumes knowledge of the current implementation of `define-class' et al. + (define (toplevel-define-arg args) + (and (pair? args) (pair? (cdr args)) (null? (cddr args)) + (record-case (car args) + ((<const> exp) + (and (symbol? exp) exp)) + (else #f)))) + (record-case proc ((<module-ref> mod public? name) (and (equal? mod '(oop goops)) (not public?) (eq? name 'toplevel-define!) - (pair? args) (pair? (cdr args)) (null? (cddr args)) - (record-case (car args) - ((<const> exp) - (and (symbol? exp) - exp)) - (else #f)))) + (toplevel-define-arg args))) + ((<toplevel-ref> name) + ;; This may be the result of expanding one of the GOOPS macros within + ;; `oop/goops.scm'. + (and (eq? name 'toplevel-define!) + (eq? env (resolve-module '(oop goops))) + (toplevel-define-arg args))) (else #f))) ;; TODO: Combine with `report-unused-variables' so we don't traverse the tree @@ -703,7 +711,8 @@ ((<application> proc args) ;; Check for a dynamic top-level definition, as is ;; done by code expanded from GOOPS macros. - (let ((name (goops-toplevel-definition proc args))) + (let ((name (goops-toplevel-definition proc args + env))) (if (symbol? name) (make-toplevel-info (alist-delete name refs eq?) |