diff --git a/collects/typed-racket/base-env/base-types.rkt b/collects/typed-racket/base-env/base-types.rkt index 876f1e84..bfc4d6e8 100644 --- a/collects/typed-racket/base-env/base-types.rkt +++ b/collects/typed-racket/base-env/base-types.rkt @@ -6,6 +6,8 @@ ;; I don't understand this at all. :( ;; -- STH, 6/26/12 (require (for-syntax "../env/global-env.rkt")) +(require "../types/abbrev.rkt" "../types/convenience.rkt" "../types/numeric-tower.rkt" + "../rep/type-rep.rkt") [Complex -Number] [Number -Number] diff --git a/collects/typed-racket/base-env/colon.rkt b/collects/typed-racket/base-env/colon.rkt index e8f04605..0bc21709 100644 --- a/collects/typed-racket/base-env/colon.rkt +++ b/collects/typed-racket/base-env/colon.rkt @@ -1,6 +1,6 @@ #lang racket/base -(require (for-syntax racket/base syntax/parse "internal.rkt" "../utils/tc-utils.rkt") +(require (for-syntax racket/base syntax/parse "internal.rkt" "../utils/disappeared-use.rkt") "../typecheck/internal-forms.rkt" (prefix-in t: "base-types-extra.rkt")) diff --git a/collects/typed-racket/base-env/for-clauses.rkt b/collects/typed-racket/base-env/for-clauses.rkt index 0c1b856d..a9c3acb2 100644 --- a/collects/typed-racket/base-env/for-clauses.rkt +++ b/collects/typed-racket/base-env/for-clauses.rkt @@ -2,8 +2,7 @@ (require syntax/parse "annotate-classes.rkt" - (for-template racket/base - "base-types.rkt")) + (for-template racket/base)) (provide (all-defined-out)) diff --git a/collects/typed-racket/base-env/prims.rkt b/collects/typed-racket/base-env/prims.rkt index 306c0e1a..4ddcd292 100644 --- a/collects/typed-racket/base-env/prims.rkt +++ b/collects/typed-racket/base-env/prims.rkt @@ -39,16 +39,17 @@ This file defines two sorts of primitives. All of them are provided into any mod (rename-in racket/contract/base [-> c->] [case-> c:case->]) "base-types.rkt" "base-types-extra.rkt" - racket/flonum ; for for/flvector and for*/flvector + racket/flonum ; for for/flvector and for*/flvector mzlib/etc (for-syntax + unstable/lazy-require syntax/parse racket/syntax racket/base syntax/define racket/struct-info syntax/struct - "../rep/type-rep.rkt" + ;"../rep/type-rep.rkt" "annotate-classes.rkt" "internal.rkt" "../utils/tc-utils.rkt" @@ -56,6 +57,9 @@ This file defines two sorts of primitives. All of them are provided into any mod "../types/numeric-predicates.rkt") (provide index?) ; useful for assert, and racket doesn't have it +(begin-for-syntax + (lazy-require ["../rep/type-rep.rkt" (make-Opaque)])) + (define-for-syntax (ignore stx) (syntax-property stx 'typechecker:ignore #t)) ;; dynamically loaded b/c they're only used at the top-level, so we save a lot diff --git a/collects/typed-racket/base-env/type-env-lang.rkt b/collects/typed-racket/base-env/type-env-lang.rkt index 77ce95f7..14210d93 100644 --- a/collects/typed-racket/base-env/type-env-lang.rkt +++ b/collects/typed-racket/base-env/type-env-lang.rkt @@ -1,30 +1,25 @@ #lang racket/base -(require "../utils/utils.rkt" - (for-syntax racket/base syntax/parse - (except-in (rep filter-rep type-rep) make-arr) - (rename-in (types numeric-tower abbrev convenience)))) +(require (for-syntax racket/base syntax/parse)) (define-syntax (#%module-begin stx) (syntax-parse stx #:literals (require provide) - [(mb (require . args) ... (provide . args2) ... [nm:id ty] ...) + [(mb (require . args) ... [nm:id ty] ...) #'(#%plain-module-begin - (begin - (require . args) ... - (provide . args2) ... + (begin (define-syntax (nm stx) - (raise-syntax-error 'type-check "type name used out of context" stx)) + (raise-syntax-error + 'type-check "type name used out of context" stx)) ... (provide nm) ... (begin-for-syntax - ((dynamic-require 'typed-racket/env/init-envs - 'initialize-type-name-env) - (list (list #'nm ty) ...)))))])) + (module* #%type-decl #f + (require + (only-in typed-racket/env/init-envs initialize-type-name-env)) + (require . args) ... + (initialize-type-name-env + (list (list #'nm ty) ...))))))])) -(provide #%module-begin - require provide +(provide #%module-begin require (all-from-out racket/base) - (for-syntax - (rep-out type-rep) - (types-out numeric-tower abbrev convenience) - (all-from-out racket/base))) + (for-syntax (all-from-out racket/base))) diff --git a/collects/typed-racket/env/global-env.rkt b/collects/typed-racket/env/global-env.rkt index 5f50ff1d..c66cd9b1 100644 --- a/collects/typed-racket/env/global-env.rkt +++ b/collects/typed-racket/env/global-env.rkt @@ -3,11 +3,9 @@ ;; Top-level type environment ;; maps identifiers to their types, updated by mutation -(require "../utils/utils.rkt" - "../types/tc-error.rkt" +(require "../types/tc-error.rkt" syntax/id-table - (rep type-rep) - (utils tc-utils)) + unstable/lazy-require) (provide register-type register-type-if-undefined finish-register-type maybe-finish-register-type @@ -18,6 +16,8 @@ check-all-registered-types type-env-map) +(lazy-require ["../rep/type-rep.rkt" (Type? type-equal?)]) + ;; free-id-table from id -> type or Box[type] ;; where id is a variable, and type is the type of the variable ;; if the result is a box, then the type has not actually been defined, just registered diff --git a/collects/typed-racket/typed-racket.rkt b/collects/typed-racket/typed-racket.rkt index 3f6dadac..ea621c15 100644 --- a/collects/typed-racket/typed-racket.rkt +++ b/collects/typed-racket/typed-racket.rkt @@ -1,10 +1,10 @@ #lang racket/base (require - (for-syntax racket/base "utils/timing.rkt" "env/env-req.rkt") ;; only for timing/debugging + (for-syntax racket/base "env/env-req.rkt") + (for-syntax "utils/timing.rkt") ;; only for timing/debugging ;; the below requires are needed since they provide identifiers ;; that may appear in the residual program - (for-syntax "typecheck/renamer.rkt") "utils/any-wrap.rkt" unstable/contract) (provide (rename-out [module-begin #%module-begin] @@ -26,6 +26,8 @@ (do-time "Finshed base-env-numeric") ((dynamic-require 'typed-racket/base-env/base-special-env 'initialize-special)) (do-time "Finished base-special-env") + (dynamic-require '(submod typed-racket/base-env/base-types #%type-decl) #f) + (do-time "Finished base-types") (set! initialized #t)) (do-requires)) diff --git a/collects/typed-racket/utils/any-wrap.rkt b/collects/typed-racket/utils/any-wrap.rkt index ce725818..53921050 100644 --- a/collects/typed-racket/utils/any-wrap.rkt +++ b/collects/typed-racket/utils/any-wrap.rkt @@ -1,6 +1,6 @@ #lang racket/base -(require racket/match racket/vector racket/contract/base racket/contract/combinator) +(require racket/match racket/contract/base racket/contract/combinator) (define-struct any-wrap (val) #:property prop:custom-write @@ -19,7 +19,9 @@ (keyword? e) (bytes? e) (boolean? e) (void? e)))) v] [(cons x y) (cons (t x) (t y))] - [(and (? immutable?) (? vector?)) (vector-map t v)] + [(and (? immutable?) (? vector?)) + (for/vector #:length (vector-length v) + ([i (in-vector v)]) (t i))] [(and (? immutable?) (box v)) (box (t v))] [(and (? immutable?) (? hash? v)) ((cond [(hash-eq? v) make-immutable-hasheq] diff --git a/collects/typed-racket/utils/disappeared-use.rkt b/collects/typed-racket/utils/disappeared-use.rkt new file mode 100644 index 00000000..2773f8b7 --- /dev/null +++ b/collects/typed-racket/utils/disappeared-use.rkt @@ -0,0 +1,10 @@ +#lang racket/base + +(provide (all-defined-out)) +;; list of syntax objects that should count as disappeared uses +(define disappeared-use-todo (make-parameter '())) +(define (add-disappeared-use t) + (disappeared-use-todo (cons t (disappeared-use-todo)))) +(define disappeared-bindings-todo (make-parameter '())) +(define (add-disappeared-binding t) + (disappeared-bindings-todo (cons t (disappeared-bindings-todo)))) \ No newline at end of file diff --git a/collects/typed-racket/utils/tc-utils.rkt b/collects/typed-racket/utils/tc-utils.rkt index cef97c84..78f9fc1d 100644 --- a/collects/typed-racket/utils/tc-utils.rkt +++ b/collects/typed-racket/utils/tc-utils.rkt @@ -5,8 +5,8 @@ This file is for utilities that are only useful for Typed Racket, but don't depend on any other portion of the system |# -(provide (all-defined-out)) -(require "syntax-traversal.rkt" racket/dict +(provide (all-defined-out) (all-from-out "disappeared-use.rkt")) +(require "syntax-traversal.rkt" racket/dict "disappeared-use.rkt" syntax/parse (for-syntax racket/base syntax/parse) racket/match) ;; a parameter representing the original location of the syntax being @@ -180,15 +180,6 @@ don't depend on any other portion of the system ;; are we currently expanding in a typed module (or top-level form)? (define typed-context? (box #f)) - -;; list of syntax objects that should count as disappeared uses -(define disappeared-use-todo (make-parameter '())) -(define (add-disappeared-use t) - (disappeared-use-todo (cons t (disappeared-use-todo)))) -(define disappeared-bindings-todo (make-parameter '())) -(define (add-disappeared-binding t) - (disappeared-bindings-todo (cons t (disappeared-bindings-todo)))) - ;; environment constructor (define-syntax (make-env stx) (define-syntax-class spec