#lang scheme/base
(require (prefix-in base: scheme/base)
scheme/contract
scheme/class
scheme/gui/base
lang/htdp-advanced
(for-syntax scheme/base)
"stx.ss"
"error-struct.ss")
(provide (except-out (all-from-out lang/htdp-advanced)
define-struct
define
quote
quasiquote
unquote
unquote-splicing
let
letrec
let*
image?
image=?
set!
not
))
(define-syntax (my-define-struct stx)
(syntax-case stx ()
[(_ id (fields ...))
(syntax/loc stx
(base:define-struct id (fields ...)
#:prefab
#:mutable))]))
(base:define (syntax-error msg . stx)
(raise (make-exn:fail:moby-syntax-error msg (current-continuation-marks) stx)))
(define (open-input-stx a-path-string)
(local [ (define (open-beginner-program path)
(local [(define text (new text%))]
(begin (send text insert-file path)
text)))
(define (syntax->stx a-syntax)
(cond
[(pair? (syntax-e a-syntax))
(let ([elts
(map syntax->stx (syntax->list a-syntax))])
(datum->stx elts
(make-Loc (syntax-position a-syntax)
(syntax-line a-syntax)
(syntax-span a-syntax)
(format "~a" (syntax-source a-syntax)))))]
[else
(datum->stx (syntax-e a-syntax)
(make-Loc (syntax-position a-syntax)
(syntax-line a-syntax)
(syntax-span a-syntax)
(format "~a" (syntax-source a-syntax))))]))
(define (parse-text-as-program a-text source-name)
(let* ([ip (open-input-text-editor a-text)])
(begin
(port-count-lines! ip)
(parameterize ([read-accept-reader #t])
(let loop ()
(let ([stx (read-syntax source-name ip)])
(cond [(not (eof-object? stx))
(cons (syntax->stx stx) (loop))]
[else
empty])))))))]
(parse-text-as-program (open-beginner-program a-path-string)
a-path-string)))
(provide (rename-out (base:provide provide)
(base:quote quote)
(base:quasiquote quasiquote)
(base:unquote unquote)
(base:unquote-splicing unquote-splicing)
(my-define-struct define-struct)
(base:define define)
(base:set! set!)
(base:not not))
(all-from-out "stx.ss")
provide/contract -> any/c listof list/c or/c false/c natural-number/c hash?
begin
void
build-vector
make-vector
vector
vector-length
vector-ref
vector-set!
vector?
case
let let* letrec
list*
hash-set hash-ref hash-remove make-immutable-hasheq hash-map
open-input-stx
syntax-error
printf
)