PPCConfiguration refactoring: [6/10]: use #runPass: instead of self-sends.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 29 Aug 2015 07:56:14 +0100
changeset 534 a949c4fe44df
parent 533 666372dbe307
child 535 a8feb0f47574
PPCConfiguration refactoring: [6/10]: use #runPass: instead of self-sends. ...in PPCConfiguration>>invokePhases. This is a preparation for removing #invokePhases completely and configuring the compilation via list of phases.
compiler/Make.proto
compiler/Make.spec
compiler/PEGFsaGenerator.st
compiler/PEGFsaStateInfo.st
compiler/PPCCacheFirstFollowPass.st
compiler/PPCCheckingVisitor.st
compiler/PPCCodeGenerator.st
compiler/PPCCompilationContext.st
compiler/PPCCompilationError.st
compiler/PPCCompilationOptions.st
compiler/PPCConfiguration.st
compiler/PPCDeterministicChoiceNode.st
compiler/PPCFSAVisitor.st
compiler/PPCInliningVisitor.st
compiler/PPCNode.st
compiler/PPCNodeVisitor.st
compiler/PPCPass.st
compiler/PPCPassVisitor.st
compiler/PPCPluggableConfiguration.st
compiler/PPCRewritingVisitor.st
compiler/PPCScannerCodeGenerator.st
compiler/PPCStarAnyNode.st
compiler/PPCTokenCodeGenerator.st
compiler/PPCTokenizingConfiguration.st
compiler/PPCUniversalConfiguration.st
compiler/abbrev.stc
compiler/bc.mak
compiler/benchmarks/Make.proto
compiler/benchmarks/PPCSmalltalkNoopParser.st
compiler/benchmarks/abbrev.stc
compiler/benchmarks/bc.mak
compiler/benchmarks/stx_goodies_petitparser_compiler_benchmarks.st
compiler/extensions.st
compiler/libInit.cc
compiler/stx_goodies_petitparser_compiler.st
compiler/tests/FooScannerTest.st
compiler/tests/PEGFsaScannerIntegrationTest.st
compiler/tests/PEGFsaSequenceDeterminizationTest.st
compiler/tests/PPCCodeGeneratorTest.st
compiler/tests/PPCDistinctScannerTest.st
compiler/tests/PPCLTokenizingOptimizationTest.st
compiler/tests/PPCNodeFirstFollowNextTests.st
compiler/tests/PPCNodeTest.st
compiler/tests/PPCOptimizeChoicesTest.st
compiler/tests/PPCOverlappingTokensTest.st
compiler/tests/PPCTokenizingCodeGeneratorTest.st
compiler/tests/PPCTokenizingTest.st
compiler/tests/PPCUnivarsalGuardTest.st
compiler/tests/PPCUniversalOptimizationTest.st
compiler/tests/PPCUniversalTest.st
compiler/tests/extras/Make.proto
compiler/tests/extras/PPCLRPContainedElement.st
compiler/tests/extras/PPCLRPEvent.st
compiler/tests/extras/PPCLRPParserSmokeTest.st
compiler/tests/extras/PPCLRPState.st
compiler/tests/extras/abbrev.stc
compiler/tests/extras/bc.mak
compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st
--- a/compiler/Make.proto	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/Make.proto	Sat Aug 29 07:56:14 2015 +0100
@@ -154,9 +154,9 @@
 $(OUTDIR)PPCMethod.$(O) PPCMethod.$(H): PPCMethod.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNode.$(O) PPCNode.$(H): PPCNode.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNodeVisitor.$(O) PPCNodeVisitor.$(H): PPCNodeVisitor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCPass.$(O) PPCPass.$(H): PPCPass.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPluggableConfiguration.$(O) PPCPluggableConfiguration.$(H): PPCPluggableConfiguration.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScanner.$(O) PPCScanner.$(H): PPCScanner.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCScannerCodeGenerator.$(O) PPCScannerCodeGenerator.$(H): PPCScannerCodeGenerator.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScannerError.$(O) PPCScannerError.$(H): PPCScannerError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScannerResultStrategy.$(O) PPCScannerResultStrategy.$(H): PPCScannerResultStrategy.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenGuard.$(O) PPCTokenGuard.$(H): PPCTokenGuard.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -175,6 +175,7 @@
 $(OUTDIR)PPCAbstractLiteralNode.$(O) PPCAbstractLiteralNode.$(H): PPCAbstractLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAbstractPredicateNode.$(O) PPCAbstractPredicateNode.$(H): PPCAbstractPredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAnyNode.$(O) PPCAnyNode.$(H): PPCAnyNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCacheFirstFollowPass.$(O) PPCCacheFirstFollowPass.$(H): PPCCacheFirstFollowPass.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCCharacterNode.$(O) PPCCharacterNode.$(H): PPCCharacterNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDelegateNode.$(O) PPCDelegateNode.$(H): PPCDelegateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDistinctResultStrategy.$(O) PPCDistinctResultStrategy.$(H): PPCDistinctResultStrategy.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCScannerResultStrategy.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -184,9 +185,10 @@
 $(OUTDIR)PPCListNode.$(O) PPCListNode.$(H): PPCListNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNilNode.$(O) PPCNilNode.$(H): PPCNilNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNoResultStrategy.$(O) PPCNoResultStrategy.$(H): PPCNoResultStrategy.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCScannerResultStrategy.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCPass.$(O) PPCPass.$(H): PPCPass.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCPassVisitor.$(O) PPCPassVisitor.$(H): PPCPassVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPluggableNode.$(O) PPCPluggableNode.$(H): PPCPluggableNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCProfilingContext.$(O) PPCProfilingContext.$(H): PPCProfilingContext.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPStream.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/PeekableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PositionableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(STCHDR)
+$(OUTDIR)PPCScannerCodeGenerator.$(O) PPCScannerCodeGenerator.$(H): PPCScannerCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingCodeGen.$(O) PPCTokenizingCodeGen.$(H): PPCTokenizingCodeGen.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGen.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingConfiguration.$(O) PPCTokenizingConfiguration.$(H): PPCTokenizingConfiguration.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCConfiguration.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCUniversalCodeGen.$(O) PPCUniversalCodeGen.$(H): PPCUniversalCodeGen.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGen.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -195,17 +197,18 @@
 $(OUTDIR)PPCUnknownNode.$(O) PPCUnknownNode.$(H): PPCUnknownNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPTokenizingCompiledParser.$(O) PPTokenizingCompiledParser.$(H): PPTokenizingCompiledParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCompiledParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PEGFsaEOFTransition.$(O) PEGFsaEOFTransition.$(H): PEGFsaEOFTransition.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PEGFsaPredicateTransition.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PEGFsaTransition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PEGFsaGenerator.$(O) PEGFsaGenerator.$(H): PEGFsaGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PEGFsaGenerator.$(O) PEGFsaGenerator.$(H): PEGFsaGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PEGFsaParserTransition.$(O) PEGFsaParserTransition.$(H): PEGFsaParserTransition.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PEGFsaPredicateTransition.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PEGFsaTransition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAbstractActionNode.$(O) PPCAbstractActionNode.$(H): PPCAbstractActionNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAndNode.$(O) PPCAndNode.$(H): PPCAndNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCCharSetPredicateNode.$(O) PPCCharSetPredicateNode.$(H): PPCCharSetPredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCheckingVisitor.$(O) PPCCheckingVisitor.$(H): PPCCheckingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCChoiceNode.$(O) PPCChoiceNode.$(H): PPCChoiceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCCodeGenerator.$(O) PPCCodeGenerator.$(H): PPCCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCodeGenerator.$(O) PPCCodeGenerator.$(H): PPCCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCEndOfInputNode.$(O) PPCEndOfInputNode.$(H): PPCEndOfInputNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCFSAVisitor.$(O) PPCFSAVisitor.$(H): PPCFSAVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCFSAVisitor.$(O) PPCFSAVisitor.$(H): PPCFSAVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCForwardNode.$(O) PPCForwardNode.$(H): PPCForwardNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCInliningVisitor.$(O) PPCInliningVisitor.$(H): PPCInliningVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCInliningVisitor.$(O) PPCInliningVisitor.$(H): PPCInliningVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCLiteralNode.$(O) PPCLiteralNode.$(H): PPCLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractLiteralNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCMessagePredicateNode.$(O) PPCMessagePredicateNode.$(H): PPCMessagePredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNegateNode.$(O) PPCNegateNode.$(H): PPCNegateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -217,38 +220,38 @@
 $(OUTDIR)PPCOptionalNode.$(O) PPCOptionalNode.$(H): PPCOptionalNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPlusNode.$(O) PPCPlusNode.$(H): PPCPlusNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPredicateNode.$(O) PPCPredicateNode.$(H): PPCPredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRewritingVisitor.$(O) PPCRewritingVisitor.$(H): PPCRewritingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRewritingVisitor.$(O) PPCRewritingVisitor.$(H): PPCRewritingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSentinelNode.$(O) PPCSentinelNode.$(H): PPCSentinelNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNilNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSequenceNode.$(O) PPCSequenceNode.$(H): PPCSequenceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarNode.$(O) PPCStarNode.$(H): PPCStarNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenCodeGenerator.$(O) PPCTokenCodeGenerator.$(H): PPCTokenCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenCodeGenerator.$(O) PPCTokenCodeGenerator.$(H): PPCTokenCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenConsumeNode.$(O) PPCTokenConsumeNode.$(H): PPCTokenConsumeNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenNode.$(O) PPCTokenNode.$(H): PPCTokenNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenWhitespaceNode.$(O) PPCTokenWhitespaceNode.$(H): PPCTokenWhitespaceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingParserNode.$(O) PPCTokenizingParserNode.$(H): PPCTokenizingParserNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimmingTokenNode.$(O) PPCTrimmingTokenNode.$(H): PPCTrimmingTokenNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCActionNode.$(O) PPCActionNode.$(H): PPCActionNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractActionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCCopyVisitor.$(O) PPCCopyVisitor.$(H): PPCCopyVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCopyVisitor.$(O) PPCCopyVisitor.$(H): PPCCopyVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDeterministicChoiceNode.$(O) PPCDeterministicChoiceNode.$(H): PPCDeterministicChoiceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCChoiceNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCLL1Visitor.$(O) PPCLL1Visitor.$(H): PPCLL1Visitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCMergingVisitor.$(O) PPCMergingVisitor.$(H): PPCMergingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCOptimizeChoices.$(O) PPCOptimizeChoices.$(H): PPCOptimizeChoices.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRecognizerComponentDetector.$(O) PPCRecognizerComponentDetector.$(H): PPCRecognizerComponentDetector.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRecognizerComponentVisitor.$(O) PPCRecognizerComponentVisitor.$(H): PPCRecognizerComponentVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCLL1Visitor.$(O) PPCLL1Visitor.$(H): PPCLL1Visitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCMergingVisitor.$(O) PPCMergingVisitor.$(H): PPCMergingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCOptimizeChoices.$(O) PPCOptimizeChoices.$(H): PPCOptimizeChoices.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRecognizerComponentDetector.$(O) PPCRecognizerComponentDetector.$(H): PPCRecognizerComponentDetector.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRecognizerComponentVisitor.$(O) PPCRecognizerComponentVisitor.$(H): PPCRecognizerComponentVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCRecognizingSequenceNode.$(O) PPCRecognizingSequenceNode.$(H): PPCRecognizingSequenceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCSequenceNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCSpecializingVisitor.$(O) PPCSpecializingVisitor.$(H): PPCSpecializingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCSpecializingVisitor.$(O) PPCSpecializingVisitor.$(H): PPCSpecializingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarAnyNode.$(O) PPCStarAnyNode.$(H): PPCStarAnyNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarCharSetPredicateNode.$(O) PPCStarCharSetPredicateNode.$(H): PPCStarCharSetPredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarMessagePredicateNode.$(O) PPCStarMessagePredicateNode.$(H): PPCStarMessagePredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSymbolActionNode.$(O) PPCSymbolActionNode.$(H): PPCSymbolActionNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractActionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenChoiceNode.$(O) PPCTokenChoiceNode.$(H): PPCTokenChoiceNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCChoiceNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenDetector.$(O) PPCTokenDetector.$(H): PPCTokenDetector.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenVisitor.$(O) PPCTokenVisitor.$(H): PPCTokenVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenizingCodeGenerator.$(O) PPCTokenizingCodeGenerator.$(H): PPCTokenizingCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGenerator.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenizingVisitor.$(O) PPCTokenizingVisitor.$(H): PPCTokenizingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenDetector.$(O) PPCTokenDetector.$(H): PPCTokenDetector.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenVisitor.$(O) PPCTokenVisitor.$(H): PPCTokenVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenizingCodeGenerator.$(O) PPCTokenizingCodeGenerator.$(H): PPCTokenizingCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGenerator.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenizingVisitor.$(O) PPCTokenizingVisitor.$(H): PPCTokenizingVisitor.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCRewritingVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimNode.$(O) PPCTrimNode.$(H): PPCTrimNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCSequenceNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimmingCharacterTokenNode.$(O) PPCTrimmingCharacterTokenNode.$(H): PPCTrimmingCharacterTokenNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCListNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCTrimmingTokenNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PPCUniversalCodeGenerator.$(O) PPCUniversalCodeGenerator.$(H): PPCUniversalCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGenerator.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPass.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPCUniversalCodeGenerator.$(O) PPCUniversalCodeGenerator.$(H): PPCUniversalCodeGenerator.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCCodeGenerator.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCPassVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCMappedActionNode.$(O) PPCMappedActionNode.$(H): PPCMappedActionNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCAbstractActionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCActionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenStarMessagePredicateNode.$(O) PPCTokenStarMessagePredicateNode.$(H): PPCTokenStarMessagePredicateNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarMessagePredicateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenStarSeparatorNode.$(O) PPCTokenStarSeparatorNode.$(H): PPCTokenStarSeparatorNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCDelegateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarMessagePredicateNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCStarNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/compiler/PPCTokenStarMessagePredicateNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/compiler/Make.spec	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/Make.spec	Sat Aug 29 07:56:14 2015 +0100
@@ -80,9 +80,9 @@
 	PPCMethod \
 	PPCNode \
 	PPCNodeVisitor \
+	PPCPass \
 	PPCPluggableConfiguration \
 	PPCScanner \
-	PPCScannerCodeGenerator \
 	PPCScannerError \
 	PPCScannerResultStrategy \
 	PPCTokenGuard \
@@ -101,6 +101,7 @@
 	PPCAbstractLiteralNode \
 	PPCAbstractPredicateNode \
 	PPCAnyNode \
+	PPCCacheFirstFollowPass \
 	PPCCharacterNode \
 	PPCDelegateNode \
 	PPCDistinctResultStrategy \
@@ -110,9 +111,10 @@
 	PPCListNode \
 	PPCNilNode \
 	PPCNoResultStrategy \
-	PPCPass \
+	PPCPassVisitor \
 	PPCPluggableNode \
 	PPCProfilingContext \
+	PPCScannerCodeGenerator \
 	PPCTokenizingCodeGen \
 	PPCTokenizingConfiguration \
 	PPCUniversalCodeGen \
@@ -126,6 +128,7 @@
 	PPCAbstractActionNode \
 	PPCAndNode \
 	PPCCharSetPredicateNode \
+	PPCCheckingVisitor \
 	PPCChoiceNode \
 	PPCCodeGenerator \
 	PPCEndOfInputNode \
@@ -212,9 +215,9 @@
     $(OUTDIR_SLASH)PPCMethod.$(O) \
     $(OUTDIR_SLASH)PPCNode.$(O) \
     $(OUTDIR_SLASH)PPCNodeVisitor.$(O) \
+    $(OUTDIR_SLASH)PPCPass.$(O) \
     $(OUTDIR_SLASH)PPCPluggableConfiguration.$(O) \
     $(OUTDIR_SLASH)PPCScanner.$(O) \
-    $(OUTDIR_SLASH)PPCScannerCodeGenerator.$(O) \
     $(OUTDIR_SLASH)PPCScannerError.$(O) \
     $(OUTDIR_SLASH)PPCScannerResultStrategy.$(O) \
     $(OUTDIR_SLASH)PPCTokenGuard.$(O) \
@@ -233,6 +236,7 @@
     $(OUTDIR_SLASH)PPCAbstractLiteralNode.$(O) \
     $(OUTDIR_SLASH)PPCAbstractPredicateNode.$(O) \
     $(OUTDIR_SLASH)PPCAnyNode.$(O) \
+    $(OUTDIR_SLASH)PPCCacheFirstFollowPass.$(O) \
     $(OUTDIR_SLASH)PPCCharacterNode.$(O) \
     $(OUTDIR_SLASH)PPCDelegateNode.$(O) \
     $(OUTDIR_SLASH)PPCDistinctResultStrategy.$(O) \
@@ -242,9 +246,10 @@
     $(OUTDIR_SLASH)PPCListNode.$(O) \
     $(OUTDIR_SLASH)PPCNilNode.$(O) \
     $(OUTDIR_SLASH)PPCNoResultStrategy.$(O) \
-    $(OUTDIR_SLASH)PPCPass.$(O) \
+    $(OUTDIR_SLASH)PPCPassVisitor.$(O) \
     $(OUTDIR_SLASH)PPCPluggableNode.$(O) \
     $(OUTDIR_SLASH)PPCProfilingContext.$(O) \
+    $(OUTDIR_SLASH)PPCScannerCodeGenerator.$(O) \
     $(OUTDIR_SLASH)PPCTokenizingCodeGen.$(O) \
     $(OUTDIR_SLASH)PPCTokenizingConfiguration.$(O) \
     $(OUTDIR_SLASH)PPCUniversalCodeGen.$(O) \
@@ -258,6 +263,7 @@
     $(OUTDIR_SLASH)PPCAbstractActionNode.$(O) \
     $(OUTDIR_SLASH)PPCAndNode.$(O) \
     $(OUTDIR_SLASH)PPCCharSetPredicateNode.$(O) \
+    $(OUTDIR_SLASH)PPCCheckingVisitor.$(O) \
     $(OUTDIR_SLASH)PPCChoiceNode.$(O) \
     $(OUTDIR_SLASH)PPCCodeGenerator.$(O) \
     $(OUTDIR_SLASH)PPCEndOfInputNode.$(O) \
--- a/compiler/PEGFsaGenerator.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PEGFsaGenerator.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PEGFsaGenerator
+PPCPassVisitor subclass:#PEGFsaGenerator
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- a/compiler/PEGFsaStateInfo.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PEGFsaStateInfo.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-FSA'
 !
 
+
 !PEGFsaStateInfo methodsFor:'accessing'!
 
 failure
@@ -210,3 +211,10 @@
     newInfo failure: info isFsaFailure.
 ! !
 
+!PEGFsaStateInfo class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCCacheFirstFollowPass.st	Sat Aug 29 07:56:14 2015 +0100
@@ -0,0 +1,35 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCPass subclass:#PPCCacheFirstFollowPass
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitCompiler-Core'
+!
+
+!PPCCacheFirstFollowPass methodsFor:'running'!
+
+run: ir
+    "Actually run the pass on given IR (tree of PPCNode) and return
+     (possibly transformed or completely new) another IR."
+
+    | firstSets firstSetsWithTokens followSets followSetsWithTokens |
+
+    "Cache first sets"
+    firstSets := ir firstSets.
+    ir allNodesDo: [ :node | node firstSet: (firstSets at: node) ].
+    firstSetsWithTokens := ir firstSetsSuchThat: [:e | e isTerminal or: [ e isTokenNode ] ].
+    ir allNodesDo: [ :node | node firstSetWithTokens: (firstSetsWithTokens at: node) ].
+
+    "Cache follow sets"
+    followSets := ir followSets.
+    ir allNodesDo: [ :node | node followSet: (followSets at: node) ].
+    followSetsWithTokens := ir followSetsSuchThat: [:e | e isTerminal or: [ e isTokenNode ] ].
+    ir allNodesDo: [ :node | node followSetWithTokens: (followSetsWithTokens at: node) ].
+    ^ ir
+
+    "Created: / 29-08-2015 / 07:27:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCCheckingVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -0,0 +1,24 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCPassVisitor subclass:#PPCCheckingVisitor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitCompiler-Visitors'
+!
+
+!PPCCheckingVisitor methodsFor:'visiting'!
+
+visitNode: node
+    | message |
+
+    super visitNode: node.
+    message := node check.
+    message notNil ifTrue:[ self error: message ].
+    ^node
+
+    "Created: / 04-09-2015 / 10:23:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/PPCCodeGenerator.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCCodeGenerator.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PPCCodeGenerator
+PPCPassVisitor subclass:#PPCCodeGenerator
 	instanceVariableNames:'codeGen'
 	classVariableNames:''
 	poolDictionaries:''
@@ -210,13 +210,16 @@
     context isNil ifTrue:[ 
         PPCCompilationError new signal: 'oops, no context set, use #context: before running a pass!!'.
     ].
-    codeGen options: context options.
-    codeGen clazz: context parserClass.  
-    entry := self visit: ir.
-    context parserClass propertyAt:#rootMethod put:entry. 
+    context options generate ifTrue:[
+        codeGen options: context options.
+        codeGen clazz: context parserClass.  
+        entry := self visit: ir.
+        context parserClass propertyAt:#rootMethod put:entry. 
+    ].
     ^ ir
 
     "Created: / 26-08-2015 / 22:38:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2015 / 10:18:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCCodeGenerator methodsFor:'support'!
--- a/compiler/PPCCompilationContext.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCCompilationContext.st	Sat Aug 29 07:56:14 2015 +0100
@@ -19,6 +19,12 @@
 
 !PPCCompilationContext methodsFor:'accessing'!
 
+idGenerator
+    ^ self parserClass idGen
+
+    "Created: / 03-09-2015 / 21:27:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 options
     ^ options
 !
--- a/compiler/PPCCompilationError.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCCompilationError.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,9 +9,17 @@
 	category:'PetitCompiler-Exceptions'
 !
 
+
 !PPCCompilationError class methodsFor:'error signalling'!
 
 signalWith: message
     ^ self signal: message
 ! !
 
+!PPCCompilationError class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/PPCCompilationOptions.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCCompilationOptions.st	Sat Aug 29 07:56:14 2015 +0100
@@ -130,14 +130,6 @@
     self set: #debug to: value.
 !
 
-detectTokens
-    ^ self at: #detectTokens ifAbsent: true
-!
-
-detectTokens: value
-    self set: #detectTokens to: value.
-!
-
 generate
     ^ self at: #generate ifAbsent: true
 !
@@ -162,16 +154,10 @@
     self set: #inline to: value.
 !
 
-merge
-    ^ self at: #merge ifAbsent: true
-!
+parserSuperclass
+    ^ self at: #parserSuperclass ifAbsent: nil
 
-merge: value
-    self set: #merge to: value.
-!
-
-parserSuperclass
-    ^ self at: #parserSuperclass ifAbsent: PPTokenizingCompiledParser
+    "Modified: / 01-09-2015 / 08:45:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 parserSuperclass: value
@@ -186,14 +172,6 @@
     self set: #profile to: value.
 !
 
-recognizingComponents
-    ^ self at: #recognizingComponents ifAbsent: true
-!
-
-recognizingComponents: value
-    self set: #recognizingComponents to: value.
-!
-
 scannerSuperclass
     ^ self at: #scannerSuperclass ifAbsent: PPCDistinctScanner
 !
--- a/compiler/PPCConfiguration.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCConfiguration.st	Sat Aug 29 07:56:14 2015 +0100
@@ -31,16 +31,21 @@
 
 !PPCConfiguration methodsFor:'accessing'!
 
+context
+    ^ context
+!
+
 defaultArguments
     ^ PPCCompilationOptions default
 
     "Modified: / 24-08-2015 / 23:39:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-input: whatever
-    ir := whatever.
-    
+input: aPPParser
+    ir := aPPParser asCompilerTree.    
     self remember: (self copyTree: ir) as: #input
+
+    "Modified (format): / 29-08-2015 / 07:18:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 ir
@@ -51,55 +56,28 @@
     ir := whatever
 ! !
 
-!PPCConfiguration methodsFor:'caching'!
-
-cacheFirstSet
-    "Creates a PPCNodes from a PPParser"
-    | firstSets |
-    firstSets := ir firstSets.
-    ir allNodesDo: [ :node |
-        node firstSet: (firstSets at: node)
-    ]
-!
-
-cacheFirstSetWithProductions
-    "Creates a PPCNodes from a PPParser"
-    | firstSets |
-    firstSets := ir firstSetsSuchThat: [:e | e name isNil not ].
-    ir allNodesDo: [ :node |
-        node firstSetWithProductions: (firstSets at: node)
-    ]
-!
+!PPCConfiguration methodsFor:'accessing - defaults'!
 
-cacheFirstSetWithTokens
-    "Creates a PPCNodes from a PPParser"
-    | firstSets |
-    firstSets := ir firstSetsSuchThat: [:e | e isTerminal or: [ e isTokenNode ] ].
-    ir allNodesDo: [ :node |
-        node firstSetWithTokens: (firstSets at: node)
-    ]
-!
+defaultParserSuperclass
+    self subclassResponsibility
 
-cacheFollowSet
-    "Creates a PPCNodes from a PPParser"
-    | followSets |
-    followSets := ir followSets.
-    ir allNodesDo: [ :node |
-        node followSet: (followSets at: node)
-    ]
-!
-
-cacheFollowSetWithTokens
-    "Creates a PPCNodes from a PPParser"
-    | followSets |
-    followSets := ir followSetsSuchThat: [:e | e isTerminal or: [ e isTokenNode ] ].
-    ir allNodesDo: [ :node |
-        node followSetWithTokens: (followSets at: node)
-    ]
+    "Created: / 01-09-2015 / 08:46:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCConfiguration methodsFor:'compiling'!
 
+buildClass: clazz
+    |  builder |
+    builder := PPCClassBuilder new.
+    
+    builder compiledClassName: clazz name.
+    builder compiledSuperclass: clazz superclass.
+    builder methodDictionary: clazz methodDictionary.
+    builder constants: clazz constants.
+
+    ^ builder compileClass.	
+!
+
 compile: whatever
     | time |
     self input: whatever.
@@ -116,6 +94,45 @@
     "Modified: / 17-08-2015 / 13:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+generateParser
+    | parserClass parserSuper rootMethod |
+
+    context options generate ifFalse:[
+        ^ self
+    ].
+    parserSuper := context options parserSuperclass.
+    parserSuper isNil ifTrue:[ 
+        parserSuper := self defaultParserSuperclass.
+    ].
+    rootMethod := context parserClass propertyAt:#rootMethod.
+    context parserClass name:context options parserName.
+    context parserClass superclass: parserSuper.
+    parserClass := self buildClass:context parserClass.
+    parserClass startSymbol:rootMethod methodName.
+    self remember:parserClass as:#parser.
+    ir := parserClass new
+
+    "Modified: / 25-08-2015 / 00:05:49 / Jan Vrany"
+    "Modified: / 01-09-2015 / 08:46:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generateScanner
+    | scanner |
+
+    context options generate ifFalse:[
+        ^ self
+    ].
+    context scannerClass name:context options scannerName.
+    context scannerClass superclass:context options scannerSuperclass.
+    scanner := (self buildClass:context scannerClass).
+    context parserClass addConstant:scanner as:#scannerClass.
+    ir := scanner.
+    self remember:scanner as:#scanner
+
+    "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany"
+    "Modified: / 26-08-2015 / 19:58:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 invokePhases
     self subclassResponsibility
 ! !
@@ -140,9 +157,11 @@
 !
 
 remember: value as: key
-    self options debug ifTrue: [ 
+    context options debug ifTrue: [ 
         history add: key -> value.
     ]
+
+    "Modified: / 28-08-2015 / 14:14:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCConfiguration methodsFor:'error handling'!
@@ -168,82 +187,6 @@
     "Modified: / 26-08-2015 / 19:49:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!PPCConfiguration methodsFor:'phases'!
-
-cacheFirstFollow
-    context options cacheFirstFollow ifFalse:[
-        ^ self
-    ].
-    self cacheFirstSet.
-    self cacheFollowSet.
-    self cacheFirstSetWithTokens.
-    self cacheFollowSetWithTokens.
-!
-
-check
-    ir checkTree 
-!
-
-createRecognizingComponents
-    context options recognizingComponents ifFalse:[
-        ^ self
-    ].
-    self runPass: PPCRecognizerComponentDetector
-
-    "Modified: / 26-08-2015 / 22:36:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-createTokens
-    context options detectTokens ifFalse:[
-        ^ self
-    ].
-    self runPass: PPCTokenDetector
-
-    "Modified: / 26-08-2015 / 22:36:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-inline
-    context options inline ifFalse:[
-        ^ self
-    ].
-    self runPass: PPCInliningVisitor
-
-    "Modified: / 26-08-2015 / 22:36:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-merge
-    "Merge equivalent nodes under one object with single identity"
-    
-    context options merge ifFalse:[
-        ^ self
-    ].
-    self runPass: PPCMergingVisitor
-
-    "Modified: / 26-08-2015 / 22:36:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-specialize
-    context options specialize ifFalse:[
-        ^ self
-    ].
-    "
-     Invokes a visitor that creates specialized nodes
-     for some patterns of PPCNodes,
-     
-     e.g. $a astar can be represented by PPCCharacterStarNode
-    "
-   self runPass: PPCSpecializingVisitor
-
-    "Modified: / 26-08-2015 / 22:36:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-toPPCIr
-    "Creates a PPCNodes from a PPParser"
-    ir := ir asCompilerTree.
-    
-    self remember: (self copyTree: ir) as: #ppcNodes
-! !
-
 !PPCConfiguration methodsFor:'reporting'!
 
 reportTime: timeInMs
@@ -256,10 +199,14 @@
 
 !PPCConfiguration methodsFor:'running'!
 
-runPass: passClassOrAlike
-    ir := passClassOrAlike run: ir in: context.
-    self remember:(self copyTree:ir) as:passClassOrAlike name
+runPass: pass
+    | p |
+
+    p := pass asPPCPass.
+    ir := p run: ir in: context.
+    self remember:(self copyTree:ir) as:p class name
 
     "Created: / 26-08-2015 / 22:35:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-08-2015 / 07:16:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
--- a/compiler/PPCDeterministicChoiceNode.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCDeterministicChoiceNode.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,9 +9,17 @@
 	category:'PetitCompiler-Nodes'
 !
 
+
 !PPCDeterministicChoiceNode methodsFor:'visiting'!
 
 accept: visitor
     ^ visitor visitDeterministicChoiceNode: self
 ! !
 
+!PPCDeterministicChoiceNode class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/PPCFSAVisitor.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCFSAVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,19 +2,13 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PPCFSAVisitor
+PPCPassVisitor subclass:#PPCFSAVisitor
 	instanceVariableNames:'fsaCache idGen'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'PetitCompiler-Visitors'
 !
 
-!PPCFSAVisitor methodsFor:'accessing'!
-
-idGen: anObject
-    idGen := anObject
-! !
-
 !PPCFSAVisitor methodsFor:'as yet unclassified'!
 
 unorderedChoiceFromFollowSet: followSet
@@ -23,13 +17,14 @@
     ^ fsaCache at: followSet ifAbsentPut: [ 
         followFsas := followSet collect: [ :followNode | 
             followNode asFsa 
-                name: (idGen idFor: followNode);
-                retval: (idGen idFor: followNode); 
+                name: (context idGenerator  idFor: followNode);
+                retval: (context idGenerator  idFor: followNode); 
                 yourself
         ].
         self unorderedChoiceFromFsas: followFsas.
     ]
-     
+
+    "Modified: / 03-09-2015 / 21:28:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 unorderedChoiceFromFsas: fsas
@@ -53,11 +48,13 @@
     | anFsa |
 
     anFsa := tokenNode asFsa determinize.
-    anFsa name: (idGen idFor: tokenNode).
-    anFsa retval: (idGen idFor: tokenNode).
+    anFsa name: (context idGenerator idFor: tokenNode).
+    anFsa retval: (context idGenerator idFor: tokenNode).
     
     tokenNode fsa: anFsa.
     ^ tokenNode
+
+    "Modified: / 03-09-2015 / 21:27:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitTokenConsumeNode: node
@@ -69,9 +66,11 @@
     epsilon ifTrue: [ followSet add: PPCEndOfFileNode instance ].
     
     anFsa := self unorderedChoiceFromFollowSet: followSet.
-    anFsa name: 'nextToken_', (idGen idFor: node).
+    anFsa name: 'nextToken_', (context idGenerator idFor: node).
 
     node nextFsa: anFsa.
+
+    "Modified: / 03-09-2015 / 21:27:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitTokenNode: node
--- a/compiler/PPCInliningVisitor.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCInliningVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PPCInliningVisitor
+PPCPassVisitor subclass:#PPCInliningVisitor
 	instanceVariableNames:'canInline acceptedNodes'
 	classVariableNames:''
 	poolDictionaries:''
@@ -13,9 +13,10 @@
 !PPCInliningVisitor methodsFor:'initialization'!
 
 initialize
-    super 	initialize.
-        
+    super initialize.        
     acceptedNodes := 0
+
+    "Modified (format): / 29-08-2015 / 07:40:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCInliningVisitor methodsFor:'testing'!
@@ -103,16 +104,6 @@
     ^ self markForInline: node
 !
 
-visitTokenConsumeNode: node
-    "super visitTokenConsumeNode: node."
-
-    node name isNil ifTrue: [ 
-        self markForInline: node
-    ].
-
-    ^ node
-!
-
 visitTokenStarMessagePredicateNode: node
     ^ self markForInline: node
 !
--- a/compiler/PPCNode.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCNode.st	Sat Aug 29 07:56:14 2015 +0100
@@ -313,6 +313,14 @@
     ^ self class hash bitXor: (name hash bitXor: (self isMarkedForInline hash bitXor: (self children size hash)))
 ! !
 
+!PPCNode methodsFor:'converting'!
+
+asCompilerTree
+    ^ self
+
+    "Created: / 29-08-2015 / 07:43:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !PPCNode methodsFor:'copying'!
 
 postCopy
--- a/compiler/PPCNodeVisitor.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCNodeVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Visitors'
 !
 
+
 !PPCNodeVisitor class methodsFor:'instance creation'!
 
 new
@@ -294,3 +295,10 @@
     ^ self visitNode: node
 ! !
 
+!PPCNodeVisitor class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/PPCPass.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCPass.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,30 +2,37 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCNodeVisitor subclass:#PPCPass
+Object subclass:#PPCPass
 	instanceVariableNames:'context'
 	classVariableNames:''
 	poolDictionaries:''
-	category:'PetitCompiler-Visitors'
+	category:'PetitCompiler-Core'
 !
 
-!PPCPass class methodsFor:'running'!
+!PPCPass class methodsFor:'converting'!
 
-run: ir in: context
-    "Run the pass on passed IR in given compilation context.
-     Return (possibly transformed or completely new) IR."
+asPPCPass
+    ^ self new
 
-    ^ self new run: ir in: context
-
-    "Created: / 26-08-2015 / 22:31:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 29-08-2015 / 07:12:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCPass methodsFor:'accessing'!
 
-context: aPPCCompilationContext
+context
+    ^ context
+!
+
+context:aPPCCompilationContext
     context := aPPCCompilationContext.
+! !
 
-    "Created: / 26-08-2015 / 22:05:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!PPCPass methodsFor:'converting'!
+
+asPPCPass
+    ^ self
+
+    "Created: / 29-08-2015 / 07:13:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCPass methodsFor:'running'!
@@ -34,12 +41,10 @@
     "Actually run the pass on given IR (tree of PPCNode) and return
      (possibly transformed or completely new) another IR."
 
-    context isNil ifTrue:[ 
-        PPCCompilationError new signal: 'oops, no context set, use #context: before running a pass!!'.
-    ].
-    ^ self visit: ir.
+    self subclassResponsibility
 
     "Created: / 26-08-2015 / 22:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-08-2015 / 07:15:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 run: ir in: ctx
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCPassVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -0,0 +1,75 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCNodeVisitor subclass:#PPCPassVisitor
+	instanceVariableNames:'context'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitCompiler-Visitors'
+!
+
+
+!PPCPassVisitor class methodsFor:'converting'!
+
+asPPCPass
+    ^ self new
+
+    "Created: / 29-08-2015 / 07:12:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PPCPassVisitor methodsFor:'accessing'!
+
+context
+    ^ context
+!
+
+context: aPPCCompilationContext
+    context := aPPCCompilationContext.
+
+    "Created: / 26-08-2015 / 22:05:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PPCPassVisitor methodsFor:'converting'!
+
+asPPCPass
+    ^ self
+
+    "Created: / 29-08-2015 / 07:13:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PPCPassVisitor methodsFor:'running'!
+
+run: ir
+    "Actually run the pass on given IR (tree of PPCNode) and return
+     (possibly transformed or completely new) another IR."
+
+    context isNil ifTrue:[ 
+        PPCCompilationError new signal: 'oops, no context set, use #context: before running a pass!!'.
+    ].
+    ^ self visit: ir.
+
+    "Created: / 26-08-2015 / 22:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+run: ir in: ctx
+    "Actually run the pass on given IR (tree of PPCNode) in given
+     compilation context and return (possibly transformed or completely 
+     new) another IR."
+
+    context := ctx.
+    ^ self run: ir.
+
+    "Created: / 26-08-2015 / 22:33:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!PPCPassVisitor class methodsFor:'documentation'!
+
+version
+    ^ 'Path: stx/goodies/petitparser/compiler/PPCPass.st, Version: 1.0, User: jv, Time: 2015-08-29T07:53:24.558+01'
+!
+
+version_HG
+    ^ 'Path: stx/goodies/petitparser/compiler/PPCPass.st, Version: 1.0, User: jv, Time: 2015-08-29T07:53:24.558+01'
+! !
+
--- a/compiler/PPCPluggableConfiguration.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCPluggableConfiguration.st	Sat Aug 29 07:56:14 2015 +0100
@@ -24,10 +24,6 @@
 
 !PPCPluggableConfiguration methodsFor:'as yet unclassified'!
 
-options: args
-    ^ base options: args
-!
-
 base: aPPCConfiguration
     base := aPPCConfiguration
 !
@@ -48,5 +44,11 @@
 
 invokePhases
     ^ block value: base
+!
+
+options: args
+    ^ base context options: args
+
+    "Modified: / 28-08-2015 / 14:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
--- a/compiler/PPCRewritingVisitor.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCRewritingVisitor.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PPCRewritingVisitor
+PPCPassVisitor subclass:#PPCRewritingVisitor
 	instanceVariableNames:'change'
 	classVariableNames:''
 	poolDictionaries:''
--- a/compiler/PPCScannerCodeGenerator.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCScannerCodeGenerator.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,8 +2,8 @@
 
 "{ NameSpace: Smalltalk }"
 
-Object subclass:#PPCScannerCodeGenerator
-	instanceVariableNames:'codeGen fsa options incommingTransitions resultStrategy fsaCache'
+PPCPass subclass:#PPCScannerCodeGenerator
+	instanceVariableNames:'codeGen fsa incommingTransitions resultStrategy fsaCache'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'PetitCompiler-Scanner'
@@ -25,15 +25,6 @@
 
 compiler
     ^ self codeGen 
-!
-
-options
-    ^ options 
-!
-
-options: anObject
-    options := anObject.
-    codeGen options: anObject.
 ! !
 
 !PPCScannerCodeGenerator methodsFor:'analysis'!
@@ -409,12 +400,14 @@
     
     builder := PPCClassBuilder new.
     
-    builder compiledClassName: options scannerName.
-    builder compiledSuperclass: options scannerSuperclass.
+    builder compiledClassName: context options scannerName.
+    builder compiledSuperclass: context options scannerSuperclass.
     builder methodDictionary: codeGen clazz methodDictionary.
     builder constants: codeGen clazz constants.
 
-    ^ builder compileClass.	
+    ^ builder compileClass.
+
+    "Modified: / 03-09-2015 / 22:00:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCScannerCodeGenerator methodsFor:'initialization'!
@@ -423,9 +416,38 @@
     super initialize.
     
     codeGen := PPCFSACodeGen new.
-    options := PPCCompilationOptions default.
+    context := PPCCompilationContext new.
     fsaCache := IdentityDictionary new.
 
-    "Modified: / 24-08-2015 / 23:39:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-09-2015 / 22:27:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!PPCScannerCodeGenerator methodsFor:'running'!
+
+run: ir
+    "Actually run the pass on given IR (tree of PPCNode) and return
+     (possibly transformed or completely new) another IR."
+
+    | fsas |
+
+    fsas := IdentitySet new.
+    fsaCache := IdentityDictionary new.               
+    fsas addAll:(ir allNodes 
+                select:[:node | node hasFsa ]
+                thenCollect:[:node | node fsa ]).
+    fsas addAll:(ir allNodes 
+                select:[:node | node hasNextFsa ]
+                thenCollect:[:node | node nextFsa ]).
+    fsas := fsas select:[:each | each hasDistinctRetvals].
+    codeGen clazz:context scannerClass.
+    codeGen options: context options.
+
+    fsas do:[:each | 
+        self generate:each
+    ].
+    ^ ir
+
+    "Created: / 03-09-2015 / 21:55:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2015 / 06:21:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/PPCStarAnyNode.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCStarAnyNode.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Nodes'
 !
 
+
 !PPCStarAnyNode methodsFor:'as yet unclassified'!
 
 defaultName
@@ -39,3 +40,10 @@
     ^ visitor visitStarAnyNode: self
 ! !
 
+!PPCStarAnyNode class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/PPCTokenCodeGenerator.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCTokenCodeGenerator.st	Sat Aug 29 07:56:14 2015 +0100
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-PPCPass subclass:#PPCTokenCodeGenerator
+PPCPassVisitor subclass:#PPCTokenCodeGenerator
 	instanceVariableNames:'codeGen'
 	classVariableNames:''
 	poolDictionaries:''
--- a/compiler/PPCTokenizingConfiguration.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCTokenizingConfiguration.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,155 +9,57 @@
 	category:'PetitCompiler-Core'
 !
 
-!PPCTokenizingConfiguration methodsFor:'compiling'!
+!PPCTokenizingConfiguration methodsFor:'accessing - defaults'!
+
+defaultParserSuperclass
+    ^ PPTokenizingCompiledParser
 
-buildClass: clazz
-    |  builder |
-    builder := PPCClassBuilder new.
-    
-    builder compiledClassName: clazz name.
-    builder compiledSuperclass: clazz superclass.
-    builder methodDictionary: clazz methodDictionary.
-    builder constants: clazz constants.
+    "Modified (comment): / 01-09-2015 / 08:48:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
 
-    ^ builder compileClass.	
-!
+!PPCTokenizingConfiguration methodsFor:'compiling'!
 
 invokePhases
-    self toPPCIr.
-    self createTokens.
-    self cacheFirstFollow.
-    self createLL1Choices.
-    self tokenize.
-    self merge.
-    self specialize.
-    self createRecognizingComponents.
-    self specialize.
-    self inline.
-    self merge.
-    self check.	
-    self cacheFirstFollow.
-    self buildParserClazz.
-    self unmarkConsumeTokensForInline.
-    self createFSAs.
-    self buildScannerTokens.
-    self buildScannerScans.	
-    self generateScanner.
-    self generateParser.
-! !
 
-!PPCTokenizingConfiguration methodsFor:'error handling'!
+    self runPass: PPCTokenDetector.
 
-buildParserClazz
-    self runPass: PPCTokenizingCodeGenerator.
-
-    "Modified: / 25-08-2015 / 00:07:38 / Jan Vrany <jan.vrany@fit."
-    "Modified: / 26-08-2015 / 22:47:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-buildScannerScans
-    | fsas  generator |
-
-    "TODO JK: Perhpas write separate visitor for this?"
-    fsas := IdentitySet new.
-    fsas addAll:(ir allNodes 
-                select:[:node | node hasFsa ]
-                thenCollect:[:node | node fsa ]).
-    fsas addAll:(ir allNodes 
-                select:[:node | node hasNextFsa ]
-                thenCollect:[:node | node nextFsa ]).
-    fsas := fsas reject:[:fsa | fsa hasDistinctRetvals not ].
-    generator := (PPCScannerCodeGenerator new)
-            clazz:context scannerClass;
-            options:context options;
-            yourself.
-    fsas do:[:fsa | 
-        generator generate:fsa
+    context options cacheFirstFollow ifTrue:[
+        self runPass: PPCCacheFirstFollowPass  
+    ].  
+    self runPass: PPCLL1Visitor.
+    context options tokenize ifTrue:[
+        self runPass: PPCTokenizingVisitor    
     ].
 
-    "Modified: / 25-08-2015 / 00:04:43 / Jan Vrany <jan.vrany@fit."
-    "Modified: / 26-08-2015 / 19:57:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-buildScannerTokens
-    self runPass: PPCTokenCodeGenerator
+    self runPass: PPCMergingVisitor .
 
-    "Modified: / 25-08-2015 / 00:04:46 / Jan Vrany <jan.vrany@fit."
-    "Modified: / 26-08-2015 / 22:53:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+    context options specialize ifTrue:[
+        self runPass: PPCSpecializingVisitor
+    ].
 
-generateParser
-    | parserClass  rootMethod |
+    self runPass: PPCRecognizerComponentDetector .
 
-    context options generate ifFalse:[
-        ^ self
+    context options specialize ifTrue:[
+        self runPass: PPCSpecializingVisitor
     ].
-    rootMethod := context parserClass propertyAt:#rootMethod.
-    context parserClass name:context options parserName.
-    context parserClass superclass:context options parserSuperclass.
-    parserClass := self buildClass:context parserClass.
-    parserClass startSymbol:rootMethod methodName.
-    self remember:parserClass as:#parser.
-    ir := parserClass new
+    context options inline ifTrue:[
+        self runPass: PPCInliningVisitor     
+    ]. 
 
-    "Modified: / 25-08-2015 / 00:05:49 / Jan Vrany"
-    "Modified: / 26-08-2015 / 19:57:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+    self runPass: PPCMergingVisitor .
 
-generateScanner
-    | scanner |
+    self runPass: PPCCheckingVisitor.
+    context options cacheFirstFollow ifTrue:[
+        self runPass: PPCCacheFirstFollowPass  
+    ].  
+    self runPass: PPCTokenizingCodeGenerator.
+    self runPass: PPCFSAVisitor.
+    self runPass: PPCTokenCodeGenerator.
+    self runPass: PPCScannerCodeGenerator.  
 
-    context options generate ifFalse:[
-        ^ self
-    ].
-    context scannerClass name:context options scannerName.
-    context scannerClass superclass:context options scannerSuperclass.
-    scanner := (self buildClass:context scannerClass).
-    context parserClass addConstant:scanner as:#scannerClass.
-    ir := scanner.
-    self remember:scanner as:#scanner
+    self generateScanner.
+    self generateParser.
 
-    "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany"
-    "Modified: / 26-08-2015 / 19:58:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2015 / 10:25:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!PPCTokenizingConfiguration methodsFor:'phases'!
-
-createFSAs
-    ir := PPCFSAVisitor new
-        idGen: context scannerClass idGen;
-        visit: ir.
-
-    self remember: (self copyTree: ir) as: #withFSAs
-
-    "Modified: / 25-08-2015 / 00:07:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-createLL1Choices
-    self flag:'This phase needs revisit and update'.
-    self runPass: PPCLL1Visitor
-
-    "Modified: / 26-08-2015 / 22:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-tokenize
-    "
-        This will try transform the parser into the tokenizing parser"
-    
-    context options tokenize ifFalse:[
-        ^ self
-    ].
-    self runPass: PPCTokenizingVisitor
-
-    "Modified: / 26-08-2015 / 22:48:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-unmarkConsumeTokensForInline
-    "TODO JK: Hack alert, use visitor, or at leas isTokenConsume"
-    ir allNodesDo: [ :node |
-        node class == PPCTokenConsumeNode ifTrue: [ 
-            node unmarkForInline
-        ]
-    ]
-! !
-
--- a/compiler/PPCUniversalConfiguration.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCUniversalConfiguration.st	Sat Aug 29 07:56:14 2015 +0100
@@ -10,59 +10,45 @@
 !
 
 
-!PPCUniversalConfiguration methodsFor:'compiling'!
-
-initialize
-    super initialize.
-
-    "Modified: / 25-08-2015 / 00:03:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+!PPCUniversalConfiguration methodsFor:'accessing - defaults'!
 
-invokePhases
-    self toPPCIr.
-    self createTokens.
-    self cacheFirstFollow.
-    self specialize.
-    self createRecognizingComponents.
-    self specialize.
-    self inline.
-    self merge.
-    self check.	
-    self generate.
+defaultParserSuperclass
+    ^ PPCompiledParser
+
+    "Modified: / 01-09-2015 / 08:47:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!PPCUniversalConfiguration methodsFor:'error handling'!
+!PPCUniversalConfiguration methodsFor:'compiling'!
 
-buildClass
-    | builder |
+invokePhases
+
+    self runPass: PPCTokenDetector.
 
-    self assert:(context parserClass isKindOf:PPCClass).
-    builder := PPCClassBuilder new.
-    builder compiledClassName:context options parserName.
-    builder compiledSuperclass:PPCompiledParser.
-    builder methodDictionary:context parserClass methodDictionary.
-    builder constants:context parserClass constants.
-    ^ builder compileClass.
+    context options cacheFirstFollow ifTrue:[
+        self runPass: PPCCacheFirstFollowPass  
+    ].  
+    context options specialize ifTrue:[
+        self runPass: PPCSpecializingVisitor
+    ].  
+
+    self runPass: PPCRecognizerComponentDetector .
 
-    "Modified: / 25-08-2015 / 00:04:08 / Jan Vrany <jan.vrany@fit."
-    "Modified: / 26-08-2015 / 20:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-generate
-    | compiledParser |
-
-    context options generate ifFalse:[
-        ^ self
+    context options specialize ifTrue:[
+        self runPass: PPCSpecializingVisitor
+    ].
+    context options inline ifTrue:[
+        self runPass: PPCInliningVisitor     
     ].
-    self runPass: PPCUniversalCodeGenerator.
+
+    self runPass: PPCMergingVisitor.
+
+    self runPass: PPCCheckingVisitor.
 
-    compiledParser := self buildClass.
-    compiledParser startSymbol:(context parserClass propertyAt:#rootMethod) methodName.
-    compiledParser := compiledParser new.
-    ir := compiledParser.
+    self runPass: PPCUniversalCodeGenerator. 
 
-    "Modified: / 25-08-2015 / 00:03:46 / Jan Vrany <jan.vr"
-    "Modified: / 26-08-2015 / 22:50:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    self generateParser.
+
+    "Modified: / 04-09-2015 / 10:25:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCUniversalConfiguration class methodsFor:'documentation'!
--- a/compiler/abbrev.stc	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/abbrev.stc	Sat Aug 29 07:56:14 2015 +0100
@@ -30,9 +30,9 @@
 PPCMethod PPCMethod stx:goodies/petitparser/compiler 'PetitCompiler-Compiler-Codegen' 0
 PPCNode PPCNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCNodeVisitor PPCNodeVisitor stx:goodies/petitparser/compiler 'PetitCompiler-Visitors' 0
+PPCPass PPCPass stx:goodies/petitparser/compiler 'PetitCompiler-Core' 0
 PPCPluggableConfiguration PPCPluggableConfiguration stx:goodies/petitparser/compiler 'PetitCompiler-Core' 0
 PPCScanner PPCScanner stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
-PPCScannerCodeGenerator PPCScannerCodeGenerator stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
 PPCScannerError PPCScannerError stx:goodies/petitparser/compiler 'PetitCompiler-Exceptions' 1
 PPCScannerResultStrategy PPCScannerResultStrategy stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
 PPCTokenGuard PPCTokenGuard stx:goodies/petitparser/compiler 'PetitCompiler-Guards' 0
@@ -51,6 +51,7 @@
 PPCAbstractLiteralNode PPCAbstractLiteralNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCAbstractPredicateNode PPCAbstractPredicateNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCAnyNode PPCAnyNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
+PPCCacheFirstFollowPass PPCCacheFirstFollowPass stx:goodies/petitparser/compiler 'PetitCompiler-Core' 0
 PPCCharacterNode PPCCharacterNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCDelegateNode PPCDelegateNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCDistinctResultStrategy PPCDistinctResultStrategy stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
@@ -60,9 +61,10 @@
 PPCListNode PPCListNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCNilNode PPCNilNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCNoResultStrategy PPCNoResultStrategy stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
-PPCPass PPCPass stx:goodies/petitparser/compiler 'PetitCompiler-Visitors' 0
+PPCPassVisitor PPCPassVisitor stx:goodies/petitparser/compiler 'PetitCompiler-Visitors' 0
 PPCPluggableNode PPCPluggableNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCProfilingContext PPCProfilingContext stx:goodies/petitparser/compiler 'PetitCompiler-Context' 0
+PPCScannerCodeGenerator PPCScannerCodeGenerator stx:goodies/petitparser/compiler 'PetitCompiler-Scanner' 0
 PPCTokenizingCodeGen PPCTokenizingCodeGen stx:goodies/petitparser/compiler 'PetitCompiler-Compiler-Codegen' 0
 PPCTokenizingConfiguration PPCTokenizingConfiguration stx:goodies/petitparser/compiler 'PetitCompiler-Core' 0
 PPCUniversalCodeGen PPCUniversalCodeGen stx:goodies/petitparser/compiler 'PetitCompiler-Compiler-Codegen' 0
@@ -76,6 +78,7 @@
 PPCAbstractActionNode PPCAbstractActionNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCAndNode PPCAndNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCCharSetPredicateNode PPCCharSetPredicateNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
+PPCCheckingVisitor PPCCheckingVisitor stx:goodies/petitparser/compiler 'PetitCompiler-Visitors' 0
 PPCChoiceNode PPCChoiceNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCCodeGenerator PPCCodeGenerator stx:goodies/petitparser/compiler 'PetitCompiler-Visitors-CodeGenerators' 0
 PPCEndOfInputNode PPCEndOfInputNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
--- a/compiler/bc.mak	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/bc.mak	Sat Aug 29 07:56:14 2015 +0100
@@ -101,9 +101,9 @@
 $(OUTDIR)PPCMethod.$(O) PPCMethod.$(H): PPCMethod.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNode.$(O) PPCNode.$(H): PPCNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNodeVisitor.$(O) PPCNodeVisitor.$(H): PPCNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCPass.$(O) PPCPass.$(H): PPCPass.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPluggableConfiguration.$(O) PPCPluggableConfiguration.$(H): PPCPluggableConfiguration.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScanner.$(O) PPCScanner.$(H): PPCScanner.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCScannerCodeGenerator.$(O) PPCScannerCodeGenerator.$(H): PPCScannerCodeGenerator.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScannerError.$(O) PPCScannerError.$(H): PPCScannerError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCScannerResultStrategy.$(O) PPCScannerResultStrategy.$(H): PPCScannerResultStrategy.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenGuard.$(O) PPCTokenGuard.$(H): PPCTokenGuard.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -122,6 +122,7 @@
 $(OUTDIR)PPCAbstractLiteralNode.$(O) PPCAbstractLiteralNode.$(H): PPCAbstractLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAbstractPredicateNode.$(O) PPCAbstractPredicateNode.$(H): PPCAbstractPredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAnyNode.$(O) PPCAnyNode.$(H): PPCAnyNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCacheFirstFollowPass.$(O) PPCCacheFirstFollowPass.$(H): PPCCacheFirstFollowPass.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCCharacterNode.$(O) PPCCharacterNode.$(H): PPCCharacterNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDelegateNode.$(O) PPCDelegateNode.$(H): PPCDelegateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDistinctResultStrategy.$(O) PPCDistinctResultStrategy.$(H): PPCDistinctResultStrategy.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCScannerResultStrategy.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -131,9 +132,10 @@
 $(OUTDIR)PPCListNode.$(O) PPCListNode.$(H): PPCListNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNilNode.$(O) PPCNilNode.$(H): PPCNilNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNoResultStrategy.$(O) PPCNoResultStrategy.$(H): PPCNoResultStrategy.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCScannerResultStrategy.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCPass.$(O) PPCPass.$(H): PPCPass.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCPassVisitor.$(O) PPCPassVisitor.$(H): PPCPassVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPluggableNode.$(O) PPCPluggableNode.$(H): PPCPluggableNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCProfilingContext.$(O) PPCProfilingContext.$(H): PPCProfilingContext.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPStream.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\PeekableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PositionableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(STCHDR)
+$(OUTDIR)PPCScannerCodeGenerator.$(O) PPCScannerCodeGenerator.$(H): PPCScannerCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingCodeGen.$(O) PPCTokenizingCodeGen.$(H): PPCTokenizingCodeGen.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGen.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingConfiguration.$(O) PPCTokenizingConfiguration.$(H): PPCTokenizingConfiguration.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCConfiguration.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCUniversalCodeGen.$(O) PPCUniversalCodeGen.$(H): PPCUniversalCodeGen.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGen.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -142,17 +144,18 @@
 $(OUTDIR)PPCUnknownNode.$(O) PPCUnknownNode.$(H): PPCUnknownNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPTokenizingCompiledParser.$(O) PPTokenizingCompiledParser.$(H): PPTokenizingCompiledParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCompiledParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PEGFsaEOFTransition.$(O) PEGFsaEOFTransition.$(H): PEGFsaEOFTransition.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PEGFsaPredicateTransition.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PEGFsaTransition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PEGFsaGenerator.$(O) PEGFsaGenerator.$(H): PEGFsaGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PEGFsaGenerator.$(O) PEGFsaGenerator.$(H): PEGFsaGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PEGFsaParserTransition.$(O) PEGFsaParserTransition.$(H): PEGFsaParserTransition.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PEGFsaPredicateTransition.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PEGFsaTransition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAbstractActionNode.$(O) PPCAbstractActionNode.$(H): PPCAbstractActionNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCAndNode.$(O) PPCAndNode.$(H): PPCAndNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCCharSetPredicateNode.$(O) PPCCharSetPredicateNode.$(H): PPCCharSetPredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCheckingVisitor.$(O) PPCCheckingVisitor.$(H): PPCCheckingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCChoiceNode.$(O) PPCChoiceNode.$(H): PPCChoiceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCCodeGenerator.$(O) PPCCodeGenerator.$(H): PPCCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCodeGenerator.$(O) PPCCodeGenerator.$(H): PPCCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCEndOfInputNode.$(O) PPCEndOfInputNode.$(H): PPCEndOfInputNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCFSAVisitor.$(O) PPCFSAVisitor.$(H): PPCFSAVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCFSAVisitor.$(O) PPCFSAVisitor.$(H): PPCFSAVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCForwardNode.$(O) PPCForwardNode.$(H): PPCForwardNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCInliningVisitor.$(O) PPCInliningVisitor.$(H): PPCInliningVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCInliningVisitor.$(O) PPCInliningVisitor.$(H): PPCInliningVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCLiteralNode.$(O) PPCLiteralNode.$(H): PPCLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractLiteralNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCMessagePredicateNode.$(O) PPCMessagePredicateNode.$(H): PPCMessagePredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCNegateNode.$(O) PPCNegateNode.$(H): PPCNegateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -164,38 +167,38 @@
 $(OUTDIR)PPCOptionalNode.$(O) PPCOptionalNode.$(H): PPCOptionalNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPlusNode.$(O) PPCPlusNode.$(H): PPCPlusNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCPredicateNode.$(O) PPCPredicateNode.$(H): PPCPredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractPredicateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRewritingVisitor.$(O) PPCRewritingVisitor.$(H): PPCRewritingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRewritingVisitor.$(O) PPCRewritingVisitor.$(H): PPCRewritingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSentinelNode.$(O) PPCSentinelNode.$(H): PPCSentinelNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNilNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSequenceNode.$(O) PPCSequenceNode.$(H): PPCSequenceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarNode.$(O) PPCStarNode.$(H): PPCStarNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenCodeGenerator.$(O) PPCTokenCodeGenerator.$(H): PPCTokenCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenCodeGenerator.$(O) PPCTokenCodeGenerator.$(H): PPCTokenCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenConsumeNode.$(O) PPCTokenConsumeNode.$(H): PPCTokenConsumeNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenNode.$(O) PPCTokenNode.$(H): PPCTokenNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenWhitespaceNode.$(O) PPCTokenWhitespaceNode.$(H): PPCTokenWhitespaceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenizingParserNode.$(O) PPCTokenizingParserNode.$(H): PPCTokenizingParserNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimmingTokenNode.$(O) PPCTrimmingTokenNode.$(H): PPCTrimmingTokenNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCActionNode.$(O) PPCActionNode.$(H): PPCActionNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractActionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCCopyVisitor.$(O) PPCCopyVisitor.$(H): PPCCopyVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCCopyVisitor.$(O) PPCCopyVisitor.$(H): PPCCopyVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCDeterministicChoiceNode.$(O) PPCDeterministicChoiceNode.$(H): PPCDeterministicChoiceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCChoiceNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCLL1Visitor.$(O) PPCLL1Visitor.$(H): PPCLL1Visitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCMergingVisitor.$(O) PPCMergingVisitor.$(H): PPCMergingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCOptimizeChoices.$(O) PPCOptimizeChoices.$(H): PPCOptimizeChoices.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRecognizerComponentDetector.$(O) PPCRecognizerComponentDetector.$(H): PPCRecognizerComponentDetector.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCRecognizerComponentVisitor.$(O) PPCRecognizerComponentVisitor.$(H): PPCRecognizerComponentVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCLL1Visitor.$(O) PPCLL1Visitor.$(H): PPCLL1Visitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCMergingVisitor.$(O) PPCMergingVisitor.$(H): PPCMergingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCOptimizeChoices.$(O) PPCOptimizeChoices.$(H): PPCOptimizeChoices.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRecognizerComponentDetector.$(O) PPCRecognizerComponentDetector.$(H): PPCRecognizerComponentDetector.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCRecognizerComponentVisitor.$(O) PPCRecognizerComponentVisitor.$(H): PPCRecognizerComponentVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCRecognizingSequenceNode.$(O) PPCRecognizingSequenceNode.$(H): PPCRecognizingSequenceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCSequenceNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCSpecializingVisitor.$(O) PPCSpecializingVisitor.$(H): PPCSpecializingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCSpecializingVisitor.$(O) PPCSpecializingVisitor.$(H): PPCSpecializingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarAnyNode.$(O) PPCStarAnyNode.$(H): PPCStarAnyNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarCharSetPredicateNode.$(O) PPCStarCharSetPredicateNode.$(H): PPCStarCharSetPredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCStarMessagePredicateNode.$(O) PPCStarMessagePredicateNode.$(H): PPCStarMessagePredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCSymbolActionNode.$(O) PPCSymbolActionNode.$(H): PPCSymbolActionNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractActionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenChoiceNode.$(O) PPCTokenChoiceNode.$(H): PPCTokenChoiceNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCChoiceNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenDetector.$(O) PPCTokenDetector.$(H): PPCTokenDetector.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenVisitor.$(O) PPCTokenVisitor.$(H): PPCTokenVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenizingCodeGenerator.$(O) PPCTokenizingCodeGenerator.$(H): PPCTokenizingCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGenerator.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCTokenizingVisitor.$(O) PPCTokenizingVisitor.$(H): PPCTokenizingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenDetector.$(O) PPCTokenDetector.$(H): PPCTokenDetector.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenVisitor.$(O) PPCTokenVisitor.$(H): PPCTokenVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenizingCodeGenerator.$(O) PPCTokenizingCodeGenerator.$(H): PPCTokenizingCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGenerator.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCTokenizingVisitor.$(O) PPCTokenizingVisitor.$(H): PPCTokenizingVisitor.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCRewritingVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimNode.$(O) PPCTrimNode.$(H): PPCTrimNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCSequenceNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTrimmingCharacterTokenNode.$(O) PPCTrimmingCharacterTokenNode.$(H): PPCTrimmingCharacterTokenNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCListNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCTrimmingTokenNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PPCUniversalCodeGenerator.$(O) PPCUniversalCodeGenerator.$(H): PPCUniversalCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGenerator.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPass.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPCUniversalCodeGenerator.$(O) PPCUniversalCodeGenerator.$(H): PPCUniversalCodeGenerator.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCCodeGenerator.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCPassVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCMappedActionNode.$(O) PPCMappedActionNode.$(H): PPCMappedActionNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCAbstractActionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCActionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenStarMessagePredicateNode.$(O) PPCTokenStarMessagePredicateNode.$(H): PPCTokenStarMessagePredicateNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarMessagePredicateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenStarSeparatorNode.$(O) PPCTokenStarSeparatorNode.$(H): PPCTokenStarSeparatorNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCDelegateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarMessagePredicateNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCStarNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\compiler\PPCTokenStarMessagePredicateNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/compiler/benchmarks/Make.proto	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/benchmarks/Make.proto	Sat Aug 29 07:56:14 2015 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/calipel/s -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler/tests/extras -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk/tests -I$(INCLUDE_TOP)/stx/goodies/petitparser/tests -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/calipel/s -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler/tests/extras -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk -I$(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser -I$(INCLUDE_TOP)/stx/libbasic
 
 
 # if you need any additional defines for embedded C code,
@@ -104,13 +104,8 @@
 	cd ../../../../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../refactoryBrowser/parser && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../../../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../parsers/smalltalk && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../../sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../parsers/smalltalk/tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
 
--- a/compiler/benchmarks/PPCSmalltalkNoopParser.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/benchmarks/PPCSmalltalkNoopParser.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Benchmarks-Parsers'
 !
 
+
 !PPCSmalltalkNoopParser methodsFor:'accessing'!
 
 startExpression
@@ -342,3 +343,10 @@
     "Modified: / 15-05-2015 / 08:54:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!PPCSmalltalkNoopParser class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/benchmarks/abbrev.stc	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/benchmarks/abbrev.stc	Sat Aug 29 07:56:14 2015 +0100
@@ -4,5 +4,5 @@
 PPCBenchmark PPCBenchmark stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Core' 0
 PPCLRPParser_johanfabry_39 PPCLRPParser_johanfabry_39 stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Core' 0
 PPCSmalltalkNoopParser PPCSmalltalkNoopParser stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Parsers' 0
+stx_goodies_petitparser_compiler_benchmarks stx_goodies_petitparser_compiler_benchmarks stx:goodies/petitparser/compiler/benchmarks '* Projects & Packages *' 3
 PPCSmalltalkNoopParserTests PPCSmalltalkNoopParserTests stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Parsers-Tests' 1
-stx_goodies_petitparser_compiler_benchmarks stx_goodies_petitparser_compiler_benchmarks stx:goodies/petitparser/compiler/benchmarks '* Projects & Packages *' 3
--- a/compiler/benchmarks/bc.mak	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/benchmarks/bc.mak	Sat Aug 29 07:56:14 2015 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\calipel\s -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler\tests\extras -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk\tests -I$(INCLUDE_TOP)\stx\goodies\petitparser\tests -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\calipel\s -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler\tests\extras -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk -I$(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser -I$(INCLUDE_TOP)\stx\libbasic
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -54,13 +54,8 @@
 	pushd ..\..\..\..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\refactoryBrowser\parser & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\..\..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\.. & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\parsers\smalltalk & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\..\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\parsers\smalltalk\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
 
--- a/compiler/benchmarks/stx_goodies_petitparser_compiler_benchmarks.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/benchmarks/stx_goodies_petitparser_compiler_benchmarks.st	Sat Aug 29 07:56:14 2015 +0100
@@ -61,10 +61,7 @@
     ^ #(
         #'stx:goodies/petitparser'    "PPCompositeParser - superclass of PPCLRPParser_johanfabry_39"
         #'stx:goodies/petitparser/parsers/smalltalk'    "PPSmalltalkGrammar - superclass of PPCSmalltalkNoopParser"
-        #'stx:goodies/petitparser/parsers/smalltalk/tests'    "PPSmalltalkGrammarTests - superclass of PPCSmalltalkNoopParserTests"
-        #'stx:goodies/petitparser/tests'    "PPAbstractParserTest - superclass of PPCSmalltalkNoopParserTests"
-        #'stx:goodies/sunit'    "TestAsserter - superclass of PPCSmalltalkNoopParserTests"
-        #'stx:libbasic'    "LibraryDefinition - superclass of stx_goodies_petitparser_compiler_benchmarks"
+        #'stx:libbasic'    "Autoload - superclass of PPCSmalltalkNoopParserTests"
     )
 !
 
@@ -110,8 +107,8 @@
         PPCBenchmark
         #'PPCLRPParser_johanfabry_39'
         PPCSmalltalkNoopParser
+        #'stx_goodies_petitparser_compiler_benchmarks'
         (PPCSmalltalkNoopParserTests autoload)
-        #'stx_goodies_petitparser_compiler_benchmarks'
     )
 !
 
--- a/compiler/extensions.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/extensions.st	Sat Aug 29 07:56:14 2015 +0100
@@ -407,13 +407,15 @@
 !PPParser methodsFor:'*petitcompiler'!
 
 compile: options
+    | configuration |
+
     self assert: (options isKindOf: PPCCompilationOptions).
-    
-    ^ PPCConfiguration default
-        options: options;
-        compile: self
 
-    "Modified: / 24-08-2015 / 23:39:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    configuration := PPCConfiguration default.
+    configuration context options: options.
+    ^ configuration compile: self
+
+    "Modified: / 28-08-2015 / 14:25:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPParser methodsFor:'*petitcompiler'!
--- a/compiler/libInit.cc	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/libInit.cc	Sat Aug 29 07:56:14 2015 +0100
@@ -56,9 +56,9 @@
 _PPCMethod_Init(pass,__pRT__,snd);
 _PPCNode_Init(pass,__pRT__,snd);
 _PPCNodeVisitor_Init(pass,__pRT__,snd);
+_PPCPass_Init(pass,__pRT__,snd);
 _PPCPluggableConfiguration_Init(pass,__pRT__,snd);
 _PPCScanner_Init(pass,__pRT__,snd);
-_PPCScannerCodeGenerator_Init(pass,__pRT__,snd);
 _PPCScannerError_Init(pass,__pRT__,snd);
 _PPCScannerResultStrategy_Init(pass,__pRT__,snd);
 _PPCTokenGuard_Init(pass,__pRT__,snd);
@@ -77,6 +77,7 @@
 _PPCAbstractLiteralNode_Init(pass,__pRT__,snd);
 _PPCAbstractPredicateNode_Init(pass,__pRT__,snd);
 _PPCAnyNode_Init(pass,__pRT__,snd);
+_PPCCacheFirstFollowPass_Init(pass,__pRT__,snd);
 _PPCCharacterNode_Init(pass,__pRT__,snd);
 _PPCDelegateNode_Init(pass,__pRT__,snd);
 _PPCDistinctResultStrategy_Init(pass,__pRT__,snd);
@@ -86,9 +87,10 @@
 _PPCListNode_Init(pass,__pRT__,snd);
 _PPCNilNode_Init(pass,__pRT__,snd);
 _PPCNoResultStrategy_Init(pass,__pRT__,snd);
-_PPCPass_Init(pass,__pRT__,snd);
+_PPCPassVisitor_Init(pass,__pRT__,snd);
 _PPCPluggableNode_Init(pass,__pRT__,snd);
 _PPCProfilingContext_Init(pass,__pRT__,snd);
+_PPCScannerCodeGenerator_Init(pass,__pRT__,snd);
 _PPCTokenizingCodeGen_Init(pass,__pRT__,snd);
 _PPCTokenizingConfiguration_Init(pass,__pRT__,snd);
 _PPCUniversalCodeGen_Init(pass,__pRT__,snd);
@@ -102,6 +104,7 @@
 _PPCAbstractActionNode_Init(pass,__pRT__,snd);
 _PPCAndNode_Init(pass,__pRT__,snd);
 _PPCCharSetPredicateNode_Init(pass,__pRT__,snd);
+_PPCCheckingVisitor_Init(pass,__pRT__,snd);
 _PPCChoiceNode_Init(pass,__pRT__,snd);
 _PPCCodeGenerator_Init(pass,__pRT__,snd);
 _PPCEndOfInputNode_Init(pass,__pRT__,snd);
--- a/compiler/stx_goodies_petitparser_compiler.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/stx_goodies_petitparser_compiler.st	Sat Aug 29 07:56:14 2015 +0100
@@ -139,9 +139,9 @@
         PPCMethod
         PPCNode
         PPCNodeVisitor
+        PPCPass
         PPCPluggableConfiguration
         PPCScanner
-        PPCScannerCodeGenerator
         PPCScannerError
         PPCScannerResultStrategy
         PPCTokenGuard
@@ -160,6 +160,7 @@
         PPCAbstractLiteralNode
         PPCAbstractPredicateNode
         PPCAnyNode
+        PPCCacheFirstFollowPass
         PPCCharacterNode
         PPCDelegateNode
         PPCDistinctResultStrategy
@@ -169,9 +170,10 @@
         PPCListNode
         PPCNilNode
         PPCNoResultStrategy
-        PPCPass
+        PPCPassVisitor
         PPCPluggableNode
         PPCProfilingContext
+        PPCScannerCodeGenerator
         PPCTokenizingCodeGen
         PPCTokenizingConfiguration
         PPCUniversalCodeGen
@@ -185,6 +187,7 @@
         PPCAbstractActionNode
         PPCAndNode
         PPCCharSetPredicateNode
+        PPCCheckingVisitor
         PPCChoiceNode
         PPCCodeGenerator
         PPCEndOfInputNode
--- a/compiler/tests/FooScannerTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/FooScannerTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Tests-Scanner'
 !
 
+
 !FooScannerTest methodsFor:'as yet unclassified'!
 
 fail: stream rule: rule 
@@ -172,3 +173,10 @@
     self fail: 'b' rule: #nextMultiTokenA.
 ! !
 
+!FooScannerTest class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/PEGFsaScannerIntegrationTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PEGFsaScannerIntegrationTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -643,12 +643,14 @@
     fsa name: #nextToken.
     
     codeGenerator := PPCScannerCodeGenerator new.
-    codeGenerator options scannerSuperclass: PPCScanner.
+    codeGenerator context options scannerSuperclass: PPCScanner.
     
     scanner := codeGenerator
         generateAndCompile: fsa.
 
     compiled := true
+
+    "Modified: / 03-09-2015 / 22:06:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 mergeFsa: fsa1 and: fsa2
--- a/compiler/tests/PEGFsaSequenceDeterminizationTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PEGFsaSequenceDeterminizationTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -10,6 +10,7 @@
 	category:'PetitCompiler-Tests-FSA'
 !
 
+
 !PEGFsaSequenceDeterminizationTest methodsFor:'as yet unclassified'!
 
 assert: anFsa fail: input
@@ -509,3 +510,10 @@
     self assert: (newState isFsaFailure).				
 ! !
 
+!PEGFsaSequenceDeterminizationTest class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/PPCCodeGeneratorTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCCodeGeneratorTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -10,7 +10,14 @@
 !
 
 
-!PPCCodeGeneratorTest methodsFor:'as yet unclassified'!
+!PPCCodeGeneratorTest methodsFor:'generating'!
+
+compileTree: root
+    parser := configuration compile: root.
+    
+! !
+
+!PPCCodeGeneratorTest methodsFor:'running'!
 
 context	
     ^ context := PPCProfilingContext new
@@ -18,17 +25,19 @@
 
 setUp
     options := PPCCompilationOptions default
-        profile: true;
-        codeGenerator: PPCCodeGenerator.
+        profile: true.
         
     configuration := PPCPluggableConfiguration on: [ :_self | 
-        _self cacheFirstFollow.
-        _self check.
-        _self generate.
+        options cacheFirstFollow ifTrue:[ 
+            _self runPass: PPCCacheFirstFollowPass.
+        ].
+        _self runPass: PPCCheckingVisitor.
+        _self runPass: PPCUniversalCodeGenerator.
+        _self generateParser.
     ].
     configuration options: options.
 
-    "Modified: / 24-08-2015 / 23:40:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2015 / 10:31:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
@@ -40,13 +49,6 @@
     ].
 ! !
 
-!PPCCodeGeneratorTest methodsFor:'generating'!
-
-compileTree: root
-    parser := configuration compile: root.
-    
-! !
-
 !PPCCodeGeneratorTest methodsFor:'testing'!
 
 assert: whatever parse: input
--- a/compiler/tests/PPCDistinctScannerTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCDistinctScannerTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Tests-Core-Tokenizing'
 !
 
+
 !PPCDistinctScannerTest methodsFor:'as yet unclassified'!
 
 aToken
@@ -59,7 +60,7 @@
     | parser |
     parser := self fooToken, self overlappingToken.
     parser compileWithConfiguration: configuration.
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foobaz' asPetitStream.
     scanner perform: #'consume_foo'.
@@ -67,13 +68,15 @@
     self assert: scanner position = 3.
     self assert: scanner resultPosition = 3.
     self assert: scanner result isNil.
+
+    "Modified: / 28-08-2015 / 14:15:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testConsumeToken2
     | parser |
     parser := self fooToken, self barToken.
     parser compileWithConfiguration: configuration.
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foobar' asPetitStream.
     scanner perform: #'consume_foo'.
@@ -81,6 +84,8 @@
     self assert: scanner position = 3.
     self assert: scanner resultPosition = 6.
     self assert: scanner result = #bar.
+
+    "Modified: / 28-08-2015 / 14:16:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testScan
@@ -88,7 +93,7 @@
     parser := self aToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'a' asPetitStream.
     scanner perform: #'scan_token'.
@@ -96,6 +101,8 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 1.
     self assert: scanner result = #token.
+
+    "Modified: / 28-08-2015 / 14:16:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testScan2
@@ -103,7 +110,7 @@
     parser := self fooToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foo' asPetitStream.
     scanner perform: #'scan_foo'.
@@ -111,6 +118,8 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 3.
     self assert: scanner result = #foo.
+
+    "Modified: / 28-08-2015 / 14:16:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testScan3
@@ -118,7 +127,7 @@
     parser := self fooToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'bar' asPetitStream.
     scanner perform: #'scan_foo'.
@@ -126,6 +135,8 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 0.
     self assert: scanner result isNil.
+
+    "Modified: / 28-08-2015 / 14:16:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testScan4
@@ -133,7 +144,7 @@
     parser := self fooToken, self idToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foothere' asPetitStream.
     scanner perform: #'scan_foo'.
@@ -147,6 +158,8 @@
     self assert: scanner position = 3.
     self assert: scanner resultPosition = 8.
     self assert: scanner result = #id.
+
+    "Modified: / 28-08-2015 / 14:16:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testSequence
@@ -154,7 +167,7 @@
     parser := self fooTrimmingToken, self idTrimmingToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foo there ' asPetitStream.
     scanner perform: #'foo'.
@@ -162,7 +175,7 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 3.
     self assert: scanner stream position = 4.
-    self assert: scanner result = #foo.	
+    self assert: scanner result = #foo.         
     
     result := scanner perform: #'consume_foo'.
 
@@ -175,6 +188,8 @@
     self assert: result start = 1.
     self assert: result stop = 3.
     self assert: result inputValue = 'foo'.
+
+    "Modified: / 28-08-2015 / 14:16:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testToken
@@ -182,7 +197,7 @@
     parser := self fooToken, self idTrimmingToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foo there' asPetitStream.
     scanner perform: #'foo'.
@@ -190,7 +205,9 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 3.
     self assert: scanner stream position = 3.
-    self assert: scanner result = #foo.		
+    self assert: scanner result = #foo.
+
+    "Modified: / 28-08-2015 / 14:16:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testTrimmingScan
@@ -198,14 +215,16 @@
     parser := self fooTrimmingToken, self idTrimmingToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foo there' asPetitStream.
     scanner perform: #'scan_foo'.
     
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 3.
-    self assert: scanner result = #foo.	
+    self assert: scanner result = #foo.
+
+    "Modified: / 28-08-2015 / 14:16:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testTrimmingToken
@@ -213,7 +232,7 @@
     parser := self fooTrimmingToken, self idTrimmingToken.
     parser compileWithConfiguration: configuration.
     
-    scanner := (Smalltalk at: configuration options scannerName) new.
+    scanner := (Smalltalk at: configuration context options scannerName) new.
 
     scanner stream: 'foo there' asPetitStream.
     result := scanner perform: #'foo'.
@@ -221,8 +240,17 @@
     self assert: scanner position = 0.
     self assert: scanner resultPosition = 3.
     self assert: scanner stream position = 4.
-    self assert: scanner result = #foo.		
+    self assert: scanner result = #foo.                 
         
     self assert: result.
+
+    "Modified: / 28-08-2015 / 14:16:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!PPCDistinctScannerTest class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/PPCLTokenizingOptimizationTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCLTokenizingOptimizationTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -18,8 +18,10 @@
 
 configuration
     configuration := PPCTokenizingConfiguration new.
-    configuration options generate: false.
+    configuration context options generate: false.
     ^ configuration
+
+    "Modified: / 28-08-2015 / 14:17:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 optimize: aPPParser
--- a/compiler/tests/PPCNodeFirstFollowNextTests.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCNodeFirstFollowNextTests.st	Sat Aug 29 07:56:14 2015 +0100
@@ -25,7 +25,9 @@
 
 setUp
     configuration := PPCConfiguration default.
-    configuration options generate: false.
+    configuration context options generate: false.
+
+    "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCNodeFirstFollowNextTests methodsFor:'support'!
@@ -162,7 +164,7 @@
 !
 
 testFirstNegate1
-    configuration options specialize: true.
+    configuration context options specialize: true.
     tree := self treeFrom: ('a' asParser negate, 'b' asParser).
     
     first := self first: tree.
@@ -170,6 +172,8 @@
     self assert: first size: 1.
     self assert: first anyMatchesType: PPCNotNode.
     self assert: first anyOne child literal = 'a'.
+
+    "Modified: / 28-08-2015 / 14:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testFirstNot
@@ -183,7 +187,7 @@
 !
 
 testFirstNot2
-    configuration options specialize: true.
+    configuration context options specialize: true.
     tree := self treeFrom: (#letter asParser not star, #letter asParser).
     
     first := self first: tree.
@@ -191,6 +195,8 @@
     self assert: first size: 2.
     self assert: first anyMatchesType: PPCNotNode.
     self assert: first anyMatchesType: PPCPredicateNode.
+
+    "Modified: / 28-08-2015 / 14:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testFirstNot4
@@ -323,11 +329,13 @@
 !
 
 testFirstSequence6
-    configuration options specialize: true.
+    configuration context options specialize: true.
     tree := self treeFrom: #space asParser star, 'a' asParser.
     
     tree firstFollowCache: nil.
     self should: [ self first: tree. ] raise: Exception.
+
+    "Modified: / 28-08-2015 / 14:18:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testFirstSequence7
@@ -351,7 +359,7 @@
 !
 
 testFirstStarMessagePredicate2
-    configuration options specialize: true.
+    configuration context options specialize: true.
     tree := self treeFrom: #space asParser star.
     
     first := self first: tree.
@@ -359,18 +367,20 @@
     self assert: first size: 2.
     self assert: first anyMatchesType: PPCMessagePredicateNode.
     self assert: first anyMatchesType: PPCSentinelNode.
-    
-    
+
+    "Modified: / 28-08-2015 / 14:18:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testFirstTerminal
-    configuration options specialize: true.
+    configuration context options specialize: true.
     tree := self treeFrom: 'a' asParser not.
 
     first := self first: tree.
     
     self assert: first size: 1.
     self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode.
+
+    "Modified: / 28-08-2015 / 14:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testFirstTerminal2
@@ -659,18 +669,20 @@
 
 testFollowTrimmingToken
     | token1 token2 |
-    configuration options specialize: false.
+    configuration context options specialize: false.
     token1 := #letter asParser plus trimmingToken name: 'token1'; yourself.
     token2 := #letter asParser plus trimmingToken name: 'token2'; yourself.
     
     
     tree := self treeFrom: token1, token2.
-    followSet := self 	followOf: 'token1' 
+    followSet := self   followOf: 'token1' 
                             in: tree 
                             suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]].
 
     self assert: followSet size: 1.
-    self assert: followSet anyMatchesType: PPCTrimmingTokenNode. 
+    self assert: followSet anyMatchesType: PPCTrimmingTokenNode.
+
+    "Modified: / 28-08-2015 / 14:18:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'!
--- a/compiler/tests/PPCNodeTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCNodeTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -148,7 +148,9 @@
 
 setUp
     configuration := PPCConfiguration default.
-    configuration options generate: false.
+    configuration context options generate: false.
+
+    "Modified: / 28-08-2015 / 14:19:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 treeFrom: parser
--- a/compiler/tests/PPCOptimizeChoicesTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCOptimizeChoicesTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -25,12 +25,11 @@
         profile: true.
                 
     configuration := PPCPluggableConfiguration on: [ :_self | 
-        _self toPPCIr.
-        _self cacheFirstFollow.
+        _self runPass: PPCCacheFirstFollowPass.
     ].
     configuration options: options.
 
-    "Modified: / 24-08-2015 / 23:40:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-08-2015 / 07:30:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testHasCommonPrefix
--- a/compiler/tests/PPCOverlappingTokensTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCOverlappingTokensTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -46,9 +46,8 @@
         profile: true;
         yourself.
         
-    configuration := PPCTokenizingConfiguration new
-        options: options;
-        yourself.
+    configuration := PPCTokenizingConfiguration new.
+    configuration context options: options.
         
     self cleanClass.
     
@@ -58,7 +57,7 @@
     keywordToken := (#word asParser plus, $: asParser) token trim name: 'kw'; yourself.
     assignmentToken := (':=' asParser) token trim name: 'assignment'; yourself.
 
-    "Modified: / 24-08-2015 / 23:40:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-08-2015 / 14:19:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
--- a/compiler/tests/PPCTokenizingCodeGeneratorTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCTokenizingCodeGeneratorTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -42,19 +42,18 @@
     self cleanClass.
     
     configuration := PPCPluggableConfiguration on: [ :_self | 
-        _self cacheFirstFollow.
-        _self buildParserClazz.
-        _self unmarkConsumeTokensForInline.
-        _self createFSAs.
-        _self buildScannerTokens.
-        _self buildScannerScans.        
+        _self runPass: PPCCacheFirstFollowPass.
+        _self runPass: PPCTokenizingCodeGenerator. 
+        _self runPass: PPCFSAVisitor.
+        _self runPass: PPCTokenCodeGenerator.
+        _self runPass: PPCScannerCodeGenerator.        
         _self generateScanner.
         _self generateParser.
     ] base: PPCConfiguration tokenizing.
 
     configuration options: options.
 
-    "Modified: / 24-08-2015 / 23:40:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-09-2015 / 22:34:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
--- a/compiler/tests/PPCTokenizingTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCTokenizingTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -48,13 +48,12 @@
         profile: true;
         yourself.
         
-    configuration := PPCTokenizingConfiguration new
-        options: options;
-        yourself.
-        
+    configuration := PPCTokenizingConfiguration new.
+    configuration context options: options.
+
     self cleanClass.
 
-    "Modified: / 24-08-2015 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-08-2015 / 14:20:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
@@ -483,7 +482,7 @@
 
 testWhitespace
     | token ws trimmingToken |
-    configuration options inline: false.
+    options inline: false.
     
     token := 'foo' asParser token.
     ws := #blank asParser star name: 'consumeWhitespace'; yourself.
@@ -498,11 +497,13 @@
     self assert: result first inputValue = 'foo'.
 
     self assert: (context invocations select: [:e | e = #scan_consumeWhitespace ]) size = 3.
+
+    "Modified: / 04-09-2015 / 06:13:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testWhitespace2
     | token ws trimmingToken |
-    configuration options inline: false.
+    options inline: false.
         
     token := 'foo' asParser token.
     ws := #blank asParser star name: 'consumeWhitespace'; yourself.
@@ -518,11 +519,13 @@
     self assert: result second inputValue = 'foo'.
 
     self assert: (context invocations select: [:e | e = #scan_consumeWhitespace ]) size = 4.
+
+    "Modified: / 04-09-2015 / 06:13:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testWhitespace3
     | token ws trimmingToken |
-    configuration options inline: false.
+    options inline: false.
         
     token := 'foo' asParser token.
     ws := #blank asParser star name: 'consumeWhitespace'; yourself.
@@ -539,5 +542,7 @@
     self assert: result third inputValue = 'foo'.
 
     self assert: (context invocations select: [:e | e = #scan_consumeWhitespace ]) size = 5.
+
+    "Modified: / 04-09-2015 / 06:13:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
--- a/compiler/tests/PPCUnivarsalGuardTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCUnivarsalGuardTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -26,11 +26,10 @@
         profile: true;
         yourself.
         
-    configuration := PPCUniversalConfiguration new
-        options: options;
-        yourself.
+    configuration := PPCUniversalConfiguration new.
+    configuration context options: options
 
-    "Modified: / 24-08-2015 / 23:40:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-08-2015 / 14:22:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 tearDown
--- a/compiler/tests/PPCUniversalOptimizationTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCUniversalOptimizationTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -23,17 +23,19 @@
     super setUp.
     
     configuration := PPCUniversalConfiguration new.
-    configuration options generate: false.
+    configuration context options generate: false.
     
-"	^ configuration := PPCPluggableConfiguration on:
+"       ^ configuration := PPCPluggableConfiguration on:
         [ :_self |
             _self toPPCIr.
             _self createTokens.
             _self specialize.
             _self createRecognizingComponents.
             _self inline.
-            _self merge.		
+            _self merge.                
         ]"
+
+    "Modified: / 28-08-2015 / 14:22:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCUniversalOptimizationTest methodsFor:'tests'!
--- a/compiler/tests/PPCUniversalTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/PPCUniversalTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -574,11 +574,10 @@
         debug: true;
         yourself.
         
-    configuration := PPCUniversalConfiguration new
-        options: options;
-        yourself.
+    configuration := PPCUniversalConfiguration new.
+    configuration context options: options
 
-    "Modified: / 24-08-2015 / 23:40:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-08-2015 / 14:22:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCUniversalTest class methodsFor:'documentation'!
--- a/compiler/tests/extras/Make.proto	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/Make.proto	Sat Aug 29 07:56:14 2015 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk/tests -I$(INCLUDE_TOP)/stx/goodies/petitparser/tests -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/compiler -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk -I$(INCLUDE_TOP)/stx/goodies/petitparser/tests -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
 
 
 # if you need any additional defines for embedded C code,
@@ -109,7 +109,6 @@
 	cd ../../../../sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../parsers/java && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../../parsers/smalltalk/tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
 
--- a/compiler/tests/extras/PPCLRPContainedElement.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/PPCLRPContainedElement.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Extras-Tests-LRP'
 !
 
+
 !PPCLRPContainedElement methodsFor:'accessing'!
 
 container
@@ -19,3 +20,10 @@
     container := anObject
 ! !
 
+!PPCLRPContainedElement class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/extras/PPCLRPEvent.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/PPCLRPEvent.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Extras-Tests-LRP'
 !
 
+
 !PPCLRPEvent class methodsFor:'instance creation'!
 
 named: aString trigger: aBlock
@@ -53,3 +54,10 @@
     aPPCLRPNodeVisitor visitEventNode: self
 ! !
 
+!PPCLRPEvent class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/extras/PPCLRPParserSmokeTest.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/PPCLRPParserSmokeTest.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Extras-Tests-LRP'
 !
 
+
 !PPCLRPParserSmokeTest class methodsFor:'accessing'!
 
 resources
@@ -39,3 +40,10 @@
     "Created: / 30-07-2015 / 19:07:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!PPCLRPParserSmokeTest class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/extras/PPCLRPState.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/PPCLRPState.st	Sat Aug 29 07:56:14 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Extras-Tests-LRP'
 !
 
+
 !PPCLRPState class methodsFor:'instance creation'!
 
 name: aString body: anArray
@@ -71,3 +72,10 @@
     aPPCLRPNodeVisitor visitStateNode: self.
 ! !
 
+!PPCLRPState class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/extras/abbrev.stc	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/abbrev.stc	Sat Aug 29 07:56:14 2015 +0100
@@ -1,43 +1,15 @@
 # automagically generated by the project definition
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
-PPCAbstractParserTest PPCAbstractParserTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
-PPCCompiledJavaVerificationTest PPCCompiledJavaVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
-PPCCompositeParserTest PPCCompositeParserTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
-PPCJavaTests PPCJavaTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
 PPCLRPNode PPCLRPNode stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPParser PPCLRPParser stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPParserSmokeTest PPCLRPParserSmokeTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 1
 PPCLRPSourcesResource PPCLRPSourcesResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 1
-PPCResources PPCResources stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
-PPCSetUpBeforeTearDownAfterResource PPCSetUpBeforeTearDownAfterResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 2
-PPCSmalltalkGrammarTests PPCSmalltalkGrammarTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserTests PPCSmalltalkParserTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkTests PPCSmalltalkTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCompiledJavaResource PPCompiledJavaResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
-PPCompiledJavaSyntaxTest PPCompiledJavaSyntaxTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
-PPExpressionGrammar PPExpressionGrammar stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 0
-PPExpressionGrammarTest PPExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPLL1ExpressionGrammar PPLL1ExpressionGrammar stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 0
-PPLL1ExpressionGrammarTest PPLL1ExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 stx_goodies_petitparser_compiler_tests_extras stx_goodies_petitparser_compiler_tests_extras stx:goodies/petitparser/compiler/tests/extras '* Projects & Packages *' 3
-PPCExpressionGrammarTest PPCExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPCExpressionGrammarVerificationTest PPCExpressionGrammarVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPCLL1ExpressionGrammarTest PPCLL1ExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 PPCLRPAction PPCLRPAction stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPCompiledParserSmokeTest PPCLRPCompiledParserSmokeTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 1
 PPCLRPContainedElement PPCLRPContainedElement stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPSpawn PPCLRPSpawn stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
-PPCSmalltalkGrammarTests_Tokenized PPCSmalltalkGrammarTests_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkGrammarTests_Universal PPCSmalltalkGrammarTests_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkGrammarVerificationTest PPCSmalltalkGrammarVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserTests_Tokenized PPCSmalltalkParserTests_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserTests_Universal PPCSmalltalkParserTests_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserVerificationTest PPCSmalltalkParserVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCExpressionGrammarTest_Tokenized PPCExpressionGrammarTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPCExpressionGrammarTest_Universal PPCExpressionGrammarTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPCLL1ExpressionGrammarTest_Tokenized PPCLL1ExpressionGrammarTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPCLL1ExpressionGrammarTest_Universal PPCLL1ExpressionGrammarTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 PPCLRPComment PPCLRPComment stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPCompiledParserSmokeTest_Universal PPCLRPCompiledParserSmokeTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 1
 PPCLRPErrorNode PPCLRPErrorNode stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
@@ -49,12 +21,40 @@
 PPCLRPState PPCLRPState stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPTransition PPCLRPTransition stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPVariable PPCLRPVariable stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
-PPCSmalltalkGrammarVerificationTest_Tokenized PPCSmalltalkGrammarVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkGrammarVerificationTest_Universal PPCSmalltalkGrammarVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserVerificationTest_Tokenized PPCSmalltalkParserVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCSmalltalkParserVerificationTest_Universal PPCSmalltalkParserVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPExpressionGrammarVerificationTest_Tokenized PPExpressionGrammarVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
-PPExpressionGrammarVerificationTest_Universal PPExpressionGrammarVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 PPCLRPEpsilonTransition PPCLRPEpsilonTransition stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPTimeoutTransition PPCLRPTimeoutTransition stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
 PPCLRPWildcardTransition PPCLRPWildcardTransition stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-LRP' 0
+PPCAbstractParserTest PPCAbstractParserTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
+PPCCompiledJavaVerificationTest PPCCompiledJavaVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
+PPCCompositeParserTest PPCCompositeParserTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
+PPCExpressionGrammarTest PPCExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCExpressionGrammarTest_Tokenized PPCExpressionGrammarTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCExpressionGrammarTest_Universal PPCExpressionGrammarTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCExpressionGrammarVerificationTest PPCExpressionGrammarVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCJavaTests PPCJavaTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
+PPCLL1ExpressionGrammarTest PPCLL1ExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCLL1ExpressionGrammarTest_Tokenized PPCLL1ExpressionGrammarTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCLL1ExpressionGrammarTest_Universal PPCLL1ExpressionGrammarTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPCResources PPCResources stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 1
+PPCSetUpBeforeTearDownAfterResource PPCSetUpBeforeTearDownAfterResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Support' 2
+PPCSmalltalkGrammarTests PPCSmalltalkGrammarTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkGrammarTests_Tokenized PPCSmalltalkGrammarTests_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkGrammarTests_Universal PPCSmalltalkGrammarTests_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkGrammarVerificationTest PPCSmalltalkGrammarVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkGrammarVerificationTest_Tokenized PPCSmalltalkGrammarVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkGrammarVerificationTest_Universal PPCSmalltalkGrammarVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserTests PPCSmalltalkParserTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserTests_Tokenized PPCSmalltalkParserTests_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserTests_Universal PPCSmalltalkParserTests_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserVerificationTest PPCSmalltalkParserVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserVerificationTest_Tokenized PPCSmalltalkParserVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkParserVerificationTest_Universal PPCSmalltalkParserVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCSmalltalkTests PPCSmalltalkTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
+PPCompiledJavaResource PPCompiledJavaResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
+PPCompiledJavaSyntaxTest PPCompiledJavaSyntaxTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
+PPExpressionGrammar PPExpressionGrammar stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 0
+PPExpressionGrammarTest PPExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPExpressionGrammarVerificationTest_Tokenized PPExpressionGrammarVerificationTest_Tokenized stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPExpressionGrammarVerificationTest_Universal PPExpressionGrammarVerificationTest_Universal stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
+PPLL1ExpressionGrammar PPLL1ExpressionGrammar stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 0
+PPLL1ExpressionGrammarTest PPLL1ExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
--- a/compiler/tests/extras/bc.mak	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/bc.mak	Sat Aug 29 07:56:14 2015 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk\tests -I$(INCLUDE_TOP)\stx\goodies\petitparser\tests -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\compiler -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk -I$(INCLUDE_TOP)\stx\goodies\petitparser\tests -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -59,7 +59,6 @@
 	pushd ..\..\..\..\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\parsers\java & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\..\parsers\smalltalk\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
 
--- a/compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st	Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st	Sat Aug 29 07:56:14 2015 +0100
@@ -84,11 +84,10 @@
 
     ^ #(
         #'stx:goodies/petitparser'    "PPCompositeParser - superclass of PPCLRPParser"
-        #'stx:goodies/petitparser/parsers/java'    "PPJavaLexiconTest - superclass of PPCompiledJavaSyntaxTest"
-        #'stx:goodies/petitparser/parsers/smalltalk/tests'    "PPSmalltalkGrammarTests - superclass of PPCSmalltalkGrammarTests"
-        #'stx:goodies/petitparser/tests'    "PPAbstractParserTest - superclass of PPCAbstractParserTest"
-        #'stx:goodies/sunit'    "TestAsserter - superclass of PPCAbstractParserTest"
-        #'stx:libbasic'    "LibraryDefinition - superclass of stx_goodies_petitparser_compiler_tests_extras"
+        #'stx:goodies/petitparser/parsers/java'    "PPJavaWhitespaceParser - extended"
+        #'stx:goodies/petitparser/tests'    "PPAbstractParserTest - superclass of PPCLRPCompiledParserSmokeTest"
+        #'stx:goodies/sunit'    "TestAsserter - superclass of PPCLRPCompiledParserSmokeTest"
+        #'stx:libbasic'    "Autoload - superclass of PPCAbstractParserTest"
     )
 !
 
@@ -103,9 +102,8 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:goodies/petitparser/compiler'    "PPCConfiguration - referenced by PPCExpressionGrammarTest_Tokenized>>compilerConfiguration"
-        #'stx:goodies/petitparser/parsers/smalltalk'    "PPSmalltalkGrammar - referenced by PPCSmalltalkGrammarTests>>petitParserClass"
-        #'stx:libbasic2'    "Random - referenced by PPCResources>>expressionOfSize:stream:"
+        #'stx:goodies/petitparser/compiler'    "PPCConfiguration - referenced by PPCLRPCompiledParserSmokeTest_Universal>>compilerConfiguration"
+        #'stx:goodies/petitparser/parsers/smalltalk'    "PPSmalltalkParser - referenced by PPCLRPParser>>methodizeBlock:withArguments:"
     )
 !
 
@@ -129,43 +127,15 @@
 
     ^ #(
         "<className> or (<className> attributes...) in load order"
-        (PPCAbstractParserTest autoload)
-        (PPCCompiledJavaVerificationTest autoload)
-        (PPCCompositeParserTest autoload)
-        (PPCJavaTests autoload)
         PPCLRPNode
         PPCLRPParser
         PPCLRPParserSmokeTest
         PPCLRPSourcesResource
-        (PPCResources autoload)
-        (PPCSetUpBeforeTearDownAfterResource autoload)
-        (PPCSmalltalkGrammarTests autoload)
-        (PPCSmalltalkParserTests autoload)
-        (PPCSmalltalkTests autoload)
-        (PPCompiledJavaResource autoload)
-        (PPCompiledJavaSyntaxTest autoload)
-        (PPExpressionGrammar autoload)
-        (PPExpressionGrammarTest autoload)
-        (PPLL1ExpressionGrammar autoload)
-        (PPLL1ExpressionGrammarTest autoload)
         (#'stx_goodies_petitparser_compiler_tests_extras' autoload)
-        (PPCExpressionGrammarTest autoload)
-        (PPCExpressionGrammarVerificationTest autoload)
-        (PPCLL1ExpressionGrammarTest autoload)
         PPCLRPAction
         PPCLRPCompiledParserSmokeTest
         PPCLRPContainedElement
         PPCLRPSpawn
-        (#'PPCSmalltalkGrammarTests_Tokenized' autoload)
-        (#'PPCSmalltalkGrammarTests_Universal' autoload)
-        (PPCSmalltalkGrammarVerificationTest autoload)
-        (#'PPCSmalltalkParserTests_Tokenized' autoload)
-        (#'PPCSmalltalkParserTests_Universal' autoload)
-        (PPCSmalltalkParserVerificationTest autoload)
-        (#'PPCExpressionGrammarTest_Tokenized' autoload)
-        (#'PPCExpressionGrammarTest_Universal' autoload)
-        (#'PPCLL1ExpressionGrammarTest_Tokenized' autoload)
-        (#'PPCLL1ExpressionGrammarTest_Universal' autoload)
         PPCLRPComment
         #'PPCLRPCompiledParserSmokeTest_Universal'
         PPCLRPErrorNode
@@ -177,15 +147,43 @@
         PPCLRPState
         PPCLRPTransition
         PPCLRPVariable
-        (#'PPCSmalltalkGrammarVerificationTest_Tokenized' autoload)
-        (#'PPCSmalltalkGrammarVerificationTest_Universal' autoload)
-        (#'PPCSmalltalkParserVerificationTest_Tokenized' autoload)
-        (#'PPCSmalltalkParserVerificationTest_Universal' autoload)
-        (#'PPExpressionGrammarVerificationTest_Tokenized' autoload)
-        (#'PPExpressionGrammarVerificationTest_Universal' autoload)
         PPCLRPEpsilonTransition
         PPCLRPTimeoutTransition
         PPCLRPWildcardTransition
+        (PPCAbstractParserTest autoload)
+        (PPCCompiledJavaVerificationTest autoload)
+        (PPCCompositeParserTest autoload)
+        (PPCExpressionGrammarTest autoload)
+        (#'PPCExpressionGrammarTest_Tokenized' autoload)
+        (#'PPCExpressionGrammarTest_Universal' autoload)
+        (PPCExpressionGrammarVerificationTest autoload)
+        (PPCJavaTests autoload)
+        (PPCLL1ExpressionGrammarTest autoload)
+        (#'PPCLL1ExpressionGrammarTest_Tokenized' autoload)
+        (#'PPCLL1ExpressionGrammarTest_Universal' autoload)
+        (PPCResources autoload)
+        (PPCSetUpBeforeTearDownAfterResource autoload)
+        (PPCSmalltalkGrammarTests autoload)
+        (#'PPCSmalltalkGrammarTests_Tokenized' autoload)
+        (#'PPCSmalltalkGrammarTests_Universal' autoload)
+        (PPCSmalltalkGrammarVerificationTest autoload)
+        (#'PPCSmalltalkGrammarVerificationTest_Tokenized' autoload)
+        (#'PPCSmalltalkGrammarVerificationTest_Universal' autoload)
+        (PPCSmalltalkParserTests autoload)
+        (#'PPCSmalltalkParserTests_Tokenized' autoload)
+        (#'PPCSmalltalkParserTests_Universal' autoload)
+        (PPCSmalltalkParserVerificationTest autoload)
+        (#'PPCSmalltalkParserVerificationTest_Tokenized' autoload)
+        (#'PPCSmalltalkParserVerificationTest_Universal' autoload)
+        (PPCSmalltalkTests autoload)
+        (PPCompiledJavaResource autoload)
+        (PPCompiledJavaSyntaxTest autoload)
+        (PPExpressionGrammar autoload)
+        (PPExpressionGrammarTest autoload)
+        (#'PPExpressionGrammarVerificationTest_Tokenized' autoload)
+        (#'PPExpressionGrammarVerificationTest_Universal' autoload)
+        (PPLL1ExpressionGrammar autoload)
+        (PPLL1ExpressionGrammarTest autoload)
     )
 !