From 1627471032647e6a13149242ad9547b5124c1c4f Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 20 Aug 2011 03:31:54 +0200 Subject: Racket: eval geiser-eval's apply arguments properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- scheme/racket/geiser/autodoc.rkt | 7 +++---- scheme/racket/geiser/user.rkt | 8 +++++--- scheme/racket/geiser/utils.rkt | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) (limited to 'scheme/racket') 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 -- cgit v1.2.3