Introduced PPCMappedActionNode for PPMappedActionParser.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 03 Jun 2015 06:23:49 +0100
changeset 481 34ee0d3c72e7
parent 480 5b0254cca4db
child 482 9a7e7a05233f
Introduced PPCMappedActionNode for PPMappedActionParser. It's compilation is not yet ideal, bot works for now.
compiler/Make.proto
compiler/Make.spec
compiler/PPCCodeBlock.st
compiler/PPCCodeGenerator.st
compiler/PPCInlinedMethod.st
compiler/PPCMappedActionNode.st
compiler/PPCMethod.st
compiler/PPCNodeVisitor.st
compiler/PPMappedActionParser.st
compiler/abbrev.stc
compiler/bc.mak
compiler/benchmarks/Make.proto
compiler/benchmarks/abbrev.stc
compiler/benchmarks/bc.mak
compiler/benchmarks/stx_goodies_petitparser_compiler_benchmarks.st
compiler/libInit.cc
compiler/stx_goodies_petitparser_compiler.st
compiler/tests/PPCCodeGeneratorTest.st
compiler/tests/extras/Make.proto
compiler/tests/extras/PPLL1ExpressionGrammar.st
compiler/tests/extras/abbrev.stc
compiler/tests/extras/bc.mak
compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st
tests/Make.proto
tests/PPExtensionTest.st
tests/bc.mak
--- a/compiler/Make.proto	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/Make.proto	Wed Jun 03 06:23:49 2015 +0100
@@ -217,6 +217,7 @@
 $(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)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)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)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPActionParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPAndParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPCharSetPredicate.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPChoiceParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPCompositeParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPContext.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPEndOfInputParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPEpsilonParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPFailure.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPFlattenParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPListParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPLiteralObjectParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPLiteralParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPLiteralSequenceParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPNotParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPOptionalParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPPluggableParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPPossessiveRepeatingParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPPredicateObjectParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPPredicateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPRepeatingParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPSequenceParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPStream.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPToken.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPTokenParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPTrimmingParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PPJavaWhitespaceParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk/PPSmalltalkGrammar.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk/PPSmalltalkTokenParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk/PPSmalltalkWhitespaceParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Character.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(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) $(INCLUDE_TOP)/stx/libbasic/UndefinedObject.$(H) $(STCHDR)
--- a/compiler/Make.spec	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/Make.spec	Wed Jun 03 06:23:49 2015 +0100
@@ -138,6 +138,7 @@
 	PPCTokenChoiceNode \
 	PPCTrimNode \
 	PPCTrimmingCharacterTokenNode \
+	PPCMappedActionNode \
 	PPCTokenStarMessagePredicateNode \
 	PPCTokenStarSeparatorNode \
 
@@ -232,6 +233,7 @@
     $(OUTDIR_SLASH)PPCTokenChoiceNode.$(O) \
     $(OUTDIR_SLASH)PPCTrimNode.$(O) \
     $(OUTDIR_SLASH)PPCTrimmingCharacterTokenNode.$(O) \
+    $(OUTDIR_SLASH)PPCMappedActionNode.$(O) \
     $(OUTDIR_SLASH)PPCTokenStarMessagePredicateNode.$(O) \
     $(OUTDIR_SLASH)PPCTokenStarSeparatorNode.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
--- a/compiler/PPCCodeBlock.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPCCodeBlock.st	Wed Jun 03 06:23:49 2015 +0100
@@ -44,7 +44,9 @@
         (aStringOrBlockOrRBParseNode isKindOf: RBProgramNode) ifTrue:[ 
             aStringOrBlockOrRBParseNode isSequence ifTrue:[
                 aStringOrBlockOrRBParseNode temporaries do:[:e |  
-                    self allocateTemporaryVariableNamed: e name.      
+                    (temporaries includes: e name) ifFalse:[ 
+                        temporaries add: e name
+                    ].
                 ].
                 aStringOrBlockOrRBParseNode statements do:[:e|
                     buffer nextPutAll: e formattedCode; nextPut: $..  
@@ -61,7 +63,7 @@
     ].
 
     "Created: / 01-06-2015 / 21:07:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 02-06-2015 / 00:06:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-06-2015 / 05:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 codeIndent
--- a/compiler/PPCCodeGenerator.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPCCodeGenerator.st	Wed Jun 03 06:23:49 2015 +0100
@@ -400,6 +400,44 @@
     compiler add: '].'.
 !
 
+visitMappedActionNode: node
+    | blockNode blockBody |
+
+    blockNode := node block ast copy.
+    blockBody := blockNode body.
+
+    "Block return value is return value of last statement.
+     So if the method is not inline, make last statement a return.
+        if the method is inline, make it assignment to retvalVar."
+    compiler currentMethod isInline ifTrue:[ 
+        |  assignment |
+
+        assignment := RBAssignmentNode variable: (RBVariableNode named: self retvalVar) value:  blockBody statements last.
+        blockBody replaceNode: blockBody statements last withNode: assignment.
+    ] ifFalse:[  
+        | return |
+
+        return := RBReturnNode value: blockBody statements last.
+        blockBody replaceNode: blockBody statements last withNode: return.
+    ].
+
+    compiler codeStoreValueOf: [ self visit: node child ] intoVariable: self retvalVar.
+    compiler codeIf: 'error' then: [ 
+        compiler codeReturn: 'failure'. 
+    ] else: [
+        "First, extract mapped elements to variable..."
+        blockNode arguments withIndexDo:[ :arg :idx |
+            compiler allocateTemporaryVariableNamed: arg name.
+            compiler codeAssign: (self retvalVar , ' at: ', idx printString) to: arg name.
+            compiler add: '.'.
+        ].
+        compiler code: blockBody.    
+    ]
+
+    "Created: / 02-06-2015 / 17:28:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-06-2015 / 06:10:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 visitMessagePredicateNode: node
     compiler add: '(context peek ', node message, ') ifFalse: ['.
     compiler codeError: 'predicate not found'.
--- a/compiler/PPCInlinedMethod.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPCInlinedMethod.st	Wed Jun 03 06:23:49 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Compiler-Codegen'
 !
 
+
 !PPCInlinedMethod methodsFor:'as yet unclassified'!
 
 call
@@ -39,3 +40,10 @@
    "Created: / 23-04-2015 / 21:06:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!PPCInlinedMethod class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCMappedActionNode.st	Wed Jun 03 06:23:49 2015 +0100
@@ -0,0 +1,19 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCActionNode subclass:#PPCMappedActionNode
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitParser-Parsers'
+!
+
+!PPCMappedActionNode methodsFor:'visiting'!
+
+accept: visitor
+    ^ visitor visitMappedActionNode: self
+
+    "Created: / 02-06-2015 / 17:27:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/PPCMethod.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPCMethod.st	Wed Jun 03 06:23:49 2015 +0100
@@ -116,7 +116,7 @@
     innerBlock := PPCCodeBlock new.
     innerBlock indentationLevel: outerBlock indentationLevel + 1.  
     [ 
-        buffer addOnLine:'['.
+        buffer addOnLine:'['; nl; codeIndent.
         buffer := innerBlock.
         self code: contents.
     ] ensure:[
@@ -130,6 +130,7 @@
     ]
 
     "Created: / 01-06-2015 / 22:33:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-06-2015 / 06:11:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !PPCMethod methodsFor:'code generation - indenting'!
--- a/compiler/PPCNodeVisitor.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPCNodeVisitor.st	Wed Jun 03 06:23:49 2015 +0100
@@ -167,6 +167,12 @@
     ^ self visitNode: node.
 !
 
+visitMappedActionNode: node
+    ^ self visitActionNode: node
+
+    "Created: / 02-06-2015 / 17:28:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 visitMessagePredicateNode: node
     ^ self visitNode: node
 !
--- a/compiler/PPMappedActionParser.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/PPMappedActionParser.st	Wed Jun 03 06:23:49 2015 +0100
@@ -9,6 +9,20 @@
 	category:'PetitParser-Parsers'
 !
 
+!PPMappedActionParser methodsFor:'*petitcompiler'!
+
+asCompilerNode
+    ^ PPCMappedActionNode new
+        name: self name;
+        block: block;
+        child: parser;
+        properties: properties;
+        parser: self;
+        yourself
+
+    "Created: / 02-06-2015 / 17:27:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !PPMappedActionParser methodsFor:'parsing'!
 
 parseOn: aPPContext
--- a/compiler/abbrev.stc	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/abbrev.stc	Wed Jun 03 06:23:49 2015 +0100
@@ -88,5 +88,6 @@
 PPCTokenChoiceNode PPCTokenChoiceNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCTrimNode PPCTrimNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCTrimmingCharacterTokenNode PPCTrimmingCharacterTokenNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
+PPCMappedActionNode PPCMappedActionNode stx:goodies/petitparser/compiler 'PetitParser-Parsers' 0
 PPCTokenStarMessagePredicateNode PPCTokenStarMessagePredicateNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCTokenStarSeparatorNode PPCTokenStarSeparatorNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
--- a/compiler/bc.mak	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/bc.mak	Wed Jun 03 06:23:49 2015 +0100
@@ -164,6 +164,7 @@
 $(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)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)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)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPActionParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPAndParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPCharSetPredicate.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPChoiceParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPCompositeParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPContext.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPEndOfInputParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPEpsilonParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPFailure.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPFlattenParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPListParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPLiteralObjectParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPLiteralParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPLiteralSequenceParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPNotParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPOptionalParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPPluggableParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPPossessiveRepeatingParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPPredicateObjectParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPPredicateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPRepeatingParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPSequenceParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPStream.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPToken.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPTokenParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPTrimmingParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PPJavaWhitespaceParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk\PPSmalltalkGrammar.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk\PPSmalltalkTokenParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk\PPSmalltalkWhitespaceParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Character.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(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) $(INCLUDE_TOP)\stx\libbasic\UndefinedObject.$(H) $(STCHDR)
--- a/compiler/benchmarks/Make.proto	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/benchmarks/Make.proto	Wed Jun 03 06:23:49 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/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
+LOCALINCLUDES= -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
 
 
 # if you need any additional defines for embedded C code,
@@ -104,8 +104,13 @@
 	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/abbrev.stc	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/benchmarks/abbrev.stc	Wed Jun 03 06:23:49 2015 +0100
@@ -3,5 +3,5 @@
 # it provides information about a classes filename, category and especially namespace.
 PPCBenchmark PPCBenchmark stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Core' 0
 PPCSmalltalkNoopParser PPCSmalltalkNoopParser stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Parsers' 0
+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
-PPCSmalltalkNoopParserTests PPCSmalltalkNoopParserTests stx:goodies/petitparser/compiler/benchmarks 'PetitCompiler-Benchmarks-Parsers-Tests' 1
--- a/compiler/benchmarks/bc.mak	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/benchmarks/bc.mak	Wed Jun 03 06:23:49 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\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
+LOCALINCLUDES= -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
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -54,8 +54,13 @@
 	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	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/benchmarks/stx_goodies_petitparser_compiler_benchmarks.st	Wed Jun 03 06:23:49 2015 +0100
@@ -61,7 +61,10 @@
     ^ #(
         #'stx:goodies/petitparser'    "PPCompositeParser - superclass of PPCSmalltalkNoopParser"
         #'stx:goodies/petitparser/parsers/smalltalk'    "PPSmalltalkGrammar - superclass of PPCSmalltalkNoopParser"
-        #'stx:libbasic'    "Autoload - superclass of PPCSmalltalkNoopParserTests"
+        #'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"
     )
 !
 
@@ -105,8 +108,8 @@
         "<className> or (<className> attributes...) in load order"
         PPCBenchmark
         PPCSmalltalkNoopParser
+        (PPCSmalltalkNoopParserTests autoload)
         #'stx_goodies_petitparser_compiler_benchmarks'
-        (PPCSmalltalkNoopParserTests autoload)
     )
 !
 
--- a/compiler/libInit.cc	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/libInit.cc	Wed Jun 03 06:23:49 2015 +0100
@@ -114,6 +114,7 @@
 _PPCTokenChoiceNode_Init(pass,__pRT__,snd);
 _PPCTrimNode_Init(pass,__pRT__,snd);
 _PPCTrimmingCharacterTokenNode_Init(pass,__pRT__,snd);
+_PPCMappedActionNode_Init(pass,__pRT__,snd);
 _PPCTokenStarMessagePredicateNode_Init(pass,__pRT__,snd);
 _PPCTokenStarSeparatorNode_Init(pass,__pRT__,snd);
 
--- a/compiler/stx_goodies_petitparser_compiler.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/stx_goodies_petitparser_compiler.st	Wed Jun 03 06:23:49 2015 +0100
@@ -197,6 +197,7 @@
         PPCTokenChoiceNode
         PPCTrimNode
         PPCTrimmingCharacterTokenNode
+        PPCMappedActionNode
         PPCTokenStarMessagePredicateNode
         PPCTokenStarSeparatorNode
     )
--- a/compiler/tests/PPCCodeGeneratorTest.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/PPCCodeGeneratorTest.st	Wed Jun 03 06:23:49 2015 +0100
@@ -422,6 +422,25 @@
     self assert: parser fail: 'boo'.
 !
 
+testMappedActionNode1
+    node := ((#letter asParser , #letter asParser) 
+            map:[:a :b | String with:a with:b ]) asCompilerTree.
+    self compileTree:node.
+    self 
+        assert:parser
+        parse:'ab'
+        to:'ab'.
+    self 
+        assert:parser
+        parse:'cz'
+        to:'cz'.
+    self assert:parser fail:''.
+    self assert:parser fail:'asd'.
+
+    "Created: / 02-06-2015 / 17:04:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 03-06-2015 / 06:10:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 testMessagePredicate
     | messageNode |
     messageNode := PPCMessagePredicateNode new
--- a/compiler/tests/extras/Make.proto	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/extras/Make.proto	Wed Jun 03 06:23:49 2015 +0100
@@ -108,6 +108,7 @@
 	cd ../../../../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../../sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../../parsers/java && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
 
--- a/compiler/tests/extras/PPLL1ExpressionGrammar.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/extras/PPLL1ExpressionGrammar.st	Wed Jun 03 06:23:49 2015 +0100
@@ -9,6 +9,7 @@
 	category:'PetitCompiler-Extras-Tests-Expressions'
 !
 
+
 !PPLL1ExpressionGrammar methodsFor:'as yet unclassified'!
 
 add
@@ -78,3 +79,10 @@
     ^ $+ asParser trimmingToken, term
 ! !
 
+!PPLL1ExpressionGrammar class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/compiler/tests/extras/abbrev.stc	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/extras/abbrev.stc	Wed Jun 03 06:23:49 2015 +0100
@@ -9,6 +9,7 @@
 PPCompiledExpressionGrammarResource PPCompiledExpressionGrammarResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 PPCompiledExpressionGrammarTest PPCompiledExpressionGrammarTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 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
 PPCompiledSmalltalkGrammarResource PPCompiledSmalltalkGrammarResource stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
 PPCompiledSmalltalkGrammarTests PPCompiledSmalltalkGrammarTests stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
 PPExpressionGrammar PPExpressionGrammar stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 0
@@ -26,4 +27,3 @@
 PPCompiledSmalltalkVerificationTest PPCompiledSmalltalkVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
 PPTokenizedExpressionsVerificationTest PPTokenizedExpressionsVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Expressions' 1
 PPTokenizedSmalltalkVerificationTest PPTokenizedSmalltalkVerificationTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Smalltalk' 1
-PPCompiledJavaSyntaxTest PPCompiledJavaSyntaxTest stx:goodies/petitparser/compiler/tests/extras 'PetitCompiler-Extras-Tests-Java' 1
--- a/compiler/tests/extras/bc.mak	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/extras/bc.mak	Wed Jun 03 06:23:49 2015 +0100
@@ -58,6 +58,7 @@
 	pushd ..\..\..\..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\..\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\parsers\java & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
 
--- a/compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/compiler/tests/extras/stx_goodies_petitparser_compiler_tests_extras.st	Wed Jun 03 06:23:49 2015 +0100
@@ -84,9 +84,10 @@
 
     ^ #(
         #'stx:goodies/petitparser'    "PPCompositeParser - superclass of PPExpressionGrammar"
+        #'stx:goodies/petitparser/parsers/java'    "PPJavaLexiconTest - superclass of PPCompiledJavaSyntaxTest"
         #'stx:goodies/petitparser/tests'    "PPAbstractParserTest - superclass of PPCCompiledJavaVerificationTest"
         #'stx:goodies/sunit'    "TestAsserter - superclass of PPCCompiledJavaVerificationTest"
-        #'stx:libbasic'    "Autoload - superclass of PPCompiledJavaSyntaxTest"
+        #'stx:libbasic'    "LibraryDefinition - superclass of stx_goodies_petitparser_compiler_tests_extras"
     )
 !
 
@@ -102,7 +103,6 @@
 
     ^ #(
         #'stx:goodies/petitparser/compiler'    "PPCArguments - referenced by PPCSmalltalkTests>>setUp"
-        #'stx:goodies/petitparser/parsers/java'    "PPJavaSyntax - referenced by PPCCompiledJavaVerificationTest>>javaSyntax"
         #'stx:goodies/petitparser/parsers/smalltalk'    "PPSmalltalkGrammar - referenced by PPCSmalltalkVerificationTest>>smalltalkGrammar"
         #'stx:libbasic2'    "Random - referenced by PPCResources>>expressionOfSize:stream:"
     )
@@ -136,6 +136,7 @@
         PPCompiledExpressionGrammarResource
         PPCompiledExpressionGrammarTest
         PPCompiledJavaResource
+        (PPCompiledJavaSyntaxTest autoload)
         PPCompiledSmalltalkGrammarResource
         PPCompiledSmalltalkGrammarTests
         PPExpressionGrammar
@@ -153,7 +154,6 @@
         PPCompiledSmalltalkVerificationTest
         PPTokenizedExpressionsVerificationTest
         PPTokenizedSmalltalkVerificationTest
-        (PPCompiledJavaSyntaxTest autoload)
     )
 !
 
--- a/tests/Make.proto	Tue Jun 02 17:25:57 2015 +0100
+++ b/tests/Make.proto	Wed Jun 03 06:23:49 2015 +0100
@@ -103,7 +103,6 @@
 prereq:
 	cd ../../../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
--- a/tests/PPExtensionTest.st	Tue Jun 02 17:25:57 2015 +0100
+++ b/tests/PPExtensionTest.st	Wed Jun 03 06:23:49 2015 +0100
@@ -112,16 +112,18 @@
 !PPExtensionTest methodsFor:'testing-stream'!
 
 testStream
-	| dot stream |
-	dot := (Character codePoint: 183) asString.
-	stream := 'abc' readStream asPetitStream.
-	self assert: stream class equals: PPStream.
-	self assert: stream printString equals: dot , 'abc'.
-	self assert: stream peek equals: $a.
-	self assert: stream uncheckedPeek equals: $a.
-	self assert: stream next equals: $a.
-	self assert: stream printString equals: 'a' , dot , 'bc'.
-	self assert: stream asPetitStream equals: stream
+        | dot stream |
+        dot := String with: (Character codePoint: 183).
+        stream := 'abc' readStream asPetitStream.
+        self assert: stream class equals: PPStream.
+        self assert: stream printString equals: dot , 'abc'.
+        self assert: stream peek equals: $a.
+        self assert: stream uncheckedPeek equals: $a.
+        self assert: stream next equals: $a.
+        self assert: stream printString equals: 'a' , dot , 'bc'.
+        self assert: stream asPetitStream equals: stream
+
+    "Modified: / 02-06-2015 / 17:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testText
--- a/tests/bc.mak	Tue Jun 02 17:25:57 2015 +0100
+++ b/tests/bc.mak	Wed Jun 03 06:23:49 2015 +0100
@@ -53,7 +53,6 @@
 prereq:
 	pushd ..\..\..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\..\libbasic3 & $(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) "