78 cleanConstants: class |
78 cleanConstants: class |
79 class constants removeAll. |
79 class constants removeAll. |
80 ! |
80 ! |
81 |
81 |
82 cleanGeneratedMethods: class |
82 cleanGeneratedMethods: class |
83 class methodsDo: [ :mthd | |
83 ((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) ifTrue:[ |
84 mthd category = #generated ifTrue:[ |
84 class methodsDo: [ :mthd | |
85 class removeSelector: mthd selector. |
85 mthd category = #generated ifTrue:[ |
86 ] |
86 class removeSelector: mthd selector. |
87 ] |
87 ] |
88 |
88 ] |
89 "Modified: / 26-10-2014 / 22:07:26 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
89 ] ifFalse: [ |
|
90 (class allSelectorsInProtocol: #generated) do: [ :selector | |
|
91 class removeSelectorSilently: selector ]. |
|
92 ] |
90 ! |
93 ! |
91 |
94 |
92 cleanInstVars: class |
95 cleanInstVars: class |
93 class class instanceVariableNames: ''. |
96 class class instanceVariableNames: ''. |
94 ! |
97 ! |
235 idFor: object prefixed: prefix |
238 idFor: object prefixed: prefix |
236 ^ self idFor: object prefixed: prefix effect: #none |
239 ^ self idFor: object prefixed: prefix effect: #none |
237 ! |
240 ! |
238 |
241 |
239 idFor: object prefixed: prefix effect: effect |
242 idFor: object prefixed: prefix effect: effect |
240 | body suffix | |
243 ^ self idFor: object prefixed: prefix suffixed: '' effect: effect. |
241 ^ ids at: object ifAbsentPut: [ |
|
242 suffix := self fastMode ifTrue: [ '_fast' ] ifFalse: [ '' ]. |
|
243 ((object isKindOf: PPCNode) and: [object name isNotNil]) ifTrue: [ |
|
244 (object name, suffix) asSymbol |
|
245 ] ifFalse: [ |
|
246 body := ids size asString. |
|
247 (prefix asString, '_', body, suffix) asSymbol |
|
248 ] |
|
249 ] |
|
250 ! |
244 ! |
251 |
245 |
252 idFor: object prefixed: prefix suffixed: suffix effect: effect |
246 idFor: object prefixed: prefix suffixed: suffix effect: effect |
253 | body | |
247 | body | |
254 ^ ids at: object ifAbsentPut: [ |
248 ^ ids at: object ifAbsentPut: [ |
276 ^ parser |
270 ^ parser |
277 |
271 |
278 ! |
272 ! |
279 |
273 |
280 compileTree: compilerTree as: name parser: parser params: params |
274 compileTree: compilerTree as: name parser: parser params: params |
281 | rPackageOrganizer | |
275 | | |
282 |
276 params do: [ :p | |
283 params do: [ :p | |
277 (p key = #guards) ifTrue: [ self guards: p value ]. |
284 (p key = #guards) ifTrue: [ self guards: p value ]. |
278 ]. |
285 ]. |
279 |
286 |
280 |
287 " |
281 ((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) ifTrue:[ |
288 To create a new Package so that a new classes are not in PetitCompiler package. |
282 | rPackageOrganizer | |
289 TODO JK: This is HACK, needs some more interoperable approach |
283 rPackageOrganizer := Smalltalk at: #RPackageOrganizer. |
290 " |
284 rPackageOrganizer notNil ifTrue:[ |
291 rPackageOrganizer := Smalltalk at: #RPackageOrganizer. |
285 rPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
292 rPackageOrganizer notNil ifTrue:[ |
286 ]. |
293 rPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
287 |
294 ]. |
288 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
295 |
289 compiledParser ifNil: [ |
296 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
|
297 compiledParser ifNil: [ |
|
298 PPCompiledParser subclass: name |
290 PPCompiledParser subclass: name |
299 instanceVariableNames:'' |
291 instanceVariableNames:'' |
300 classVariableNames:'' |
292 classVariableNames:'' |
301 poolDictionaries:'' |
293 poolDictionaries:'' |
302 category:'PetitCompiler-Generated'. |
294 category:'PetitCompiler-Generated'. |
303 compiledParser := Smalltalk at: name. |
295 compiledParser := Smalltalk at: name. |
304 ] ifNotNil: [ |
296 ] ifNotNil: [ |
305 self clean: compiledParser |
297 self clean: compiledParser |
306 ]. |
298 ]. |
307 compiledParser constants removeAll. |
299 ] ifFalse: [ |
308 |
300 RPackageOrganizer default registerPackageNamed: 'PetitCompiler-Generated'. |
309 |
301 compiledParser := (Smalltalk at: name ifAbsent: [ nil ]). |
310 |
302 compiledParser ifNil: [ |
311 self startMethod: #start. |
303 PPCompiledParser subclass: name. |
312 self add: '^ '. |
304 compiledParser := Smalltalk at: name. |
313 self callOnLine: (compilerTree compileWith: self). |
305 compiledParser category: 'PetitCompiler-Generated' |
314 self stopMethod. |
306 ] ifNotNil: [ |
315 |
307 self clean: compiledParser |
316 self installVariablesAndMethods. |
308 ]. |
317 |
309 ]. |
318 compiledParser referringParser: parser. |
310 compiledParser constants removeAll. |
319 ^ compiledParser |
311 |
320 |
312 |
321 "Modified: / 30-10-2014 / 23:10:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
313 self startMethod: #start. |
|
314 self add: '^ '. |
|
315 self callOnLine: (compilerTree compileWith: self). |
|
316 self stopMethod. |
|
317 |
|
318 self installMethodsAndVariables: compiledParser. |
|
319 |
|
320 compiledParser referringParser: parser. |
|
321 ^ compiledParser |
322 ! |
322 ! |
323 |
323 |
324 copy: parser |
324 copy: parser |
325 ^ parser transform: [ :p | p copy ]. |
325 ^ parser transform: [ :p | p copy ]. |
326 ! |
326 ! |
330 class compileSilently: method code classified: 'generated'. |
330 class compileSilently: method code classified: 'generated'. |
331 ] |
331 ] |
332 ! |
332 ! |
333 |
333 |
334 installVariables: class |
334 installVariables: class |
335 | string | |
335 | string | |
336 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
336 string := class constants keys inject: '' into: [:r :e | r, ' ', e ]. |
337 PPCompiledParser subclass: class name instanceVariableNames: string classVariableNames: '' poolDictionaries:'' category: 'PetitCompiler-Generated'. |
337 PPCompiledParser subclass: class name instanceVariableNames: string classVariableNames: '' category: 'PetitCompiler-Generated'. |
338 |
|
339 "Modified: / 26-10-2014 / 22:01:45 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
340 ! |
338 ! |
341 |
339 |
342 installVariablesAndMethods |
340 installVariablesAndMethods |
343 "Updates the class and compile generated code" |
341 "Updates the class and compile generated code" |
344 |
342 |