270 ^ parser |
270 ^ parser |
271 |
271 |
272 ! |
272 ! |
273 |
273 |
274 compileTree: compilerTree as: name parser: parser params: params |
274 compileTree: compilerTree as: name parser: parser params: params |
275 | | |
275 | | |
276 params do: [ :p | |
276 params do: [ :p | |
277 (p key = #guards) ifTrue: [ self guards: p value ]. |
277 (p key = #guards) ifTrue: [ self guards: p value ]. |
278 ]. |
278 ]. |
279 |
279 |
280 |
280 |
281 ((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) ifTrue:[ |
281 ((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) ifTrue:[ |
282 | rPackageOrganizer | |
282 | rPackageOrganizer | |
283 rPackageOrganizer := Smalltalk at: #RPackageOrganizer. |
283 rPackageOrganizer := Smalltalk at: #RPackageOrganizer. |
284 rPackageOrganizer notNil ifTrue:[ |
284 rPackageOrganizer notNil ifTrue:[ |
285 rPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
285 rPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
286 ]. |
286 ]. |
287 |
287 |
288 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
288 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
289 compiledParser ifNil: [ |
289 compiledParser ifNil: [ |
290 PPCompiledParser subclass: name |
290 PPCompiledParser subclass: name |
291 instanceVariableNames:'' |
291 instanceVariableNames:'' |
293 poolDictionaries:'' |
293 poolDictionaries:'' |
294 category:'PetitCompiler-Generated'. |
294 category:'PetitCompiler-Generated'. |
295 compiledParser := Smalltalk at: name. |
295 compiledParser := Smalltalk at: name. |
296 ] ifNotNil: [ |
296 ] ifNotNil: [ |
297 self clean: compiledParser |
297 self clean: compiledParser |
298 ]. |
298 ]. |
299 ] ifFalse: [ |
299 ] ifFalse: [ |
300 RPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
300 RPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
301 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
301 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
302 compiledParser ifNil: [ |
302 compiledParser ifNil: [ |
303 PPCompiledParser subclass: name. |
303 PPCompiledParser subclass: name. |
304 compiledParser := Smalltalk at: name. |
304 compiledParser := Smalltalk at: name. |
305 compiledParser category: 'PetitCompiler-Generated' |
305 compiledParser category: 'PetitCompiler-Generated' |
306 ] ifNotNil: [ |
306 ] ifNotNil: [ |
307 self clean: compiledParser |
307 self clean: compiledParser |
308 ]. |
308 ]. |
309 ]. |
309 ]. |
310 compiledParser constants removeAll. |
310 compiledParser constants removeAll. |
311 |
311 |
312 |
312 |
313 self startMethod: #start. |
313 self startMethod: #start. |
314 self add: '^ '. |
314 self add: '^ '. |
315 self callOnLine: (compilerTree compileWith: self). |
315 self callOnLine: (compilerTree compileWith: self). |
316 self stopMethod. |
316 self stopMethod. |
317 |
317 |
318 self installMethodsAndVariables: compiledParser. |
318 self installVariablesAndMethods. |
319 |
319 |
320 compiledParser referringParser: parser. |
320 compiledParser referringParser: parser. |
321 ^ compiledParser |
321 ^ compiledParser |
|
322 |
|
323 "Modified: / 05-11-2014 / 23:17:02 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
322 ! |
324 ! |
323 |
325 |
324 copy: parser |
326 copy: parser |
325 ^ parser transform: [ :p | p copy ]. |
327 ^ parser transform: [ :p | p copy ]. |
326 ! |
328 ! |
330 class compileSilently: method code classified: 'generated'. |
332 class compileSilently: method code classified: 'generated'. |
331 ] |
333 ] |
332 ! |
334 ! |
333 |
335 |
334 installVariables: class |
336 installVariables: class |
335 | string | |
337 | string | |
336 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
338 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
337 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>" |
338 ! |
342 ! |
339 |
343 |
340 installVariablesAndMethods |
344 installVariablesAndMethods |
341 "Updates the class and compile generated code" |
345 "Updates the class and compile generated code" |
342 |
346 |