summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2014-01-09 00:48:57 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2014-01-09 00:55:20 +0100
commit826a054761d0f12f243883a001b2392279580a7f (patch)
treeac3743a14310ea7127b5f48bdc4ba01ae0218955
parent4bb12c208bab5740fdfa0f77b5c2b279fb941b99 (diff)
downloadgeiser-chez-826a054761d0f12f243883a001b2392279580a7f.tar.gz
geiser-chez-826a054761d0f12f243883a001b2392279580a7f.tar.bz2
Racket: fix for evaluations inside typed/racket modules
When evaluating (re)definitions in a typed module, it's necessary that the form evaluated is wrapped with #%top-interaction, so that typed racket's redefinition of that macro enters into play and the system records the type information of the new value. Many thanks to Sam Tobin-Hochstadt for the tip, and for his encouraging words.
-rw-r--r--NEWS7
-rw-r--r--scheme/racket/geiser/eval.rkt7
-rw-r--r--scheme/racket/geiser/user.rkt4
3 files changed, 13 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 3bf55d9..6131f19 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+* Version 0.5.1
+
+ Bug fixes:
+
+ - Better support for Typed Racket: (re)definitions now work for
+ typed/racket modules (thanks to Sam Tobin-Hochstadt).
+
* Version 0.5 (Dec 9, 2013)
New features:
diff --git a/scheme/racket/geiser/eval.rkt b/scheme/racket/geiser/eval.rkt
index 752a405..0a391e8 100644
--- a/scheme/racket/geiser/eval.rkt
+++ b/scheme/racket/geiser/eval.rkt
@@ -1,6 +1,6 @@
;;; eval.rkt -- evaluation
-;; Copyright (C) 2009, 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 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
@@ -52,10 +52,11 @@
(call-with-values thunk set-last-result)))))])
(append last-result `(,(cons 'output output)))))
-(define (eval-in form spec lang)
+(define (eval-in form spec lang . non-top)
(write (call-with-result
(lambda ()
- (eval form (module-spec->namespace spec lang)))))
+ (eval (if (null? non-top) (cons '#%top-interaction form) form)
+ (module-spec->namespace spec lang)))))
(newline))
(define (load-file file)
diff --git a/scheme/racket/geiser/user.rkt b/scheme/racket/geiser/user.rkt
index d8ac0b2..a35574b 100644
--- a/scheme/racket/geiser/user.rkt
+++ b/scheme/racket/geiser/user.rkt
@@ -1,6 +1,6 @@
;;; user.rkt -- global bindings visible to geiser users
-;; Copyright (C) 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2010, 2011, 2012, 2013, 2014 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
@@ -71,7 +71,7 @@
(let* ([proc (eval-here (read))]
[args (map eval-here (read))]
[ev (lambda () (apply proc args))])
- (eval-in `(,ev) mod lang))]
+ (eval-in `(,ev) mod lang #t))]
[else ((geiser:eval lang) form mod)])])
(datum->syntax #f (list 'quote res))))