--- a/compiler/extensions.st Tue Apr 21 17:20:11 2015 +0100
+++ b/compiler/extensions.st Thu Apr 30 23:43:14 2015 +0200
@@ -43,6 +43,14 @@
!PPCharSetPredicate methodsFor:'*petitcompiler'!
+= anObject
+ self == anObject ifTrue: [ ^ true ].
+ self class == anObject class ifFalse: [ ^ false ].
+ ^ classification = anObject classification
+! !
+
+!PPCharSetPredicate methodsFor:'*petitcompiler'!
+
block
^ block
! !
@@ -62,6 +70,12 @@
^ classification = anotherPredicate classification.
! !
+!PPCharSetPredicate methodsFor:'*petitcompiler'!
+
+hash
+ ^ classification hash
+! !
+
!PPChoiceParser methodsFor:'*petitcompiler'!
asCompilerNode
@@ -88,6 +102,12 @@
!PPContext methodsFor:'*petitcompiler'!
+atWs
+ ^ false
+! !
+
+!PPContext methodsFor:'*petitcompiler'!
+
comment
^ self globalAt: #comment ifAbsent: [ nil ].
! !
@@ -124,12 +144,24 @@
!PPContext methodsFor:'*petitcompiler'!
+methodInvoked: whatever
+ "nothing to do"
+! !
+
+!PPContext methodsFor:'*petitcompiler'!
+
peek: anInteger
^ stream peek: anInteger
! !
!PPContext methodsFor:'*petitcompiler'!
+setWs
+ "nothing to do"
+! !
+
+!PPContext methodsFor:'*petitcompiler'!
+
whitespace
^ self globalAt: #whitespace ifAbsent: [ nil ].
! !
@@ -198,6 +230,20 @@
position := anInteger
! !
+!PPJavaWhitespaceParser methodsFor:'*petitcompiler'!
+
+= anotherParser
+ anotherParser == self ifTrue: [ ^ true ].
+ anotherParser class = self class ifFalse: [ ^ false ].
+ ^ anotherParser name = self name
+! !
+
+!PPJavaWhitespaceParser methodsFor:'*petitcompiler'!
+
+hash
+ ^ self name hash
+! !
+
!PPLiteralObjectParser methodsFor:'*petitcompiler'!
asCompilerNode
@@ -290,42 +336,39 @@
!PPParser methodsFor:'*petitcompiler'!
compile
- ^ self compile: #PPGeneratedParser
+ ^ self compile: PPCArguments default
! !
!PPParser methodsFor:'*petitcompiler'!
-compile: name
- ^ self compile: name parameters: #()
-! !
-
-!PPParser methodsFor:'*petitcompiler'!
-
-compile: name andParse: input
- ^ (self compile: name) parse: input
+compile: arguments
+ self assert: (arguments isKindOf: PPCArguments).
+
+ ^ PPCConfiguration default
+ arguments: arguments;
+ compile: self
! !
!PPParser methodsFor:'*petitcompiler'!
-compile: name parameters: params
- ^ (PPCCompiler new parameters: params; compile: self as: name) new
+compile: arguments andParse: input
+ ^ (self compile: arguments) parse: input
! !
!PPParser methodsFor:'*petitcompiler'!
-compileWith: aPetitCompiler
- | compiled |
- self children do: [ :child |
- compiled := child compileWith: aPetitCompiler.
- self replace: child with: compiled bridge.
- ].
- ^ aPetitCompiler compileBridgeTo: self
+compileAs: name
+ | arguments |
+ arguments := PPCArguments default.
+ arguments name: name.
+
+ ^ self compile: arguments
! !
!PPParser methodsFor:'*petitcompiler'!
-compileWithParameters: params
- ^ self compile: #PPGeneratedParser parameters: params
+compileWithConfiguration: configuration
+ ^ configuration compile: self
! !
!PPParser methodsFor:'*petitcompiler'!
@@ -388,6 +431,16 @@
!PPParser methodsFor:'*petitcompiler'!
+javaToken
+ | ws |
+ ws := PPJavaWhitespaceParser new.
+ ^ ((ws, ((PPTokenParser on: self) tokenClass: PPJavaToken; yourself), ws) ==> #second)
+ propertyAt: #'trimmingToken' put: true;
+ yourself
+! !
+
+!PPParser methodsFor:'*petitcompiler'!
+
optimize
^ self copy
! !
@@ -524,16 +577,6 @@
!PPSmalltalkGrammar methodsFor:'*petitcompiler'!
-updateContext: aPPContext
- super updateContext: aPPContext.
-"
- aPPContext globalAt: #comment ifAbsentPut: [ self comment ].
- aPPContext globalAt: #whitespace ifAbsentPut: [ PPSmalltalkWhitespaceParser new ].
-"
-! !
-
-!PPSmalltalkGrammar methodsFor:'*petitcompiler'!
-
whitespace
^ #space asParser plus
! !
@@ -566,12 +609,6 @@
!PPSmalltalkTokenParser methodsFor:'*petitcompiler'!
-updateContext: aPPContext
- aPPContext globalAt: #whitespace ifAbsentPut: PPSmalltalkWhitespaceParser new
-! !
-
-!PPSmalltalkTokenParser methodsFor:'*petitcompiler'!
-
whitespace
^ PPSmalltalkWhitespaceParser new
! !
@@ -646,13 +683,6 @@
!PPTokenParser methodsFor:'*petitcompiler'!
-firstSets: aFirstDictionary into: aSet
- "Or keep empty, if token is a terminal"
- ^ super firstSets: aFirstDictionary into: aSet
-! !
-
-!PPTokenParser methodsFor:'*petitcompiler'!
-
isFirstSetTerminal
^ false
! !
@@ -678,8 +708,7 @@
!PPTokenParser methodsFor:'*petitcompiler'!
startsWith: aCharacter
- self first do: [:first | (first startsWith: aCharacter) ifTrue: [ ^ true ] ].
- ^ false
+ ^ self first anySatisfy: [ :first | first startsWith: aCharacter ]
! !
!PPTokenParser methodsFor:'*petitcompiler'!
@@ -697,18 +726,6 @@
yourself
! !
-!PPTrimmingParser methodsFor:'*petitcompiler'!
-
-compileWith: aPetitCompiler
- ^ aPetitCompiler compileTrim: self.
-! !
-
-!PPTrimmingParser methodsFor:'*petitcompiler'!
-
-firstSets: aFirstDictionary into: aSet
- super firstSets: aFirstDictionary into: aSet
-! !
-
!UndefinedObject methodsFor:'*petitcompiler'!
asInteger