emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-racket 4ad7d89 082/191: Racket: eval geiser-eval's


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket 4ad7d89 082/191: Racket: eval geiser-eval's apply arguments properly
Date: Sun, 1 Aug 2021 18:32:04 -0400 (EDT)

branch: elpa/geiser-racket
commit 4ad7d8984fd1196820a7b58a8ea9c62fb889fc03
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    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).
---
 geiser/autodoc.rkt | 7 +++----
 geiser/user.rkt    | 8 +++++---
 geiser/utils.rkt   | 4 ++--
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/geiser/autodoc.rkt b/geiser/autodoc.rkt
index 6e73271..bdd6422 100644
--- a/geiser/autodoc.rkt
+++ b/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/geiser/user.rkt b/geiser/user.rkt
index 621b47f..4479b42 100644
--- a/geiser/user.rkt
+++ b/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/geiser/utils.rkt b/geiser/utils.rkt
index 4bf9494..80d5150 100644
--- a/geiser/utils.rkt
+++ b/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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]