1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Diagnostics ;
3
4
using System . IO ;
4
5
using System . Linq ;
5
6
using KontrolSystem . Parsing ;
@@ -54,10 +55,12 @@ public Context AddFile(string baseDir, string file) {
54
55
return context ;
55
56
}
56
57
57
- public Context AddDirectory ( string baseDir ) {
58
+ public Context AddDirectory ( string baseDir , ITO2Logger ? logger = null ) {
58
59
var context = new Context ( this ) ;
59
60
var declaredModules = new List < DeclaredKontrolModule > ( ) ;
60
-
61
+ var stopwatch = new Stopwatch ( ) ;
62
+
63
+ stopwatch . Start ( ) ;
61
64
foreach ( var fileName in Directory . GetFiles ( baseDir , "*.to2" , SearchOption . AllDirectories ) ) {
62
65
if ( ! fileName . EndsWith ( ".to2" ) ) continue ;
63
66
@@ -68,36 +71,53 @@ public Context AddDirectory(string baseDir) {
68
71
declaredModules . Add ( module ) ;
69
72
context . registry . RegisterModule ( module ) ;
70
73
}
74
+ logger ? . Info ( $ "Phase1: { stopwatch . Elapsed } ") ;
71
75
72
76
foreach ( var declared in declaredModules )
73
77
// ... so that types can be imported by other modules
74
78
ModuleGenerator . ImportTypes ( declared ) ;
75
79
80
+ logger ? . Info ( $ "Phase2: { stopwatch . Elapsed } ") ;
81
+
76
82
foreach ( var declared in declaredModules ) ModuleGenerator . DeclareConstants ( declared ) ;
77
83
84
+ logger ? . Info ( $ "Phase3: { stopwatch . Elapsed } ") ;
85
+
78
86
foreach ( var declared in declaredModules ) ModuleGenerator . ImportConstants ( declared ) ;
79
87
88
+ logger ? . Info ( $ "Phase4: { stopwatch . Elapsed } ") ;
89
+
80
90
foreach ( var declared in declaredModules )
81
91
// ... so that function can be declared (potentially using imported types as arguments or return)
82
92
ModuleGenerator . DeclareFunctions ( declared ) ;
83
93
94
+ logger ? . Info ( $ "Phase5: { stopwatch . Elapsed } ") ;
95
+
84
96
foreach ( var declared in declaredModules )
85
97
// ... so that other modules may import these functions
86
98
ModuleGenerator . ImportFunctions ( declared ) ;
87
99
100
+ logger ? . Info ( $ "Phase6: { stopwatch . Elapsed } ") ;
101
+
88
102
foreach ( var declared in declaredModules ) ModuleGenerator . CompileStructs ( declared ) ;
89
103
104
+ logger ? . Info ( $ "Phase6: { stopwatch . Elapsed } ") ;
105
+
90
106
foreach ( var declared in declaredModules )
91
107
// ... so that we should now be able to infer all types
92
108
ModuleGenerator . VerifyFunctions ( declared ) ;
93
109
110
+ logger ? . Info ( $ "Phase7: { stopwatch . Elapsed } ") ;
111
+
94
112
foreach ( var declared in declaredModules ) {
95
113
// ... and eventually emit the code and bake the modules
96
114
var compiled = ModuleGenerator . CompileModule ( declared ) ;
97
115
98
116
context . registry . RegisterModule ( compiled ) ;
99
117
}
100
118
119
+ logger ? . Info ( $ "Finalized: { stopwatch . Elapsed } ") ;
120
+
101
121
return context ;
102
122
}
103
123
0 commit comments