compiler/PPCUniversalConfiguration.st
changeset 524 f6f68d32de73
parent 515 b5316ef15274
child 529 439c4057517f
--- 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.
+! !
+