--- a/compiler/PPCUniversalConfiguration.st Mon Aug 17 12:13:16 2015 +0100
+++ b/compiler/PPCUniversalConfiguration.st Mon Aug 24 15:34:14 2015 +0100
@@ -3,7 +3,7 @@
"{ NameSpace: Smalltalk }"
PPCConfiguration subclass:#PPCUniversalConfiguration
- instanceVariableNames:''
+ instanceVariableNames:'clazz'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Core'
@@ -11,18 +11,26 @@
!PPCUniversalConfiguration methodsFor:'compiling'!
-buildClass: compiler
+buildClass
| builder |
+ self assert: (clazz isKindOf: PPCClass).
+
builder := PPCClassBuilder new.
builder compiledClassName: arguments parserName.
builder compiledSuperclass: PPCompiledParser.
- builder methodDictionary: compiler methodDictionary.
- builder constants: compiler constants.
+ builder methodDictionary: clazz methodDictionary.
+ builder constants: clazz constants.
^ builder compileClass.
!
+initialize
+ super initialize.
+
+ clazz := PPCClass new.
+!
+
invokePhases
self toPPCIr.
self createTokens.
@@ -36,3 +44,28 @@
self generate.
! !
+!PPCUniversalConfiguration methodsFor:'hooks'!
+
+codeGenerator
+ ^ PPCUniversalCodeGenerator new
+ arguments: arguments
+! !
+
+!PPCUniversalConfiguration methodsFor:'phases'!
+
+generate
+ | rootMethod compiledParser |
+ arguments generate ifFalse: [ ^ self ].
+
+ rootMethod := self codeGenerator
+ arguments: arguments;
+ clazz: clazz;
+ visit: ir.
+
+ compiledParser := self buildClass.
+ compiledParser startSymbol: rootMethod methodName.
+ compiledParser := compiledParser new.
+
+ ir := compiledParser.
+! !
+