Delay actual initialization of type environment.
original commit: 5ab3827b488cdd638da7b48ca9c52ca9aa344faa
This commit is contained in:
parent
788e335196
commit
a6fc57ea97
|
@ -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]
|
||||
|
|
|
@ -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"))
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
8
collects/typed-racket/env/global-env.rkt
vendored
8
collects/typed-racket/env/global-env.rkt
vendored
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
10
collects/typed-racket/utils/disappeared-use.rkt
Normal file
10
collects/typed-racket/utils/disappeared-use.rkt
Normal 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))))
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user