(Arne Babenhauserheide)
2017-07-26: first steps for wisp on racket first steps for wisp on racket
diff --git a/racket/parse.rkt b/racket/parse.rkt
--- a/racket/parse.rkt
+++ b/racket/parse.rkt
@@ -1,7 +1,4 @@
-#!/bin/bash
-(# -*- wisp -*-)
-(exec guile -L . --language=wisp -s "$0" "$@")
-; !#
+#lang racket
;; Scheme-only implementation of a wisp-preprocessor which output a
;; scheme code tree to feed to a scheme interpreter instead of a
@@ -35,20 +32,6 @@
;; SOFTWARE.
-(define-module (wisp-scheme)
- #:export (wisp-scheme-read-chunk wisp-scheme-read-all
- wisp-scheme-read-file-chunk wisp-scheme-read-file
- wisp-scheme-read-string))
-
-; use curly-infix by default
-(read-enable 'curly-infix)
-
-(use-modules
- (srfi srfi-1)
- (srfi srfi-11 ); for let-values
- (ice-9 rw ); for write-string/partial
- (ice-9 match))
-
;; Helper functions for the indent-and-symbols data structure: '((indent token token ...) ...)
(define (line-indent line)
(car line))
@@ -63,8 +46,6 @@
(define (line-code line)
(let ((code (cdr line)))
; propagate source properties
- (when (not (null? code))
- (set-source-properties! code (source-properties line)))
code))
; literal values I need
diff --git a/racket/wisp.rkt b/racket/wisp.rkt
--- a/racket/wisp.rkt
+++ b/racket/wisp.rkt
@@ -1,78 +1,25 @@
-#!/home/arne/wisp/wisp-multiline.sh
-; !#
-;;
-;; Implement wisp in guile
+#lang racket
+
+;; Implement wisp in Racket
;;
;; -Author: Arne Babenhauserheide
-; adapted from guile-sweet: https://gitorious.org/nacre/guile-sweet/source/ae306867e371cb4b56e00bb60a50d9a0b8353109:sweet/common.scm
+; adapted from wisp-in-guile and algol60.rkt
+
+(require (for-syntax "parse-base.rkt"))
+
+(provide literal-wisp)
-; adapted from spec.scm: https://gitorious.org/nacre/guile-sweet/source/ae306867e371cb4b56e00bb60a50d9a0b8353109:sweet/spec.scm
-(define-module (language wisp spec)
-; . #:use-module : wisp
- #:use-module (wisp-scheme)
- #:use-module (system base compile)
- #:use-module (system base language)
- #:use-module (language scheme compile-tree-il)
- #:use-module (language scheme decompile-tree-il)
- #:export (wisp))
-
-; Set locale to something which supports unicode. Required to avoid using fluids.
-(catch #t
- (lambda ()
- (setlocale LC_ALL ""))
- (lambda (key . parameters)
- (let ((locale-fallback "en_US.UTF-8"))
- (format (current-error-port)
- (string-join
- (list "Warning: setlocale LC_ALL \"\" failed with ~A: ~A"
- "using explicit ~A locale. Please setup your locale.\n")
- "\n ")
- key parameters locale-fallback)
- (setlocale LC_ALL locale-fallback))))
-
-;;;
-;;; Language definition
-;;;
-
-(define wisp-pending-sexps (list))
-
-(define (read-one-wisp-sexp port env)
- (cond
- ((eof-object? (peek-char port))
- (read-char port )); return eof: we’re done
- (else
- (let ((chunk (wisp-scheme-read-chunk port)))
- (cond
- ((not (null? chunk))
- (car chunk))
- (else
- #f))))))
-
-(define-language wisp
- #:title "Wisp Scheme Syntax. See SRFI-119 for details. THIS IS EXPERIMENTAL, USE AT YOUR OWN RISK"
- ; . #:reader read-one-wisp-sexp
- #:reader read-one-wisp-sexp ; : lambda (port env) : let ((x (read-one-wisp-sexp port env))) (display x)(newline) x ;
- #:compilers `((tree-il . ,compile-tree-il))
- #:decompilers `((tree-il . ,decompile-tree-il))
- #:evaluator (lambda (x module) (primitive-eval x))
- #:printer write ; TODO: backtransform to wisp? Use source-properties?
- #:make-default-environment
- (lambda ()
- ;; Ideally we'd duplicate the whole module hierarchy so that `set!',
- ;; `fluid-set!', etc. don't have any effect in the current environment.
- (let ((m (make-fresh-user-module)))
- ;; Provide a separate `current-reader' fluid so that
- ;; compile-time changes to `current-reader' are
- ;; limited to the current compilation unit.
- (module-define! m 'current-reader (make-fluid))
- ;; Default to `simple-format', as is the case until
- ;; (ice-9 format) is loaded. This allows
- ;; compile-time warnings to be emitted when using
- ;; unsupported options.
- (module-set! m 'format simple-format)
- m)))
-
-
-
+(define-syntax (literal-wisp stx)
+ (syntax-case stx ()
+ [(_ strs ...)
+ (andmap (λ (x) (string? (syntax-e x)))
+ (syntax->list (syntax (strs ...))))
+
+ (parse-wisp-port
+ (open-input-string
+ (apply
+ string-append
+ (map syntax-e (syntax->list #'(strs ...)))))
+ (syntax-source stx))]))
\ No newline at end of file