compiler/PPCCompiler.st
changeset 415 f30eb7ea54cd
parent 414 0eaf09920532
child 421 7e08b31e0dae
equal deleted inserted replaced
414:0eaf09920532 415:f30eb7ea54cd
   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