summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2011-08-20 03:31:54 +0200
committerJose Antonio Ortega Ruiz <jao@gnu.org>2011-08-20 16:29:46 +0200
commit1627471032647e6a13149242ad9547b5124c1c4f (patch)
tree56cf76f34112cf81cfd1710853de3f116685a6b7
parent0ef26298d48bd0ae605096a187be35ef4759a722 (diff)
downloadgeiser-chez-1627471032647e6a13149242ad9547b5124c1c4f.tar.gz
geiser-chez-1627471032647e6a13149242ad9547b5124c1c4f.tar.bz2
Racket: eval geiser-eval's apply arguments properly
As Stanisław Halik reported, autodoc was receiving a mlist (instead of a list) as its argument when invoked in an R5RS context. Turns out we were evaluating geiser-eval's arguments in the wrong context (the procedure being applied and the arglist belong to the same namespace).
-rw-r--r--scheme/racket/geiser/autodoc.rkt7
-rw-r--r--scheme/racket/geiser/user.rkt8
-rw-r--r--scheme/racket/geiser/utils.rkt4
3 files changed, 10 insertions, 9 deletions
diff --git a/scheme/racket/geiser/autodoc.rkt b/scheme/racket/geiser/autodoc.rkt
index 6e73271..bdd6422 100644
--- a/scheme/racket/geiser/autodoc.rkt
+++ b/scheme/racket/geiser/autodoc.rkt
@@ -1,6 +1,6 @@
;;; autodoc.rkt -- suport for autodoc echo
-;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011 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
@@ -102,9 +102,8 @@
(dynamic-require mod id (const #f))))
(define (autodoc ids)
- (if (not (list? ids))
- '()
- (map (lambda (id) (or (autodoc* id) (list id))) ids)))
+ (map (lambda (id) (or (autodoc* id) (list id)))
+ (if (list? ids) ids '())))
(define (autodoc* id (extra #t))
(define (val)
diff --git a/scheme/racket/geiser/user.rkt b/scheme/racket/geiser/user.rkt
index 621b47f..4479b42 100644
--- a/scheme/racket/geiser/user.rkt
+++ b/scheme/racket/geiser/user.rkt
@@ -50,15 +50,17 @@
(define (geiser-eval)
(define geiser-main (module->namespace 'geiser))
+ (define (eval-here form) (eval form geiser-main))
(let* ([mod (read)]
[lang (read)]
[form (read)])
(datum->syntax #f
(list 'quote
(cond [(equal? form '(unquote apply))
- (let* ([proc (eval (read) geiser-main)]
- [args (read)])
- (eval-in `(,proc ,@args) mod lang))]
+ (let* ([proc (eval-here (read))]
+ [args (map eval-here (read))]
+ [ev (lambda () (apply proc args))])
+ (eval-in `(,ev) mod lang))]
[else ((geiser:eval lang) form mod)])))))
(define ((geiser-read prompt))
diff --git a/scheme/racket/geiser/utils.rkt b/scheme/racket/geiser/utils.rkt
index 4bf9494..80d5150 100644
--- a/scheme/racket/geiser/utils.rkt
+++ b/scheme/racket/geiser/utils.rkt
@@ -15,6 +15,8 @@
keyword->symbol
symbol->keyword)
+(require racket/mpair)
+
(define (pair->list pair)
(let loop ([d pair] [s '()])
(cond [(null? d) (reverse s)]
@@ -23,5 +25,3 @@
(define keyword->symbol (compose string->symbol keyword->string))
(define (symbol->keyword sym) (string->keyword (format "~a" sym)))
-
-;;; utils.rkt ends here