diff --git a/collects/typed-scheme/private/optimize.rkt b/collects/typed-scheme/private/optimize.rkt index ca7db62a..fcf533f3 100644 --- a/collects/typed-scheme/private/optimize.rkt +++ b/collects/typed-scheme/private/optimize.rkt @@ -48,4 +48,4 @@ (syntax-parse stx #:literal-sets (kernel-literals) [(define-values ~! ids e:opt-expr) (syntax/loc stx (define-values ids e.opt))] - [_ (printf "nothing happened") stx])) \ No newline at end of file + [_ stx])) \ No newline at end of file diff --git a/collects/typed-scheme/typed-scheme.rkt b/collects/typed-scheme/typed-scheme.rkt index 8e6aa08a..c9ef66c4 100644 --- a/collects/typed-scheme/typed-scheme.rkt +++ b/collects/typed-scheme/typed-scheme.rkt @@ -34,8 +34,8 @@ (define-syntax (module-begin stx) (define module-name (syntax-property stx 'enclosing-module-name)) ;(printf "BEGIN: ~a~n" (syntax->datum stx)) - (syntax-case stx () - [(mb forms ...) + (syntax-parse stx + [(mb (~optional (~and #:optimize (~bind [opt? #'#t]))) forms ...) (nest ([begin (set-box! typed-context? #t) (start-timing module-name)] @@ -48,6 +48,8 @@ [infer-param infer] ;; do we report multiple errors [delay-errors? #t] + ;; do we optimize? + [optimize? (or (attribute opt?) (optimize?))] ;; this parameter is for parsing types [current-tvars initial-tvar-env] ;; this parameter is just for printing types @@ -81,7 +83,8 @@ [with-syntax ([(transformed-body ...) (if (optimize?) - (map optimize (syntax->list #'(transformed-body ...))) + (begin (printf "optimizing ...\n") + (map optimize (syntax->list #'(transformed-body ...)))) #'(transformed-body ...))])]) (do-time "Typechecked") #;(printf "checked ~a~n" module-name)