diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2014-01-09 00:48:57 +0100 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2014-01-09 00:55:20 +0100 |
commit | 826a054761d0f12f243883a001b2392279580a7f (patch) | |
tree | ac3743a14310ea7127b5f48bdc4ba01ae0218955 | |
parent | 4bb12c208bab5740fdfa0f77b5c2b279fb941b99 (diff) | |
download | geiser-guile-826a054761d0f12f243883a001b2392279580a7f.tar.gz geiser-guile-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-- | NEWS | 7 | ||||
-rw-r--r-- | scheme/racket/geiser/eval.rkt | 7 | ||||
-rw-r--r-- | scheme/racket/geiser/user.rkt | 4 |
3 files changed, 13 insertions, 5 deletions
@@ -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)))) |