Delay actual initialization of type environment.

original commit: 5ab3827b488cdd638da7b48ca9c52ca9aa344faa
This commit is contained in:
Sam Tobin-Hochstadt 2012-07-11 14:23:22 -04:00
parent 788e335196
commit a6fc57ea97
10 changed files with 47 additions and 42 deletions

View File

@ -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]

View File

@ -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"))

View File

@ -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))

View File

@ -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

View File

@ -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)))

View File

@ -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

View File

@ -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))

View File

@ -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]

View File

@ -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))))

View File

@ -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