typechecking

This commit is contained in:
Danny Yoo 2011-05-23 15:55:45 -04:00
parent 5dd20201da
commit 9c4e59afe1
2 changed files with 48 additions and 28 deletions

View File

@ -1,10 +1,11 @@
#lang racket/base #lang racket/base
(require racket/contract (require racket/path
racket/path
racket/runtime-path racket/runtime-path
syntax/modcode syntax/modcode
"language-namespace.rkt") "language-namespace.rkt")
(provide/contract [get-module-bytecode ((or/c string? path? input-port?) . -> . bytes?)]) #;(provide/contract [get-module-bytecode ((or/c string? path? input-port?) . -> . bytes?)])
(provide get-module-bytecode)
(define-runtime-path kernel-language-path (define-runtime-path kernel-language-path

View File

@ -1,11 +1,22 @@
#lang typed/racket/base #lang typed/racket/base
(require "get-dependencies.rkt" (require "compiler.rkt"
"il-structs.rkt"
"get-dependencies.rkt"
"lexical-structs.rkt" "lexical-structs.rkt"
"bootstrapped-primitives.rkt" "bootstrapped-primitives.rkt"
"parse-bytecode.rkt" "compiler-structs.rkt"
"get-module-bytecode.rkt" "expression-structs.rkt"
racket/list) racket/list)
(require/typed "parse-bytecode.rkt"
[parse-bytecode (Any -> Expression)])
(require/typed "get-module-bytecode.rkt"
[get-module-bytecode ((U String Path Input-Port) -> Bytes)])
(provide make/dependencies (provide make/dependencies
Source Source
OnlyStatements OnlyStatements
@ -17,27 +28,29 @@
(: make/dependencies ((Listof Source) (: make/dependencies ((Listof Source)
#:should-follow? (Path -> Boolean) (Path -> Boolean)
#:before-first (-> Void) (-> Void)
#:before-element ((U Expression #f) (Listof Statement) -> Void) ((U Expression #f) (Listof Statement) -> Void)
#:on-element ((U Expression #f) (Listof Statement) -> Void) ((U Expression #f) (Listof Statement) -> Void)
#:after-element ((U Expression #f) (Listof Statement) -> Void) ((U Expression #f) (Listof Statement) -> Void)
-> (-> Void)
Void)) -> Void))
(define (make/dependencies sources (define (make/dependencies sources
#:should-follow? should-follow? should-follow?
#:before-first before-first before-first
#:before-element before-element before-element
#:on-element on-element on-element
#:after-element after-element after-element
#:after-last after-last)
after-last)
(: follow-dependencies ((Listof Source) -> Void))
(define (follow-dependencies sources) (define (follow-dependencies sources)
(define visited (make-hash)) (define visited ((inst make-hash Any Boolean)))
(: collect-new-dependencies
((U False Expression) (Listof Source) -> (Listof Source)))
(define (collect-new-dependencies ast sources) (define (collect-new-dependencies ast sources)
(cond (cond
[(eq? ast #f) [(eq? ast #f)
@ -45,14 +58,20 @@
[else [else
(let* ([dependent-module-names (get-dependencies ast)] (let* ([dependent-module-names (get-dependencies ast)]
[paths [paths
(map ModuleName-real-path (foldl (lambda: ([mp : ModuleName]
(filter (lambda (mp) (and (path? (ModuleName-real-path mp)) [acc : (Listof Source)])
(should-follow? (let ([rp [ModuleName-real-path mp]])
(path? (ModuleName-real-path mp)))))
dependent-module-names))]) (cond [(and (path? rp)
(should-follow? rp)
(cons rp acc))]
[else
acc])))
'()
dependent-module-names)])
(append paths sources))])) (append paths sources))]))
(let loop ([sources sources]) (let: loop : Void ([sources : (Listof Source) sources])
(cond (cond
[(empty? sources) [(empty? sources)
(after-last)] (after-last)]
@ -69,7 +88,7 @@
(before-first) (before-first)
(follow-dependencies sources should-follow?) (follow-dependencies sources)
(after-last)) (after-last))