diff options
author | Ludovic Courtès <ludo@gnu.org> | 2010-04-21 23:30:48 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2010-05-07 13:47:52 +0200 |
commit | f9a86f72a6ea7ab480f4bfd6ef61c835620df5eb (patch) | |
tree | 4e72d7bdb5486d598f5af5bb3a5dc6cb7363503a | |
parent | e6bd58af8fd847dc1e7af2c8d658905ea889edca (diff) | |
download | guile-f9a86f72a6ea7ab480f4bfd6ef61c835620df5eb.tar.gz |
Add `program-free-variables' to `(system vm program)'.
* module/system/vm/program.scm (program-free-variables): New procedure.
* module/language/objcode/spec.scm (program-free-variables): Remove.
-rw-r--r-- | module/language/objcode/spec.scm | 5 | ||||
-rw-r--r-- | module/system/vm/program.scm | 14 |
2 files changed, 12 insertions, 7 deletions
diff --git a/module/language/objcode/spec.scm b/module/language/objcode/spec.scm index a4cb0621d..bbd745412 100644 --- a/module/language/objcode/spec.scm +++ b/module/language/objcode/spec.scm @@ -53,11 +53,6 @@ (lp (acons (binding:index b) (list b) ret) (cdr locs)))))))) -(define (program-free-variables program) - (list->vector - (map (lambda (i) (program-free-variable-ref program i)) - (iota (program-num-free-variables program))))) - (define (decompile-value x env opts) (cond ((program? x) diff --git a/module/system/vm/program.scm b/module/system/vm/program.scm index f3892cbb3..30f8c7ecd 100644 --- a/module/system/vm/program.scm +++ b/module/system/vm/program.scm @@ -20,7 +20,8 @@ (define-module (system vm program) #:use-module (system base pmatch) - #:use-module (ice-9 optargs) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) #:export (make-program make-binding binding:name binding:boxed? binding:index @@ -35,10 +36,11 @@ arity:nreq arity:nopt arity:rest? arity:kw arity:allow-other-keys? program-arguments-alist program-lambda-list - + program-meta program-objcode program? program-objects program-module program-base + program-free-variables program-num-free-variables program-free-variable-ref program-free-variable-set!)) @@ -190,6 +192,14 @@ ,@(if (pair? key) (cons #:key key) '()) . ,rest))) +(define (program-free-variables prog) + "Return the list of free variables of PROG." + (let ((count (program-num-free-variables prog))) + (unfold (lambda (i) (>= i count)) + (cut program-free-variable-ref prog <>) + 1+ + 0))) + (define (write-program prog port) (format port "#<procedure ~a~a>" (or (procedure-name prog) |