diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-05-24 00:03:30 +0200 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-05-24 00:03:30 +0200 | 
| commit | 2d30daecad657d692a7f3cb66deb496630362600 (patch) | |
| tree | 6b4f7e2cc66633465715696ec89f018dcb2b2f20 /scheme/racket/geiser/eval.rkt | |
| parent | 0b491101472741c3728b6ccf80c121d66e90f94e (diff) | |
| download | geiser-guile-2d30daecad657d692a7f3cb66deb496630362600.tar.gz geiser-guile-2d30daecad657d692a7f3cb66deb496630362600.tar.bz2  | |
Racket: PLT implementation renamed to Racket.
Diffstat (limited to 'scheme/racket/geiser/eval.rkt')
| -rw-r--r-- | scheme/racket/geiser/eval.rkt | 81 | 
1 files changed, 81 insertions, 0 deletions
diff --git a/scheme/racket/geiser/eval.rkt b/scheme/racket/geiser/eval.rkt new file mode 100644 index 0000000..e0bcffa --- /dev/null +++ b/scheme/racket/geiser/eval.rkt @@ -0,0 +1,81 @@ +;;; eval.rkt -- evaluation + +;; Copyright (C) 2009, 2010 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 +;; have received a copy of the license along with this program. If +;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>. + +;; Start date: Sun Apr 26, 2009 00:44 + +#lang racket + +(provide eval-in +         compile-in +         load-file +         compile-file +         macroexpand +         make-repl-reader) + +(require scheme/enter geiser/modules geiser/autodoc) + +(define last-result (void)) + +(define namespace->module-name +  (compose module-path-name->name namespace->module-path-name)) + +(define last-namespace (make-parameter (current-namespace))) + +(define (exn-key e) +  (vector-ref (struct->vector e) 0)) + +(define (set-last-error e) +  (set! last-result `((error (key . ,(exn-key e))))) +  (display (exn-message e))) + +(define (write-value v) +  (with-output-to-string +    (lambda () (write v)))) + +(define (set-last-result . vs) +  (set! last-result `((result  ,@(map write-value vs))))) + +(define (call-with-result thunk) +  (set-last-result (void)) +  (let ((output +         (with-output-to-string +           (lambda () +             (with-handlers ((exn? set-last-error)) +               (call-with-values thunk set-last-result)))))) +    (append last-result `((output . ,output))))) + +(define (eval-in form spec lang) +  (call-with-result +   (lambda () +     (update-signature-cache spec form) +     (eval form (module-spec->namespace spec lang))))) + +(define compile-in eval-in) + +(define (load-file file) +  (call-with-result +   (lambda () +     (load-module file (current-output-port) (last-namespace)) +     (update-signature-cache file)))) + +(define compile-file load-file) + +(define (macroexpand form . all) +  (let ((all (and (not (null? all)) (car all)))) +    (with-output-to-string +      (lambda () +        (pretty-print (syntax->datum ((if all expand expand-once) form))))))) + +(define (make-repl-reader builtin-reader) +  (lambda (ns) +    (last-namespace ns) +    (printf "racket@~a" (namespace->module-name ns)) +    (builtin-reader))) + +;;; eval.rkt ends here  | 
