bsl/lang/reader.rkt
#lang s-exp syntax/module-reader

(planet wrturtle/pyret/bsl/language)
#:read my-read
#:read-syntax my-read-syntax

(require "../form-1.rkt"
         "../lex.rkt"
         "../parse.rkt"
         "../check.rkt"
         syntax/strip-context
         )

(define (my-read ip)
  (syntax->datum (my-read-syntax #f ip)))

(define (my-read-syntax src ip)
  (parameterize ([current-source-name src])
    (let ([parse
           (program-parser
            (lambda ()
              (expression-lexer ip)))])
      (if (stage-1-parse? parse)
          (let ([val (to-racket (check-indent (check-return parse)))])
            (if (list? val)
                (begin #;(printf "parse is a list\n") (strip-context (datum->syntax #f val)))
                val))
          eof))))