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

(planet wrturtle/pyret/bsl/language)
#:read my-read
#:read-syntax my-read-syntax
#:language-info
'#((planet wrturtle/pyret/bsl/lang/lang-info) get-info #f)
#:info my-get-info


(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 (check-and-compile parse)])
            (if (list? val)
                (begin #;(printf "parse is a list\n") (strip-context (datum->syntax #f val)))
                val))
          eof))))

;; get rid of syntax highlighting until we change it
;; (I'm not sure I like this)
(define (my-get-info key default default-filter)
  (case key
    [(color-lexer)
     (dynamic-require 'syntax-color/default-lexer
                      'default-lexer)]
    [else
     (default-filter key default)]))