Introduced PPMappedActionParser, a specialized parser for map:ped actions.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 02 Jun 2015 17:25:57 +0100
changeset 480 5b0254cca4db
parent 479 6316a98b7150
child 481 34ee0d3c72e7
Introduced PPMappedActionParser, a specialized parser for map:ped actions. In order to compile nicer code, compiler has to be able to tell between simple (==>) action parser and mapped (map:) action parser.
compiler/Make.proto
compiler/Make.spec
compiler/PPMappedActionParser.st
compiler/abbrev.stc
compiler/bc.mak
compiler/extensions.st
compiler/libInit.cc
compiler/stx_goodies_petitparser_compiler.st
--- a/compiler/Make.proto	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/Make.proto	Tue Jun 02 17:25:57 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/analyzer -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java -I$(INCLUDE_TOP)/stx/goodies/petitparser/parsers/smalltalk -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/analyzer -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 -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -149,6 +149,7 @@
 $(OUTDIR)PPCPluggableConfiguration.$(O) PPCPluggableConfiguration.$(H): PPCPluggableConfiguration.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenGuard.$(O) PPCTokenGuard.$(H): PPCTokenGuard.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)PPCompiledParser.$(O) PPCompiledParser.$(H): PPCompiledParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPMappedActionParser.$(O) PPMappedActionParser.$(H): PPMappedActionParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPActionParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_petitparser_compiler.$(O) stx_goodies_petitparser_compiler.$(H): stx_goodies_petitparser_compiler.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
 $(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)
--- a/compiler/Make.spec	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/Make.spec	Tue Jun 02 17:25:57 2015 +0100
@@ -70,6 +70,7 @@
 	PPCPluggableConfiguration \
 	PPCTokenGuard \
 	PPCompiledParser \
+	PPMappedActionParser \
 	stx_goodies_petitparser_compiler \
 	PPCAbstractLiteralNode \
 	PPCAbstractPredicateNode \
@@ -163,6 +164,7 @@
     $(OUTDIR_SLASH)PPCPluggableConfiguration.$(O) \
     $(OUTDIR_SLASH)PPCTokenGuard.$(O) \
     $(OUTDIR_SLASH)PPCompiledParser.$(O) \
+    $(OUTDIR_SLASH)PPMappedActionParser.$(O) \
     $(OUTDIR_SLASH)stx_goodies_petitparser_compiler.$(O) \
     $(OUTDIR_SLASH)PPCAbstractLiteralNode.$(O) \
     $(OUTDIR_SLASH)PPCAbstractPredicateNode.$(O) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPMappedActionParser.st	Tue Jun 02 17:25:57 2015 +0100
@@ -0,0 +1,22 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPActionParser subclass:#PPMappedActionParser
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitParser-Parsers'
+!
+
+!PPMappedActionParser methodsFor:'parsing'!
+
+parseOn: aPPContext
+    | element |
+    ^ (element := parser parseOn: aPPContext) isPetitFailure
+            ifFalse: [ block valueWithArguments: element ]
+            ifTrue: [ element ]
+
+    "Created: / 02-06-2015 / 17:15:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/abbrev.stc	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/abbrev.stc	Tue Jun 02 17:25:57 2015 +0100
@@ -20,6 +20,7 @@
 PPCPluggableConfiguration PPCPluggableConfiguration stx:goodies/petitparser/compiler 'PetitCompiler-Core' 0
 PPCTokenGuard PPCTokenGuard stx:goodies/petitparser/compiler 'PetitCompiler-Guards' 0
 PPCompiledParser PPCompiledParser stx:goodies/petitparser/compiler 'PetitCompiler-Parsers' 4
+PPMappedActionParser PPMappedActionParser stx:goodies/petitparser/compiler 'PetitParser-Parsers' 0
 stx_goodies_petitparser_compiler stx_goodies_petitparser_compiler stx:goodies/petitparser/compiler '* Projects & Packages *' 3
 PPCAbstractLiteralNode PPCAbstractLiteralNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
 PPCAbstractPredicateNode PPCAbstractPredicateNode stx:goodies/petitparser/compiler 'PetitCompiler-Nodes' 0
--- a/compiler/bc.mak	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/bc.mak	Tue Jun 02 17:25:57 2015 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\analyzer -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java -I$(INCLUDE_TOP)\stx\goodies\petitparser\parsers\smalltalk -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\analyzer -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 -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -96,6 +96,7 @@
 $(OUTDIR)PPCPluggableConfiguration.$(O) PPCPluggableConfiguration.$(H): PPCPluggableConfiguration.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCTokenGuard.$(O) PPCTokenGuard.$(H): PPCTokenGuard.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)PPCompiledParser.$(O) PPCompiledParser.$(H): PPCompiledParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPMappedActionParser.$(O) PPMappedActionParser.$(H): PPMappedActionParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPActionParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_petitparser_compiler.$(O) stx_goodies_petitparser_compiler.$(H): stx_goodies_petitparser_compiler.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
 $(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)
--- a/compiler/extensions.st	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/extensions.st	Tue Jun 02 17:25:57 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "{ Package: 'stx:goodies/petitparser/compiler' }"!
 
 !Character methodsFor:'*petitcompiler'!
@@ -625,6 +627,16 @@
     ^ aCollection
 ! !
 
+!PPSequenceParser methodsFor:'*petitcompiler'!
+
+map: aBlock
+        ^ aBlock numArgs = self children size
+                ifTrue: [ PPMappedActionParser on: self block: aBlock ]
+                ifFalse: [ self error: aBlock numArgs asString , ' arguments expected.' ]
+
+    "Modified: / 02-06-2015 / 17:16:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
 
 comment
--- a/compiler/libInit.cc	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/libInit.cc	Tue Jun 02 17:25:57 2015 +0100
@@ -46,6 +46,7 @@
 _PPCPluggableConfiguration_Init(pass,__pRT__,snd);
 _PPCTokenGuard_Init(pass,__pRT__,snd);
 _PPCompiledParser_Init(pass,__pRT__,snd);
+_PPMappedActionParser_Init(pass,__pRT__,snd);
 _stx_137goodies_137petitparser_137compiler_Init(pass,__pRT__,snd);
 _PPCAbstractLiteralNode_Init(pass,__pRT__,snd);
 _PPCAbstractPredicateNode_Init(pass,__pRT__,snd);
--- a/compiler/stx_goodies_petitparser_compiler.st	Tue Jun 02 00:16:55 2015 +0100
+++ b/compiler/stx_goodies_petitparser_compiler.st	Tue Jun 02 17:25:57 2015 +0100
@@ -75,6 +75,7 @@
 
     ^ #(
         #'stx:goodies/petitparser/analyzer'    "PPSentinel - referenced by PPCompiledParser class>>referringParser"
+        #'stx:goodies/refactoryBrowser/parser'    "RBAssignmentNode - referenced by PPCCodeGenerator>>visitActionNode:"
         #'stx:libbasic2'    "Stack - referenced by PPCCompiler>>initializeForCompiledClassName:"
         #'stx:libwidg'    "ScrollableView - referenced by PPCNode>>inspector2TabTree"
         #'stx:libwidg2'    "HierarchicalListView - referenced by PPCNode>>inspector2TabTree"
@@ -128,6 +129,7 @@
         PPCPluggableConfiguration
         PPCTokenGuard
         PPCompiledParser
+        PPMappedActionParser
         #'stx_goodies_petitparser_compiler'
         PPCAbstractLiteralNode
         PPCAbstractPredicateNode
@@ -312,6 +314,7 @@
         PPSmalltalkWhitespaceParser hash
         PPParser compileTokenizing
         PPCompositeParser asCompilerNode
+        PPSequenceParser map:
     )
 ! !