forked from area9innovation/flow9
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fctypeenv.flow
78 lines (61 loc) · 2.14 KB
/
fctypeenv.flow
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
import tools/flowc/flowcacc;
import tools/flowc/typechecker/type_expect;
import tools/flowc/dependencies;
import tools/flowc/typechecker2/gsubtype_graph_type;
export {
// The typing environment for the entire compilation process
FcTypeEnv(
global : FcTypeEnvGlobal,
program : FcTypeEnvProgram,
local : FcTypeEnvLocal
);
// A global environment for a batch compilation of several programs
FcTypeEnvGlobal(
moduleCache : ref Tree<string, FcLoaded>
);
// A single program typing environment
FcTypeEnvProgram(
acc : FlowcAcc,
// The resolved type of functions and variables
types : Tree<string, FcType>,
// Function that prings an error, and increases the error count
printError : (FcError) -> void,
// Count of type errors
errors : ref int,
// Cache for fast resolving which structs constitute a union
union2typenamesCache : ref Tree<string, [FcTypeName]>,
// A graph of subtypes
subtypeGraph : GSubtypeGraph
);
// Typing environment for a single module
FcTypeEnvLocal(
// Requirements for types.
expects : ref List<FcTypeExpect>,
// Final checks after type checking
checks : ref List<FcTypeCheck>,
// The resolved type of tyvars
tyvars : ref Tree<int, FcType>,
// The current type of type parameters
typars : ref Tree<string, FcTypeVar>,
// The local stack variables info, used for duplication checking
varinfo : Tree<string, FcInfo>,
// Which expectations are collected during debug?
debugExpects : ref Set<FcTypeExpect>,
// Are we debug typing?
debugTyping : ref int,
// Indentation for debug
debugIndentation : ref string,
);
initFcTypeEnvLocal() -> FcTypeEnvLocal {
FcTypeEnvLocal(ref makeList(), ref makeList(), ref makeTree(), ref makeTree(), makeTree(), ref makeSet(), ref 0, ref "")
}
fcLoadFromCache(env : FcTypeEnvGlobal, name : string) -> Maybe<FcLoaded> {
lookupTree(^(env.moduleCache), name)
}
fcRemoveFromCache(env : FcTypeEnvGlobal, name : string) -> void {
env.moduleCache := removeFromTree(^(env.moduleCache), name)
}
fcAddToCache(env : FcTypeEnvGlobal, name : string, loaded : FcLoaded) -> void {
env.moduleCache := setTree(^(env.moduleCache), name, loaded)
}
}