131 ! ! |
128 ! ! |
132 |
129 |
133 !PPCConfiguration methodsFor:'debugging'! |
130 !PPCConfiguration methodsFor:'debugging'! |
134 |
131 |
135 copy: somethingTransformable |
132 copy: somethingTransformable |
|
133 self deprecated: 'copy on your own, or whatever, but dont use me'. |
136 ^ somethingTransformable transform: [ :e | e copy ] |
134 ^ somethingTransformable transform: [ :e | e copy ] |
137 ! |
135 ! |
138 |
136 |
|
137 copyTree: somethingTransformable |
|
138 ^ somethingTransformable transform: [ :e | e copy ] |
|
139 ! |
|
140 |
139 remember: key |
141 remember: key |
|
142 self deprecated: 'use remember:as:'. |
|
143 |
140 self arguments debug ifTrue: [ |
144 self arguments debug ifTrue: [ |
141 history add: key -> (self copy: ir). |
145 history add: key -> (self copy: ir). |
142 ] |
146 ] |
143 ! ! |
147 ! |
144 |
148 |
145 !PPCConfiguration methodsFor:'hooks'! |
149 remember: value as: key |
146 |
150 self arguments debug ifTrue: [ |
147 codeCompiler |
151 history add: key -> value. |
148 ^ PPCCodeGen on: arguments |
152 ] |
149 ! |
|
150 |
|
151 codeCompilerOn: args |
|
152 ^ PPCCodeGen on: args |
|
153 ! |
|
154 |
|
155 codeGeneratorVisitorOn: compiler |
|
156 ^ arguments codeGenerator on: compiler |
|
157 ! ! |
153 ! ! |
158 |
154 |
159 !PPCConfiguration methodsFor:'initialization'! |
155 !PPCConfiguration methodsFor:'initialization'! |
160 |
156 |
161 initialize |
157 initialize |
162 history := OrderedCollection new |
158 history := OrderedCollection new. |
|
159 arguments := PPCArguments default. |
163 ! ! |
160 ! ! |
164 |
161 |
165 !PPCConfiguration methodsFor:'phases'! |
162 !PPCConfiguration methodsFor:'phases'! |
166 |
163 |
167 cacheFirstFollow |
164 cacheFirstFollow |
181 arguments recognizingComponents ifFalse: [ ^ self ] . |
178 arguments recognizingComponents ifFalse: [ ^ self ] . |
182 |
179 |
183 ir := PPCRecognizerComponentDetector new |
180 ir := PPCRecognizerComponentDetector new |
184 arguments: arguments; |
181 arguments: arguments; |
185 visit: ir. |
182 visit: ir. |
186 self remember: #recognizingComponents |
183 |
|
184 self remember: (self copyTree: ir) as: #recognizingComponents |
187 ! |
185 ! |
188 |
186 |
189 createTokens |
187 createTokens |
190 arguments detectTokens ifFalse: [ ^ self ] . |
188 arguments detectTokens ifFalse: [ ^ self ] . |
191 |
189 |
192 ir := PPCTokenDetector new |
190 ir := PPCTokenDetector new |
193 arguments: arguments; |
191 arguments: arguments; |
194 visit: ir. |
192 visit: ir. |
195 self remember: #createTokens |
193 |
196 ! |
194 self remember: (self copyTree: ir) as: #createTokens |
197 |
|
198 generate |
|
199 | compiler rootMethod compiledParser | |
|
200 arguments generate ifFalse: [ ^ self ]. |
|
201 |
|
202 compiler := self codeCompiler. |
|
203 |
|
204 rootMethod := (self codeGeneratorVisitorOn: compiler) |
|
205 arguments: arguments; |
|
206 visit: ir. |
|
207 |
|
208 compiledParser := self buildClass: compiler. |
|
209 compiledParser startSymbol: rootMethod methodName. |
|
210 compiledParser := compiledParser new. |
|
211 |
|
212 ir := compiledParser. |
|
213 ! |
195 ! |
214 |
196 |
215 inline |
197 inline |
216 arguments inline ifFalse: [ ^ self ]. |
198 arguments inline ifFalse: [ ^ self ]. |
217 |
199 |
218 ir := PPCInliningVisitor new |
200 ir := PPCInliningVisitor new |
219 arguments: arguments; |
201 arguments: arguments; |
220 visit: ir. |
202 visit: ir. |
221 self remember: #inline. |
203 |
|
204 self remember: (self copyTree: ir) as: #inline. |
222 ! |
205 ! |
223 |
206 |
224 merge |
207 merge |
225 "Merge equivalent nodes under one object with single identity" |
208 "Merge equivalent nodes under one object with single identity" |
226 arguments merge ifFalse: [ ^ self ]. |
209 arguments merge ifFalse: [ ^ self ]. |
227 |
210 |
228 ir := PPCMergingVisitor new |
211 ir := PPCMergingVisitor new |
229 arguments: arguments; |
212 arguments: arguments; |
230 visit: ir. |
213 visit: ir. |
231 self remember: #merge |
214 |
|
215 self remember: (self copyTree: ir) as: #merge |
232 ! |
216 ! |
233 |
217 |
234 specialize |
218 specialize |
235 arguments specialize ifFalse: [ ^ self ]. |
219 arguments specialize ifFalse: [ ^ self ]. |
236 |
220 |
241 e.g. $a astar can be represented by PPCCharacterStarNode |
225 e.g. $a astar can be represented by PPCCharacterStarNode |
242 " |
226 " |
243 ir := (PPCSpecializingVisitor new |
227 ir := (PPCSpecializingVisitor new |
244 arguments: arguments; |
228 arguments: arguments; |
245 visit: ir). |
229 visit: ir). |
246 self remember: #specialize |
230 |
|
231 self remember: (self copyTree: ir) as: #specialize |
247 ! |
232 ! |
248 |
233 |
249 toPPCIr |
234 toPPCIr |
250 "Creates a PPCNodes from a PPParser" |
235 "Creates a PPCNodes from a PPParser" |
251 ir := ir asCompilerTree. |
236 ir := ir asCompilerTree. |
252 self remember: #ppcNodes |
237 |
|
238 self remember: (self copyTree: ir) as: #ppcNodes |
253 ! ! |
239 ! ! |
254 |
240 |
255 !PPCConfiguration methodsFor:'reporting'! |
241 !PPCConfiguration methodsFor:'reporting'! |
256 |
242 |
257 reportTime: timeInMs |
243 reportTime: timeInMs |