131 } asOrderedCollection. |
111 } asOrderedCollection. |
132 |
112 |
133 "Created: / 04-09-2015 / 15:56:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
113 "Created: / 04-09-2015 / 15:56:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
134 ! ! |
114 ! ! |
135 |
115 |
|
116 !PPCConfiguration methodsFor:'adding / removing passes'! |
|
117 |
|
118 removePass: pass |
|
119 | index | |
|
120 |
|
121 self initializePassesIfNotAlready. |
|
122 [ |
|
123 index := passes indexOf: pass. |
|
124 index ~~ 0 |
|
125 ] whileTrue:[ |
|
126 passes removeAtIndex: index |
|
127 ]. |
|
128 |
|
129 "Created: / 04-09-2015 / 11:24:45 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
130 "Modified: / 04-09-2015 / 16:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
131 ! ! |
|
132 |
136 !PPCConfiguration methodsFor:'compiling'! |
133 !PPCConfiguration methodsFor:'compiling'! |
|
134 |
|
135 compile: aPPParser |
|
136 | time | |
|
137 self input: aPPParser. |
|
138 |
|
139 time := [ self compile ] timeToRun. |
|
140 ((Smalltalk respondsTo:#isSmalltalkX) and:[Smalltalk isSmalltalkX]) ifFalse:[ |
|
141 "Assume Pharo" |
|
142 time := time asMilliSeconds. |
|
143 ]. |
|
144 self reportTime: time. |
|
145 |
|
146 ^ ir |
|
147 |
|
148 "Modified: / 17-08-2015 / 13:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
149 ! ! |
|
150 |
|
151 !PPCConfiguration methodsFor:'initialization'! |
|
152 |
|
153 initialize |
|
154 history := OrderedCollection new. |
|
155 context := PPCCompilationContext new. |
|
156 |
|
157 "Modified: / 04-09-2015 / 15:56:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
158 ! |
|
159 |
|
160 initializePassesIfNotAlready |
|
161 passes isNil ifTrue:[ |
|
162 context options tokenize ifTrue:[ |
|
163 passes := self defaultPassesForTokenizingParser |
|
164 ] ifFalse:[ |
|
165 passes := self defaultPassesForUniversalParser |
|
166 ]. |
|
167 ]. |
|
168 |
|
169 "Created: / 04-09-2015 / 16:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
170 ! ! |
|
171 |
|
172 !PPCConfiguration methodsFor:'private'! |
137 |
173 |
138 buildClass: clazz |
174 buildClass: clazz |
139 | builder | |
175 | builder | |
140 builder := PPCClassBuilder new. |
176 builder := PPCClassBuilder new. |
141 |
177 |
145 builder constants: clazz constants. |
181 builder constants: clazz constants. |
146 |
182 |
147 ^ builder compileClass. |
183 ^ builder compileClass. |
148 ! |
184 ! |
149 |
185 |
150 compile: whatever |
186 compile |
151 | time | |
187 self runPasses. |
152 self input: whatever. |
188 self generateScanner. |
153 |
189 self generateParser. |
154 time := [ self invokePhases ] timeToRun. |
190 |
155 ((Smalltalk respondsTo:#isSmalltalkX) and:[Smalltalk isSmalltalkX]) ifFalse:[ |
191 "Modified: / 07-09-2015 / 07:53:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
156 "Assume Pharo" |
192 ! |
157 time := time asMilliSeconds. |
193 |
158 ]. |
194 copyTree: somethingTransformable |
159 self reportTime: time. |
195 ^ somethingTransformable transform: [ :e | e copy ] |
160 |
|
161 ^ ir |
|
162 |
|
163 "Modified: / 17-08-2015 / 13:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
164 ! |
196 ! |
165 |
197 |
166 generateParser |
198 generateParser |
167 | parserClass parserSuper rootMethod | |
199 | parserClass parserSuper rootMethod | |
168 |
200 |
210 |
242 |
211 "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany" |
243 "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany" |
212 "Modified: / 04-09-2015 / 15:33:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
244 "Modified: / 04-09-2015 / 15:33:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
213 ! |
245 ! |
214 |
246 |
215 invokePhases |
247 input: aPPParser |
216 self initializePassesIfNotAlready. |
248 ir := aPPParser asCompilerTree. |
217 |
249 self remember: (self copyTree: ir) as: #input |
218 self runPasses: passes. |
250 |
219 |
251 "Modified (format): / 29-08-2015 / 07:18:02 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
220 self generateScanner. |
252 ! |
221 self generateParser. |
253 |
222 |
254 ir |
223 "Modified: / 04-09-2015 / 16:22:25 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
255 ^ ir |
224 ! ! |
256 ! |
225 |
257 |
226 !PPCConfiguration methodsFor:'debugging'! |
258 ir: whatever |
227 |
259 ir := whatever |
228 copy: somethingTransformable |
|
229 self deprecated: 'copy on your own, or whatever, but dont use me'. |
|
230 ^ somethingTransformable transform: [ :e | e copy ] |
|
231 ! |
|
232 |
|
233 copyTree: somethingTransformable |
|
234 ^ somethingTransformable transform: [ :e | e copy ] |
|
235 ! |
|
236 |
|
237 remember: key |
|
238 self deprecated: 'use remember:as:'. |
|
239 |
|
240 self options debug ifTrue: [ |
|
241 history add: key -> (self copy: ir). |
|
242 ] |
|
243 ! |
260 ! |
244 |
261 |
245 remember: value as: key |
262 remember: value as: key |
246 context options debug ifTrue: [ |
263 context options debug ifTrue: [ |
247 history add: key -> value. |
264 history add: key -> value. |
248 ] |
265 ] |
249 |
266 |
250 "Modified: / 28-08-2015 / 14:14:33 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
267 "Modified: / 28-08-2015 / 14:14:33 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
251 ! ! |
268 ! |
252 |
|
253 !PPCConfiguration methodsFor:'initialization'! |
|
254 |
|
255 initialize |
|
256 history := OrderedCollection new. |
|
257 context := PPCCompilationContext new. |
|
258 |
|
259 "Modified: / 04-09-2015 / 15:56:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
260 ! |
|
261 |
|
262 initializePassesIfNotAlready |
|
263 passes isNil ifTrue:[ |
|
264 context options tokenize ifTrue:[ |
|
265 passes := self defaultPassesForTokenizingParser |
|
266 ] ifFalse:[ |
|
267 passes := self defaultPassesForUniversalParser |
|
268 ]. |
|
269 ]. |
|
270 |
|
271 "Created: / 04-09-2015 / 16:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
272 ! ! |
|
273 |
|
274 !PPCConfiguration methodsFor:'reporting'! |
|
275 |
269 |
276 reportTime: timeInMs |
270 reportTime: timeInMs |
277 context options profile ifTrue: [ |
271 context options profile ifTrue: [ |
278 Transcript show: 'Time to compile: ', timeInMs asString, ' ms'; cr. |
272 Transcript show: 'Time to compile: '; show: timeInMs asString; show: ' ms'; cr. |
279 ] |
273 ] |
280 |
274 |
281 "Modified: / 26-08-2015 / 16:35:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
275 "Modified: / 07-09-2015 / 07:55:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
276 ! |
|
277 |
|
278 runPasses |
|
279 self initializePassesIfNotAlready. |
|
280 passes do:[:each | self runPass: each ] |
|
281 |
|
282 "Created: / 07-09-2015 / 07:53:05 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
282 ! ! |
283 ! ! |
283 |
284 |
284 !PPCConfiguration methodsFor:'running'! |
285 !PPCConfiguration methodsFor:'running'! |
285 |
|
286 removePass: pass |
|
287 | index | |
|
288 |
|
289 self initializePassesIfNotAlready. |
|
290 [ |
|
291 index := passes indexOf: pass. |
|
292 index ~~ 0 |
|
293 ] whileTrue:[ |
|
294 passes removeAtIndex: index |
|
295 ]. |
|
296 |
|
297 "Created: / 04-09-2015 / 11:24:45 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
298 "Modified: / 04-09-2015 / 16:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
299 ! |
|
300 |
286 |
301 runPass: pass |
287 runPass: pass |
302 | p | |
288 | p | |
303 |
289 |
304 p := pass asPPCPass. |
290 p := pass asPPCPass. |
305 ir := p run: ir in: context. |
291 ir := p run: ir in: context. |
306 self remember:(self copyTree:ir) as:p class name |
292 self remember:(self copyTree:ir) as:p class name |
307 |
293 |
308 "Created: / 26-08-2015 / 22:35:39 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
294 "Created: / 26-08-2015 / 22:35:39 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
309 "Modified: / 29-08-2015 / 07:16:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
295 "Modified: / 29-08-2015 / 07:16:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
310 ! |
296 ! ! |
311 |
297 |
312 runPasses: aCollection |
298 !PPCConfiguration class methodsFor:'documentation'! |
313 aCollection do:[:each | self runPass: each ] |
299 |
314 |
300 version_HG |
315 "Created: / 04-09-2015 / 11:23:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
301 |
316 ! ! |
302 ^ '$Changeset: <not expanded> $' |
317 |
303 ! ! |
|
304 |