--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCStarMessagePredicateNode.st Sun Oct 26 01:03:31 2014 +0000
@@ -0,0 +1,73 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+PPCNode subclass:#PPCStarMessagePredicateNode
+ instanceVariableNames:'message'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitCompiler-Nodes'
+!
+
+PPCStarMessagePredicateNode comment:''
+!
+
+!PPCStarMessagePredicateNode methodsFor:'accessing'!
+
+acceptsEpsilon
+ ^ true
+!
+
+message
+
+ ^ message
+!
+
+message: anObject
+
+ message := anObject
+!
+
+prefix
+ ^ #starPredicate
+! !
+
+!PPCStarMessagePredicateNode methodsFor:'as yet unclassified'!
+
+compileWith: compiler effect: effect id: id
+ compiler startMethod: id.
+ compiler addVariable: 'retval'.
+ compiler add: 'retval := OrderedCollection new.'.
+ compiler add: '[ context peek ', message, ' ] whileTrue: ['.
+ compiler indent.
+ compiler add: ' retval add: context next'.
+ compiler dedent.
+ compiler add: '].'.
+ compiler add: '^ retval asArray'.
+ ^ compiler stopMethod.
+!
+
+compileWith_old: compiler effect: effect id: id
+ compiler startMethod: id.
+ compiler addVariable: 'retval'.
+ compiler add: 'retval := OrderedCollection new.'.
+ compiler add: '[ context atEnd ] whileFalse: ['.
+ compiler indent.
+ compiler add: '(context uncheckedPeek ', message,')'.
+ compiler indent.
+ compiler add: ' ifFalse: [ ^ retval asArray ].'.
+ compiler dedent.
+ compiler add: ' retval add: context next'.
+ compiler dedent.
+ compiler add: '].'.
+ compiler add: '^ retval asArray'.
+ ^ compiler stopMethod.
+! !
+
+!PPCStarMessagePredicateNode methodsFor:'optimizing'!
+
+asFast
+ ^ PPCTokenStarMessagePredicateNode new
+ name: name;
+ message: message;
+ yourself
+! !
+