270 ^ parser |
271 ^ parser |
271 |
272 |
272 ! |
273 ! |
273 |
274 |
274 compileTree: compilerTree as: name parser: parser params: params |
275 compileTree: compilerTree as: name parser: parser params: params |
275 | | |
276 | rPackageOrganizer | |
276 params do: [ :p | |
277 |
277 (p key = #guards) ifTrue: [ self guards: p value ]. |
278 params do: [ :p | |
278 ]. |
279 (p key = #guards) ifTrue: [ self guards: p value ]. |
279 |
280 ]. |
280 " |
281 |
281 To create a new Package so that a new classes are not in PetitCompiler package. |
282 " |
282 TODO JK: This is HACK, needs some more interoperable approach |
283 To create a new Package so that a new classes are not in PetitCompiler package. |
283 " |
284 TODO JK: This is HACK, needs some more interoperable approach |
284 RPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
285 " |
285 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
286 rPackageOrganizer := Smalltalk at: #RPackageOrganizer. |
286 compiledParser ifNil: [ |
287 rPackageOrganizer notNil ifTrue:[ |
287 PPCompiledParser subclass: name. |
288 rPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
288 compiledParser := Smalltalk at: name. |
289 ]. |
289 compiledParser category: 'PetitCompiler-Generated' |
290 |
290 ] ifNotNil: [ |
291 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
291 self clean: compiledParser |
292 compiledParser ifNil: [ |
292 ]. |
293 PPCompiledParser subclass: name |
293 compiledParser constants removeAll. |
294 instanceVariableNames:'' |
294 |
295 classVariableNames:'' |
295 |
296 poolDictionaries:'' |
296 |
297 category:'PetitCompiler-Generated'. |
297 self startMethod: #start. |
298 compiledParser := Smalltalk at: name. |
298 self add: '^ '. |
299 ] ifNotNil: [ |
299 self callOnLine: (compilerTree compileWith: self). |
300 self clean: compiledParser |
300 self stopMethod. |
301 ]. |
301 |
302 compiledParser constants removeAll. |
302 self installMethodsAndVariables: compiledParser. |
303 |
303 |
304 |
304 compiledParser referringParser: parser. |
305 |
305 ^ compiledParser |
306 self startMethod: #start. |
|
307 self add: '^ '. |
|
308 self callOnLine: (compilerTree compileWith: self). |
|
309 self stopMethod. |
|
310 |
|
311 self installMethodsAndVariables: compiledParser. |
|
312 |
|
313 compiledParser referringParser: parser. |
|
314 ^ compiledParser |
|
315 |
|
316 "Modified: / 26-10-2014 / 22:04:16 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
306 ! |
317 ! |
307 |
318 |
308 copy: parser |
319 copy: parser |
309 ^ parser transform: [ :p | p copy ]. |
320 ^ parser transform: [ :p | p copy ]. |
310 ! |
321 ! |
321 self installMethods: class. |
332 self installMethods: class. |
322 |
333 |
323 ! |
334 ! |
324 |
335 |
325 installVariables: class |
336 installVariables: class |
326 | string | |
337 | string | |
327 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
338 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
328 PPCompiledParser subclass: class name instanceVariableNames: string classVariableNames: '' category: 'PetitCompiler-Generated'. |
339 PPCompiledParser subclass: class name instanceVariableNames: string classVariableNames: '' poolDictionaries:'' category: 'PetitCompiler-Generated'. |
|
340 |
|
341 "Modified: / 26-10-2014 / 22:01:45 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
329 ! |
342 ! |
330 |
343 |
331 optimize: parser params: params |
344 optimize: parser params: params |
332 | retval | |
345 | retval | |
333 retval := parser optimizeTree: params. |
346 retval := parser optimizeTree: params. |