-
Notifications
You must be signed in to change notification settings - Fork 30
/
make-structs.rkt
82 lines (63 loc) · 2.11 KB
/
make-structs.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#lang typed/racket/base
(require "../compiler/il-structs.rkt"
"../compiler/bootstrapped-primitives.rkt"
"../compiler/expression-structs.rkt"
"get-dependencies.rkt"
"../promise.rkt")
(provide (all-defined-out))
(define-type Source (U StatementsSource
MainModuleSource
ModuleSource
SexpSource
UninterpretedSource
))
(define-struct: StatementsSource ([stmts : (Listof Statement)])
#:transparent)
(define-struct: MainModuleSource ([path : Path])
#:transparent)
(define-struct: ModuleSource ([path : Path])
#:transparent)
(define-struct: SexpSource ([sexp : Any])
#:transparent)
(define-struct: UninterpretedSource ([datum : String]
[neighbors : (Listof Source)])
#:transparent)
(: source-name (Source -> String))
(define (source-name a-source)
(cond
[(StatementsSource? a-source)
"<StatementsSource>"]
[(UninterpretedSource? a-source)
"<UninterpretedSource>"]
[(MainModuleSource? a-source)
(format "<MainModuleSource ~a>" (MainModuleSource-path a-source))]
[(SexpSource? a-source)
"<SexpSource>"]
[(ModuleSource? a-source)
(format "<ModuleSource ~a>"
(ModuleSource-path a-source))]))
(define-struct: Configuration
([wrap-source : (Source -> Source)]
[should-follow-children? : (Source -> Boolean)]
[on-source : (Source
(U Expression #f)
(MyPromise (Listof Statement))
-> Void)]
[after-source : (Source -> Void)]
[after-last : (-> Void)])
#:mutable)
(define debug-configuration
(make-Configuration
(lambda (src) src)
(lambda (src) #t)
(lambda (src ast stmt)
(when (and ast (expression-module-path ast))
(printf "debug build configuration: visiting ~s\n"
(expression-module-path ast))))
(lambda (src)
(void))
(lambda ()
(void))))
(: only-bootstrapped-code : (MyPromise StatementsSource))
(define only-bootstrapped-code
(my-delay (make-StatementsSource (get-bootstrapping-code))))