compiler/PPCConfiguration.st
changeset 536 548996aca274
parent 535 a8feb0f47574
equal deleted inserted replaced
535:a8feb0f47574 536:548996aca274
     7 	classVariableNames:''
     7 	classVariableNames:''
     8 	poolDictionaries:''
     8 	poolDictionaries:''
     9 	category:'PetitCompiler-Core'
     9 	category:'PetitCompiler-Core'
    10 !
    10 !
    11 
    11 
       
    12 
    12 !PPCConfiguration class methodsFor:'as yet unclassified'!
    13 !PPCConfiguration class methodsFor:'as yet unclassified'!
    13 
    14 
    14 default
    15 default
    15     ^ self universal
    16     ^ self universal
    16 !
    17 !
    47 
    48 
    48 !PPCConfiguration methodsFor:'accessing'!
    49 !PPCConfiguration methodsFor:'accessing'!
    49 
    50 
    50 context
    51 context
    51     ^ context
    52     ^ context
    52 !
       
    53 
       
    54 defaultArguments
       
    55     ^ PPCCompilationOptions default
       
    56 
       
    57     "Modified: / 24-08-2015 / 23:39:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    58 !
       
    59 
       
    60 input: aPPParser
       
    61     ir := aPPParser asCompilerTree.    
       
    62     self remember: (self copyTree: ir) as: #input
       
    63 
       
    64     "Modified (format): / 29-08-2015 / 07:18:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    65 !
       
    66 
       
    67 ir
       
    68     ^ ir
       
    69 !
       
    70 
       
    71 ir: whatever
       
    72     ir := whatever
       
    73 !
    53 !
    74 
    54 
    75 options
    55 options
    76     ^ context options
    56     ^ context options
    77 
    57 
   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