compiler/extensions.st
changeset 438 20598d7ce9fa
parent 422 116d2b2af905
child 452 9f4558b3be66
--- 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