From df593e60b078759d88daf98c18112821fe70a8a7 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 26 Apr 2009 13:50:35 +0200 Subject: PLT support: basic startup and evaluation working. --- scheme/plt/geiser.ss | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 scheme/plt/geiser.ss (limited to 'scheme/plt') diff --git a/scheme/plt/geiser.ss b/scheme/plt/geiser.ss new file mode 100644 index 0000000..c5081c4 --- /dev/null +++ b/scheme/plt/geiser.ss @@ -0,0 +1,86 @@ +;; geiser.ss -- top level entry point + +;; Copyright (C) 2009 Jose Antonio Ortega Ruiz + +;; Author: Jose Antonio Ortega Ruiz +;; Start date: Sat Apr 25, 2009 22:36 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3 of the License, or +;; (at your option) any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Comentary: + +;; Top level REPL definitions for Geiser. + +;;; Code: + +(module geiser scheme + (provide geiser/eval + geiser/compile + geiser/autodoc + geiser/format-error + geiser/set-result! + geiser/make-repl-reader) + + (compile-enforce-module-constants #f) + (require scheme/enter scheme/string scheme/port) + + (define (ensure-module spec) + (cond ((symbol? spec) spec) + ((not (string? spec)) #f) + ((not (file-exists? spec)) #f) + ((absolute-path? spec) `(file ,spec)) + (else spec))) + + (define (exn-key e) + (vector-ref (struct->vector e) 0)) + + (define last-result (void)) + + (define (geiser/format-error e) + (set! last-result `((error (key . ,(exn-key e)) + (subr) + (msg . ,(exn-message e)))))) + (define (geiser/set-result! v) + (set! last-result `((result ,v)))) + + (define nowhere (open-output-nowhere)) + + (define (geiser/eval form spec) + (geiser/set-result! (void)) + (parameterize ((current-error-port nowhere)) + (eval #`(enter! #,(ensure-module spec)))) + (with-handlers ((exn? (dynamic-require ''geiser 'geiser/format-error))) + ((dynamic-require ''geiser 'geiser/set-result!) (eval form))) + (enter! #f) + last-result) + + (define geiser/compile geiser/eval) + (define (geiser/autodoc . x) #f) + + (define prompt (make-parameter "mzscheme@(geiser)")) + (define (geiser/make-repl-reader builtin-reader) + (lambda () + (display (prompt)) + (builtin-reader)))) + +(require 'geiser) + +(current-prompt-read + (let ([old (current-prompt-read)]) + (lambda () + (current-prompt-read + ((dynamic-require ''geiser 'geiser/make-repl-reader) old))))) + + +;;; geiser.ss ends here -- cgit v1.2.3