SystemOrganization addCategory: #'PetitBeta-Optimizer'! SystemOrganization addCategory: #'PetitBeta-JIT'! SystemOrganization addCategory: #'PetitBeta-Compiler'! PPParser subclass: #PPCompiledParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Compiler'! !PPCompiledParser methodsFor: 'parsing' stamp: 'lr 8/8/2010 12:17'! parseOn: aStream ^ self parseStartOn: aStream! ! PPCompiledParser subclass: #PPCompiledSmalltalkGrammar instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Compiler'! !PPCompiledSmalltalkGrammar commentStamp: '' prior: 0! PPCompiler new class: self; parser: PPSmalltalkGrammar new; execute! !PPCompiledSmalltalkGrammar class methodsFor: 'private' stamp: 'lr 8/8/2010 18:18'! generate PPCompiler new class: self; parser: PPSmalltalkGrammar new optimize; execute! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 13:17'! create: aCollection start: aStartInteger stop: aStopInteger ^ self tokenClass on: aCollection start: aStartInteger stop: aStopInteger! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseArrayItemOn: aStream | element | (element := self parseNumberLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseStringLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseCharLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseByteLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseNilLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseTrueLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseFalseLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralArrayOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralArrayOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseByteLiteralArrayOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseArrayLiteralArrayOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0072On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0073On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0074On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseArrayLiteralOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0046On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0047On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0048On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseArrayOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0124On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0125On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseAssignmentOn: aStream | start elements element | start := aStream position. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseAssignmentTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseAssignmentTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0098On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBinaryExpressionOn: aStream | start elements element | start := aStream position. element := self parseUnaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0102On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseBinaryMessageOn: aStream | element | ^ (element := self parseUnnamed0128On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseBinaryMethodOn: aStream | element | ^ (element := self parseUnnamed0007On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBinaryOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0008On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0009On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseBinaryPragmaOn: aStream | element | ^ (element := self parseUnnamed0082On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 16:05'! parseBinaryTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseBinaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockArgumentOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0110On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseBlockArgumentsOn: aStream | element | (element := self parseBlockArgumentsWithOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBlockArgumentsWithoutOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockArgumentsWithOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0108On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0109On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseBlockArgumentsWithoutOn: aStream | element | ^ (element := self parseUnnamed0118On: aStream) isPetitFailure ifFalse: [ Array with: #() with: nil ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockBodyOn: aStream | start elements element | start := aStream position. element := self parseBlockArgumentsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseSequenceOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0105On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseBlockBodyOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0106On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseByteLiteralArrayOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0077On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0078On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0079On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseByteLiteralOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0051On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0052On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0053On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseCascadeExpressionOn: aStream | start elements element | start := aStream position. element := self parseKeywordExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0101On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseCascadeMessageOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0132On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseMessageOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseCharLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseCharOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseCharOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0044On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0045On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 12:53'! parseComments: anArray on: aStream | start comments | comments := anArray. [ [ aStream atEnd not and: [ aStream peek isSeparator ] ] whileTrue: [ aStream next ]. aStream peek = $" ] whileTrue: [ aStream next. start := aStream position. aStream upTo: $". comments := comments copyWith: (start to: aStream position) ]. ^ comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseExpressionOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0097On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseCascadeExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseFalseLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0068On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseIdentifierOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0003On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0004On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseKeywordExpressionOn: aStream | start elements element | start := aStream position. element := self parseUnaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0102On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0103On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseKeywordMessageOn: aStream | element | ^ (element := self parseUnnamed0130On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseKeywordMethodOn: aStream | element | ^ (element := self parseUnnamed0001On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseKeywordOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0003On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0004On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0005On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseKeywordPragmaOn: aStream | element | ^ (element := self parseUnnamed0018On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 16:05'! parseKeywordTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseKeywordOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseMessageOn: aStream | element | (element := self parseKeywordMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBinaryMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnaryMessageOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'private' stamp: 'lr 8/8/2010 18:10'! parseMethod: aString ^ self parse: aString! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseMethodDeclarationOn: aStream | element | (element := self parseKeywordMethodOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnaryMethodOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBinaryMethodOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseMethodOn: aStream | start elements element | start := aStream position. element := self parseMethodDeclarationOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseMethodSequenceOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseMethodSequenceOn: aStream | element | ^ (element := self parseUnnamed0011On: aStream) isPetitFailure ifFalse: [ Array with: element second , element fourth with: element third with: element fifth ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 12:53'! parseMultiwordOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseKeywordOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseKeywordOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseNilLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0060On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseNumberLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseNumberOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseNumberOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0020On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0021On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseParensOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0120On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0121On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parsePragmaMessageOn: aStream | element | (element := self parseKeywordPragmaOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnaryPragmaOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBinaryPragmaOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parsePragmaOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0015On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parsePragmaMessageOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0016On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 12:53'! parsePragmasOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parsePragmaOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parsePrimaryOn: aStream | element | (element := self parseNumberLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseStringLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseCharLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseByteLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseNilLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseTrueLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseFalseLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseVariableOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBlockOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseParensOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseArrayOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseSequenceOn: aStream | start elements element | start := aStream position. element := self parseTemporariesOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseStartOn: aStream | position result | position := aStream position. result := self parseMethodOn: aStream. (result isPetitFailure or: [ aStream atEnd ]) ifTrue: [ ^ result ]. result := PPFailure message: 'end of input expected' at: aStream position. aStream position: position. ^ result! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseStatementsOn: aStream | element | (element := self parseUnnamed0092On: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnnamed0093On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0094On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseStringLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseStringOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseStringOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0034On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0035On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0036On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseSymbolLiteralArrayOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseSymbolOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseSymbolLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0056On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:49'! parseSymbolOn: aStream | element | (element := self parseUnaryOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBinaryOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseMultiwordOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseStringOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseTemporariesOn: aStream | element | ^ (element := self parseUnnamed0084On: aStream) isPetitFailure ifFalse: [ element ifNil: [ #() ] ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseTrueLiteralOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0064On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseUnaryExpressionOn: aStream | start elements element | start := aStream position. element := self parsePrimaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0104On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseUnaryMessageOn: aStream | element | ^ (element := self parseUnaryTokenOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseUnaryMethodOn: aStream | element | ^ (element := self parseVariableOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseUnaryOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0003On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0004On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0058On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:37'! parseUnaryPragmaOn: aStream | element | ^ (element := self parseVariableOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 16:05'! parseUnaryTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0001On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0002On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0002On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0002On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0003On: aStream ^ (aStream atEnd not and: [ aStream peek isLetter ]) ifFalse: [ PPFailure message: 'letter expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0004On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0006On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0005On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0006On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0007On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0008On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. '!!%&*+,-/<=>?@\|~' includes: each ]) ifFalse: [ PPFailure message: 'any of ''!!%&*+,-/<=>?@\|~'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0009On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0010On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0010On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. '!!%&*+,/<=>?@\|~' includes: each ]) ifFalse: [ PPFailure message: 'any of ''!!%&*+,/<=>?@\|~'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0011On: aStream | start elements element | start := aStream position. element := self parseUnnamed0012On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 5. elements at: 1 put: element. element := self parsePragmasOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseTemporariesOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. element := self parsePragmasOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 4 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 5 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0012On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0013On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0013On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0014On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0014On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0015On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0017On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0016On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0083On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0017On: aStream ^ (aStream atEnd not and: [ aStream peek = $< ]) ifFalse: [ PPFailure message: '$< expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0018On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0019On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0019On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0019On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseArrayItemOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0020On: aStream | element position | position := aStream position. element := self parseUnnamed0022On: aStream. aStream position: position. ^ element! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0021On: aStream | position result | position := aStream position. result := [ :stream | [ Number readFrom: stream ] on: Error do: [ :err | PPFailure message: err messageText at: stream position ] ] value: aStream. result isPetitFailure ifTrue: [ aStream position: position ]. ^ result! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0022On: aStream | start elements element | start := aStream position. element := self parseUnnamed0023On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0024On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0025On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0023On: aStream | element | (element := self parseUnnamed0026On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0027On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0024On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0028On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0028On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0025On: aStream | element | (element := self parseUnnamed0029On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0030On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0026On: aStream ^ (aStream atEnd not and: [ aStream peek = $- ]) ifFalse: [ PPFailure message: '$- expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0027On: aStream ^ nil! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0028On: aStream ^ (aStream atEnd not and: [ aStream peek isDigit ]) ifFalse: [ PPFailure message: 'digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0029On: aStream | start elements element | start := aStream position. element := self parseUnnamed0031On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0032On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0030On: aStream ^ nil! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0031On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0032On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0033On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0033On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0033On: aStream ^ (aStream atEnd not and: [ aStream peek isDigit ]) ifFalse: [ PPFailure message: 'digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0034On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0035On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0037On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0036On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0037On: aStream | element | (element := self parseUnnamed0038On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0039On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0038On: aStream | position result | position := aStream position. result := aStream next: 2. result = '''''' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: ''''''''''''' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0039On: aStream | element | ^ (element := self parseUnnamed0040On: aStream) isPetitFailure ifFalse: [ #second value: element ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0040On: aStream | start elements element | start := aStream position. element := self parseUnnamed0041On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0042On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0041On: aStream | element position | position := aStream position. element := self parseUnnamed0043On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0042On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. true ]) ifFalse: [ PPFailure message: 'input expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 12:53'! parseUnnamed0043On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0044On: aStream ^ (aStream atEnd not and: [ aStream peek = $$ ]) ifFalse: [ PPFailure message: '$$ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0045On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. true ]) ifFalse: [ PPFailure message: 'input expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0046On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0049On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0047On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseArrayItemOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0048On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0050On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0049On: aStream | position result | position := aStream position. result := aStream next: 2. result = '#(' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''#('' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0050On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0051On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0054On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0052On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseNumberLiteralOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0053On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0055On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0054On: aStream | position result | position := aStream position. result := aStream next: 2. result = '#[' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''#['' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0055On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0056On: aStream | start elements element | start := aStream position. element := self parseUnnamed0057On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseSymbolOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0057On: aStream ^ (aStream atEnd not and: [ aStream peek = $# ]) ifFalse: [ PPFailure message: '$# expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0058On: aStream | element position | position := aStream position. element := self parseUnnamed0059On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0059On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0060On: aStream | start elements element | start := aStream position. element := self parseUnnamed0061On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0062On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0061On: aStream | position result | position := aStream position. result := aStream next: 3. result = 'nil' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''nil'' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0062On: aStream | element position | position := aStream position. element := self parseUnnamed0063On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0063On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0064On: aStream | start elements element | start := aStream position. element := self parseUnnamed0065On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0066On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0065On: aStream | position result | position := aStream position. result := aStream next: 4. result = 'true' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''true'' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0066On: aStream | element position | position := aStream position. element := self parseUnnamed0067On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0067On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0068On: aStream | start elements element | start := aStream position. element := self parseUnnamed0069On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0070On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0069On: aStream | position result | position := aStream position. result := aStream next: 5. result = 'false' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''false'' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0070On: aStream | element position | position := aStream position. element := self parseUnnamed0071On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0071On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0072On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0075On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0073On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseArrayItemOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0074On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0076On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0075On: aStream ^ (aStream atEnd not and: [ aStream peek = $( ]) ifFalse: [ PPFailure message: '$( expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0076On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0077On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0080On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0078On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseNumberLiteralOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0079On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0081On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0080On: aStream ^ (aStream atEnd not and: [ aStream peek = $[ ]) ifFalse: [ PPFailure message: '$[ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0081On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0082On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseArrayItemOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0083On: aStream ^ (aStream atEnd not and: [ aStream peek = $> ]) ifFalse: [ PPFailure message: '$> expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0084On: aStream | element | (element := self parseUnnamed0085On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0086On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0085On: aStream | start elements element | start := aStream position. element := self parseUnnamed0087On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0088On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0089On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0086On: aStream ^ nil! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0087On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0090On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0088On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseVariableOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0089On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0091On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0090On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0091On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:37'! parseUnnamed0092On: aStream | element | ^ (element := self parseUnnamed0095On: aStream) isPetitFailure ifFalse: [ (Array with: element first) , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:37'! parseUnnamed0093On: aStream | element | ^ (element := self parseUnnamed0142On: aStream) isPetitFailure ifFalse: [ (Array with: element first) , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0094On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0148On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0095On: aStream | start elements element | start := aStream position. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0096On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0096On: aStream | element | (element := self parseUnnamed0134On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0135On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0097On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseAssignmentOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0098On: aStream | element | (element := self parseUnnamed0099On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0100On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0099On: aStream | position result | position := aStream position. result := aStream next: 2. result = ':=' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: ''':='' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0100On: aStream | position result | position := aStream position. result := aStream next: 1. result = '_' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''_'' expected' at: aStream position! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0101On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseCascadeMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0102On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseBinaryMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0103On: aStream | element | (element := self parseKeywordMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0129On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0104On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnaryMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0105On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0107On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0106On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0119On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0107On: aStream ^ (aStream atEnd not and: [ aStream peek = $[ ]) ifFalse: [ PPFailure message: '$[ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0108On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseBlockArgumentOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseBlockArgumentOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:49'! parseUnnamed0109On: aStream | element | (element := self parseUnnamed0112On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0113On: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0110On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0111On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0111On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0112On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0114On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:37'! parseUnnamed0113On: aStream | element | ^ (element := self parseUnnamed0115On: aStream) isPetitFailure ifFalse: [ nil ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0114On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0115On: aStream | element position | position := aStream position. element := self parseUnnamed0116On: aStream. aStream position: position. ^ element! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0116On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0117On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0117On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0118On: aStream ^ nil! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0119On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0120On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0122On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0121On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0123On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0122On: aStream ^ (aStream atEnd not and: [ aStream peek = $( ]) ifFalse: [ PPFailure message: '$( expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0123On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0124On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0126On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 16:05'! parseUnnamed0125On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0127On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0126On: aStream ^ (aStream atEnd not and: [ aStream peek = ${ ]) ifFalse: [ PPFailure message: '${ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0127On: aStream ^ (aStream atEnd not and: [ aStream peek = $} ]) ifFalse: [ PPFailure message: '$} expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0128On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0129On: aStream ^ nil! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0130On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0131On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0131On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0131On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseBinaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0132On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0133On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0133On: aStream ^ (aStream atEnd not and: [ aStream peek = $; ]) ifFalse: [ PPFailure message: '$; expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:37'! parseUnnamed0134On: aStream | element | ^ (element := self parseUnnamed0136On: aStream) isPetitFailure ifFalse: [ element first , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0135On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0140On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0136On: aStream | start elements element | start := aStream position. element := self parseUnnamed0137On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0137On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0138On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0138On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0138On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0139On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0139On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0140On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0141On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0141On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0142On: aStream | start elements element | start := aStream position. element := self parseUnnamed0143On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0144On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0143On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0145On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0144On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0146On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0145On: aStream ^ (aStream atEnd not and: [ aStream peek = $^ ]) ifFalse: [ PPFailure message: '$^ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0146On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0147On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0147On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0148On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0149On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0149On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 12:53'! parseUnnamedOn: aStream ^ self parseStartOn: aStream! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseVariableOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseIdentifierOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkGrammar methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 13:28'! tokenClass ^ PPSmalltalkToken! ! PPCompiledParser subclass: #PPCompiledSmalltalkParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Compiler'! !PPCompiledSmalltalkParser class methodsFor: 'private' stamp: 'lr 9/2/2010 19:19'! generate PPCompiler new class: self; parser: PPSmalltalkCompiler new optimize; execute! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! build: aNode assignment: anArray ^ anArray isEmpty ifTrue: [ aNode ] ifFalse: [ anArray reverse inject: aNode into: [ :result :each | RBAssignmentNode variable: each first value: result position: each second start ] ]! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! build: aNode cascade: anArray | messages | ^ (anArray isNil or: [ anArray isEmpty ]) ifTrue: [ aNode ] ifFalse: [ messages := OrderedCollection new: anArray size + 1. messages addLast: aNode. anArray do: [ :each | messages addLast: (self build: aNode receiver messages: (Array with: each second)) ]. RBCascadeNode messages: messages ]! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! build: aNode messages: anArray ^ (anArray isNil or: [ anArray isEmpty ]) ifTrue: [ aNode ] ifFalse: [ anArray inject: aNode into: [ :rec :msg | msg isNil ifTrue: [ rec ] ifFalse: [ RBMessageNode receiver: rec selectorParts: msg first arguments: msg second ] ] ]! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! build: aTempCollection sequence: aStatementCollection | nodes periods result | nodes := OrderedCollection new. periods := OrderedCollection new. aStatementCollection do: [ :each | (each isKindOf: RBProgramNode) ifTrue: [ nodes add: each ] ifFalse: [ nodes isEmpty ifFalse: [ nodes last addComments: each comments ]. periods add: each start ] ]. result := RBSequenceNode statements: nodes. result periods: periods. aTempCollection isEmpty ifFalse: [ result leftBar: aTempCollection first start temporaries: aTempCollection second rightBar: aTempCollection last start ]. ^ result! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! buildArray: aStatementCollection | nodes periods result | nodes := OrderedCollection new. periods := OrderedCollection new. aStatementCollection do: [ :each | (each isKindOf: RBProgramNode) ifTrue: [ nodes add: each ] ifFalse: [ nodes isEmpty ifFalse: [ nodes last addComments: each comments ]. periods add: each start ] ]. result := RBArrayNode statements: nodes. result periods: periods. ^ result! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! buildMethod: aMethodNode aMethodNode selectorParts do: [ :each | aMethodNode addComments: each comments ]. aMethodNode arguments do: [ :each | aMethodNode addComments: each token comments ]. aMethodNode pragmas do: [ :pragma | aMethodNode addComments: pragma comments. pragma selectorParts do: [ :each | aMethodNode addComments: each comments ]. pragma arguments do: [ :each | each isLiteralArray ifFalse: [ aMethodNode addComments: each token comments ] ]. pragma comments: nil ]. ^ aMethodNode! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! buildString: aString (aString isEmpty not and: [ aString first = $# ]) ifTrue: [ ^ (self buildString: aString allButFirst) asSymbol ]. (aString isEmpty or: [ aString first ~= $' or: [ aString last ~= $' ] ]) ifTrue: [ ^ aString ]. ^ (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '''''' with: ''''! ! !PPCompiledSmalltalkParser methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 17:01'! create: aCollection start: aStartInteger stop: aStopInteger ^ self tokenClass on: aCollection start: aStartInteger stop: aStopInteger! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parseArrayItemOn: aStream | element | (element := self parseNumberLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseStringLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseCharLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseByteLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseNilLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseTrueLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseFalseLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralArrayOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralArrayOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseByteLiteralArrayOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseArrayLiteralArrayOn: aStream | element | ^ (element := self parseUnnamed0083On: aStream) isPetitFailure ifFalse: [ RBLiteralArrayNode startPosition: element first start contents: element second stopPosition: element last start isByteArray: false ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseArrayLiteralOn: aStream | element | ^ (element := self parseUnnamed0053On: aStream) isPetitFailure ifFalse: [ RBLiteralArrayNode startPosition: element first start contents: element second stopPosition: element last start isByteArray: false ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseArrayOn: aStream | element | ^ (element := self parseUnnamed0147On: aStream) isPetitFailure ifFalse: [ (self buildArray: element second) left: element first start; right: element last start; yourself ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseAssignmentOn: aStream | start elements element | start := aStream position. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseAssignmentTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseAssignmentTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0112On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBinaryExpressionOn: aStream | element | ^ (element := self parseUnnamed0119On: aStream) isPetitFailure ifFalse: [ | receiverNode messageNodes | receiverNode := element at: 1. messageNodes := element at: 2. self build: receiverNode messages: messageNodes ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBinaryMessageOn: aStream | element | ^ (element := self parseUnnamed0152On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBinaryMethodOn: aStream | element | ^ (element := self parseUnnamed0013On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBinaryOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0014On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0015On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBinaryPragmaOn: aStream | element | ^ (element := self parseUnnamed0095On: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element first) with: (Array with: element second) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseBinaryTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseBinaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockArgumentOn: aStream | element | ^ (element := self parseUnnamed0130On: aStream) isPetitFailure ifFalse: [ #second value: element ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parseBlockArgumentsOn: aStream | element | (element := self parseBlockArgumentsWithOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBlockArgumentsWithoutOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseBlockArgumentsWithOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0128On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0129On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBlockArgumentsWithoutOn: aStream | element | ^ (element := self parseUnnamed0139On: aStream) isPetitFailure ifFalse: [ Array with: #() with: nil ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBlockBodyOn: aStream | element | ^ (element := self parseUnnamed0127On: aStream) isPetitFailure ifFalse: [ | result | result := RBBlockNode arguments: element first first body: element last. element first last isNil ifFalse: [ result bar: element first last start ]. result ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseBlockOn: aStream | element | ^ (element := self parseUnnamed0123On: aStream) isPetitFailure ifFalse: [ | leftToken blockNode rightToken | leftToken := element at: 1. blockNode := element at: 2. rightToken := element at: 3. blockNode left: leftToken start; right: rightToken start ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseByteLiteralArrayOn: aStream | element | ^ (element := self parseUnnamed0089On: aStream) isPetitFailure ifFalse: [ RBLiteralArrayNode startPosition: element first start contents: element second stopPosition: element last start isByteArray: true ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseByteLiteralOn: aStream | element | ^ (element := self parseUnnamed0059On: aStream) isPetitFailure ifFalse: [ RBLiteralArrayNode startPosition: element first start contents: element second stopPosition: element last start isByteArray: true ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseCascadeExpressionOn: aStream | element | ^ (element := self parseUnnamed0115On: aStream) isPetitFailure ifFalse: [ | receiverNode messageNodes | receiverNode := element at: 1. messageNodes := element at: 2. self build: receiverNode cascade: messageNodes ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseCascadeMessageOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0156On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseMessageOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseCharLiteralOn: aStream | element | ^ (element := self parseCharTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: element value second start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseCharOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0051On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0052On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseCharTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseCharOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 17:01'! parseComments: anArray on: aStream | start comments | comments := anArray. [ [ aStream atEnd not and: [ aStream peek isSeparator ] ] whileTrue: [ aStream next ]. aStream peek = $" ] whileTrue: [ aStream next. start := aStream position. aStream upTo: $". comments := comments copyWith: (start to: aStream position) ]. ^ comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseExpressionOn: aStream | element | ^ (element := self parseUnnamed0110On: aStream) isPetitFailure ifFalse: [ | variableNodes expressionNodes | variableNodes := element at: 1. expressionNodes := element at: 2. self build: expressionNodes assignment: variableNodes ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseFalseLiteralOn: aStream | element | ^ (element := self parseFalseTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: false start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseFalseTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0078On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseIdentifierOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0009On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0010On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseIdentifierTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseIdentifierOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseKeywordExpressionOn: aStream | element | ^ (element := self parseUnnamed0117On: aStream) isPetitFailure ifFalse: [ | receiveNode messageNode | receiveNode := element at: 1. messageNode := element at: 2. self build: receiveNode messages: (Array with: messageNode) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseKeywordMessageOn: aStream | element | ^ (element := self parseUnnamed0154On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseKeywordMethodOn: aStream | element | ^ (element := self parseUnnamed0007On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseKeywordOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0009On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0010On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0011On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseKeywordPragmaOn: aStream | element | ^ (element := self parseUnnamed0025On: aStream) isPetitFailure ifFalse: [ Array with: (element collect: [ :each | each first ]) with: (element collect: [ :each | each second ]) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseKeywordTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseKeywordOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parseMessageOn: aStream | element | (element := self parseKeywordMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBinaryMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnaryMessageOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'private' stamp: 'lr 8/8/2010 18:09'! parseMethod: aString ^ self parse: aString! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseMethodDeclarationOn: aStream | element | ^ (element := self parseUnnamed0006On: aStream) isPetitFailure ifFalse: [ RBMethodNode selectorParts: element first arguments: element second ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseMethodOn: aStream | element | ^ (element := self parseUnnamed0005On: aStream) isPetitFailure ifFalse: [ | methodNode bodyNode | methodNode := element at: 1. bodyNode := element at: 2. methodNode pragmas: bodyNode first. methodNode body: (self build: bodyNode second sequence: bodyNode third). self buildMethod: methodNode ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseMethodSequenceOn: aStream | element | ^ (element := self parseUnnamed0017On: aStream) isPetitFailure ifFalse: [ Array with: element second , element fourth with: element third with: element fifth ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseMultiwordOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseKeywordOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseKeywordOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseNilLiteralOn: aStream | element | ^ (element := self parseNilTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: nil start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseNilTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0070On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseNumberLiteralOn: aStream | element | ^ (element := self parseNumberTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBNumberLiteralToken value: (Number readFrom: element value) start: element start stop: element stop source: element value) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseNumberOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0027On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0028On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseNumberTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseNumberOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseParensOn: aStream | element | ^ (element := self parseUnnamed0142On: aStream) isPetitFailure ifFalse: [ | openToken expressionNode closeToken | openToken := element at: 1. expressionNode := element at: 2. closeToken := element at: 3. expressionNode addParenthesis: (openToken start to: closeToken start) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parsePragmaMessageOn: aStream | element | (element := self parseKeywordPragmaOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnaryPragmaOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBinaryPragmaOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parsePragmaOn: aStream | element | ^ (element := self parseUnnamed0021On: aStream) isPetitFailure ifFalse: [ (RBPragmaNode selectorParts: element second first arguments: element second second) addComments: element first comments; addComments: element last comments; left: element first start; right: element last start; yourself ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parsePragmasOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parsePragmaOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parsePrimaryOn: aStream | element | (element := self parseNumberLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseStringLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseCharLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseArrayLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseByteLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseSymbolLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseNilLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseTrueLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseFalseLiteralOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseVariableOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBlockOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseParensOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseArrayOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseReturnOn: aStream | element | ^ (element := self parseUnnamed0168On: aStream) isPetitFailure ifFalse: [ | token expressionNode | token := element at: 1. expressionNode := element at: 2. RBReturnNode return: token start value: expressionNode ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseSequenceOn: aStream | element | ^ (element := self parseUnnamed0140On: aStream) isPetitFailure ifFalse: [ | tempNodes statementNodes | tempNodes := element at: 1. statementNodes := element at: 2. self build: tempNodes sequence: statementNodes ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseStartOn: aStream | element | ^ (element := self parseUnnamed0001On: aStream) isPetitFailure ifFalse: [ | source node | source := element at: 1. node := element at: 2. node source: source ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parseStatementsOn: aStream | element | (element := self parseUnnamed0105On: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnnamed0106On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0107On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseStringLiteralOn: aStream | element | ^ (element := self parseStringTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: element value) start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseStringOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0041On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0042On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0043On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseStringTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseStringOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseSymbolLiteralArrayOn: aStream | element | ^ (element := self parseUnnamed0082On: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: element value) asSymbol start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseSymbolLiteralOn: aStream | element | ^ (element := self parseUnnamed0065On: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: element value) start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:50'! parseSymbolOn: aStream | element | (element := self parseUnaryOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseBinaryOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseMultiwordOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseStringOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseTemporariesOn: aStream | element | ^ (element := self parseUnnamed0097On: aStream) isPetitFailure ifFalse: [ element ifNil: [ #() ] ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseTrueLiteralOn: aStream | element | ^ (element := self parseTrueTokenOn: aStream) isPetitFailure ifFalse: [ RBLiteralValueNode literalToken: (RBLiteralToken value: true start: element start stop: element stop) ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseTrueTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0074On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseUnaryExpressionOn: aStream | element | ^ (element := self parseUnnamed0121On: aStream) isPetitFailure ifFalse: [ | receiverNode messageNodes | receiverNode := element at: 1. messageNodes := element at: 2. self build: receiverNode messages: messageNodes ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseUnaryMessageOn: aStream | element | ^ (element := self parseUnaryTokenOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseUnaryMethodOn: aStream | element | ^ (element := self parseIdentifierTokenOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 18:18'! parseUnaryOn: aStream | start elements element | start := aStream position. element := self parseUnnamed0009On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0010On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0068On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseUnaryPragmaOn: aStream | element | ^ (element := self parseIdentifierTokenOn: aStream) isPetitFailure ifFalse: [ Array with: (Array with: element) with: Array new ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 17:01'! parseUnaryTokenOn: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0001On: aStream | start elements element | start := aStream position. element := self parseUnnamed0002On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0003On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0002On: aStream | element position | position := aStream position. element := self parseUnnamed0004On: aStream. aStream position: position. ^ element! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0003On: aStream | position result | position := aStream position. result := self parseMethodOn: aStream. (result isPetitFailure or: [ aStream atEnd ]) ifTrue: [ ^ result ]. result := PPFailure message: 'end of input expected' at: aStream position. aStream position: position. ^ result! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0004On: aStream | position result | position := aStream position. result := [ :stream | stream collection ] value: aStream. result isPetitFailure ifTrue: [ aStream position: position ]. ^ result! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0005On: aStream | start elements element | start := aStream position. element := self parseMethodDeclarationOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseMethodSequenceOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0006On: aStream | element | (element := self parseKeywordMethodOn: aStream) isPetitFailure ifFalse: [ ^ element ]. (element := self parseUnaryMethodOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseBinaryMethodOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0007On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0008On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0008On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0008On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0009On: aStream ^ (aStream atEnd not and: [ aStream peek isLetter ]) ifFalse: [ PPFailure message: 'letter expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0010On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0012On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0011On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0012On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0013On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0014On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. '!!%&*+,-/<=>?@\|~' includes: each ]) ifFalse: [ PPFailure message: 'any of ''!!%&*+,-/<=>?@\|~'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0015On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0016On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0016On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. '!!%&*+,/<=>?@\|~' includes: each ]) ifFalse: [ PPFailure message: 'any of ''!!%&*+,/<=>?@\|~'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0017On: aStream | start elements element | start := aStream position. element := self parseUnnamed0018On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 5. elements at: 1 put: element. element := self parsePragmasOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseTemporariesOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. element := self parsePragmasOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 4 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 5 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0018On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0019On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0019On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0020On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0020On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0021On: aStream | start elements element | start := aStream position. element := self parseUnnamed0022On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parsePragmaMessageOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0023On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0022On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0024On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0023On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0096On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0024On: aStream ^ (aStream atEnd not and: [ aStream peek = $< ]) ifFalse: [ PPFailure message: '$< expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0025On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0026On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0026On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0026On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseArrayItemOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0027On: aStream | element position | position := aStream position. element := self parseUnnamed0029On: aStream. aStream position: position. ^ element! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0028On: aStream | position result | position := aStream position. result := [ :stream | [ Number readFrom: stream ] on: Error do: [ :err | PPFailure message: err messageText at: stream position ] ] value: aStream. result isPetitFailure ifTrue: [ aStream position: position ]. ^ result! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0029On: aStream | start elements element | start := aStream position. element := self parseUnnamed0030On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0031On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0032On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0030On: aStream | element | (element := self parseUnnamed0033On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0034On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0031On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0035On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0035On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0032On: aStream | element | (element := self parseUnnamed0036On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0037On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0033On: aStream ^ (aStream atEnd not and: [ aStream peek = $- ]) ifFalse: [ PPFailure message: '$- expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0034On: aStream ^ nil! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0035On: aStream ^ (aStream atEnd not and: [ aStream peek isDigit ]) ifFalse: [ PPFailure message: 'digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0036On: aStream | start elements element | start := aStream position. element := self parseUnnamed0038On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0039On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0037On: aStream ^ nil! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0038On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0039On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0040On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0040On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0040On: aStream ^ (aStream atEnd not and: [ aStream peek isDigit ]) ifFalse: [ PPFailure message: 'digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0041On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0042On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0044On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0043On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0044On: aStream | element | (element := self parseUnnamed0045On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0046On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0045On: aStream | position result | position := aStream position. result := aStream next: 2. result = '''''' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: ''''''''''''' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0046On: aStream | element | ^ (element := self parseUnnamed0047On: aStream) isPetitFailure ifFalse: [ #second value: element ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0047On: aStream | start elements element | start := aStream position. element := self parseUnnamed0048On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0049On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0048On: aStream | element position | position := aStream position. element := self parseUnnamed0050On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0049On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. true ]) ifFalse: [ PPFailure message: 'input expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0050On: aStream ^ (aStream atEnd not and: [ aStream peek = $' ]) ifFalse: [ PPFailure message: '$'' expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0051On: aStream ^ (aStream atEnd not and: [ aStream peek = $$ ]) ifFalse: [ PPFailure message: '$$ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0052On: aStream ^ (aStream atEnd not and: [ | each | each := aStream peek. true ]) ifFalse: [ PPFailure message: 'input expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0053On: aStream | start elements element | start := aStream position. element := self parseUnnamed0054On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0055On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0056On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0054On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0057On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0055On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseArrayItemOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0056On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0058On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0057On: aStream | position result | position := aStream position. result := aStream next: 2. result = '#(' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''#('' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0058On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0059On: aStream | start elements element | start := aStream position. element := self parseUnnamed0060On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0061On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0062On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0060On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0063On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0061On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseNumberLiteralOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0062On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0064On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0063On: aStream | position result | position := aStream position. result := aStream next: 2. result = '#[' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''#['' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0064On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0065On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0066On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0066On: aStream | start elements element | start := aStream position. element := self parseUnnamed0067On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseSymbolOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0067On: aStream ^ (aStream atEnd not and: [ aStream peek = $# ]) ifFalse: [ PPFailure message: '$# expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0068On: aStream | element position | position := aStream position. element := self parseUnnamed0069On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0069On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0070On: aStream | start elements element | start := aStream position. element := self parseUnnamed0071On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0072On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0071On: aStream | position result | position := aStream position. result := aStream next: 3. result = 'nil' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''nil'' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0072On: aStream | element position | position := aStream position. element := self parseUnnamed0073On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0073On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0074On: aStream | start elements element | start := aStream position. element := self parseUnnamed0075On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0076On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0075On: aStream | position result | position := aStream position. result := aStream next: 4. result = 'true' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''true'' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0076On: aStream | element position | position := aStream position. element := self parseUnnamed0077On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0077On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0078On: aStream | start elements element | start := aStream position. element := self parseUnnamed0079On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0080On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0079On: aStream | position result | position := aStream position. result := aStream next: 5. result = 'false' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''false'' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0080On: aStream | element position | position := aStream position. element := self parseUnnamed0081On: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0081On: aStream ^ (aStream atEnd not and: [ aStream peek isAlphaNumeric ]) ifFalse: [ PPFailure message: 'letter or digit expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0082On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseSymbolOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0083On: aStream | start elements element | start := aStream position. element := self parseUnnamed0084On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0085On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0086On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0084On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0087On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0085On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseArrayItemOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0086On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0088On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0087On: aStream ^ (aStream atEnd not and: [ aStream peek = $( ]) ifFalse: [ PPFailure message: '$( expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0088On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0089On: aStream | start elements element | start := aStream position. element := self parseUnnamed0090On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0091On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0092On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0090On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0093On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0091On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseNumberLiteralOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0092On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0094On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0093On: aStream ^ (aStream atEnd not and: [ aStream peek = $[ ]) ifFalse: [ PPFailure message: '$[ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0094On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0095On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseArrayItemOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0096On: aStream ^ (aStream atEnd not and: [ aStream peek = $> ]) ifFalse: [ PPFailure message: '$> expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0097On: aStream | element | (element := self parseUnnamed0098On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0099On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0098On: aStream | start elements element | start := aStream position. element := self parseUnnamed0100On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseUnnamed0101On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0102On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0099On: aStream ^ nil! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0100On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0103On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0101On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseVariableOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0102On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0104On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0103On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0104On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:38'! parseUnnamed0105On: aStream | element | ^ (element := self parseUnnamed0108On: aStream) isPetitFailure ifFalse: [ (Array with: element first) , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:38'! parseUnnamed0106On: aStream | element | ^ (element := self parseUnnamed0166On: aStream) isPetitFailure ifFalse: [ (Array with: element first) , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0107On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0173On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0108On: aStream | start elements element | start := aStream position. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0109On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0109On: aStream | element | (element := self parseUnnamed0158On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0159On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0110On: aStream | start elements element | start := aStream position. element := self parseUnnamed0111On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseCascadeExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0111On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseAssignmentOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0112On: aStream | element | (element := self parseUnnamed0113On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0114On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0113On: aStream | position result | position := aStream position. result := aStream next: 2. result = ':=' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: ''':='' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0114On: aStream | position result | position := aStream position. result := aStream next: 1. result = '_' ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: '''_'' expected' at: aStream position! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0115On: aStream | start elements element | start := aStream position. element := self parseKeywordExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0116On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0116On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseCascadeMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0117On: aStream | start elements element | start := aStream position. element := self parseBinaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0118On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0118On: aStream | element | (element := self parseKeywordMessageOn: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0153On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0119On: aStream | start elements element | start := aStream position. element := self parseUnaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0120On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0120On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseBinaryMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0121On: aStream | start elements element | start := aStream position. element := self parsePrimaryOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0122On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0122On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnaryMessageOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0123On: aStream | start elements element | start := aStream position. element := self parseUnnamed0124On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseBlockBodyOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0125On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0124On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0126On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0125On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0141On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0126On: aStream ^ (aStream atEnd not and: [ aStream peek = $[ ]) ifFalse: [ PPFailure message: '$[ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0127On: aStream | start elements element | start := aStream position. element := self parseBlockArgumentsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseSequenceOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0128On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseBlockArgumentOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseBlockArgumentOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:50'! parseUnnamed0129On: aStream | element | (element := self parseUnnamed0133On: aStream) isPetitFailure ifFalse: [ ^ element ]. ^ self parseUnnamed0134On: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0130On: aStream | start elements element | start := aStream position. element := self parseUnnamed0131On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseVariableOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0131On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0132On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0132On: aStream ^ (aStream atEnd not and: [ aStream peek = $: ]) ifFalse: [ PPFailure message: '$: expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0133On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0135On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:38'! parseUnnamed0134On: aStream | element | ^ (element := self parseUnnamed0136On: aStream) isPetitFailure ifFalse: [ nil ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0135On: aStream ^ (aStream atEnd not and: [ aStream peek = $| ]) ifFalse: [ PPFailure message: '$| expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0136On: aStream | element position | position := aStream position. element := self parseUnnamed0137On: aStream. aStream position: position. ^ element! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0137On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0138On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0138On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0139On: aStream ^ nil! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0140On: aStream | start elements element | start := aStream position. element := self parseTemporariesOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0141On: aStream ^ (aStream atEnd not and: [ aStream peek = $] ]) ifFalse: [ PPFailure message: '$] expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0142On: aStream | start elements element | start := aStream position. element := self parseUnnamed0143On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0144On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0143On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0145On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0144On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0146On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0145On: aStream ^ (aStream atEnd not and: [ aStream peek = $( ]) ifFalse: [ PPFailure message: '$( expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0146On: aStream ^ (aStream atEnd not and: [ aStream peek = $) ]) ifFalse: [ PPFailure message: '$) expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0147On: aStream | start elements element | start := aStream position. element := self parseUnnamed0148On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 3. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. element := self parseUnnamed0149On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 3 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0148On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0150On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamed0149On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0151On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0150On: aStream ^ (aStream atEnd not and: [ aStream peek = ${ ]) ifFalse: [ PPFailure message: '${ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0151On: aStream ^ (aStream atEnd not and: [ aStream peek = $} ]) ifFalse: [ PPFailure message: '$} expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0152On: aStream | start elements element | start := aStream position. element := self parseBinaryTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0153On: aStream ^ nil! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0154On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0155On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0155On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0155On: aStream | start elements element | start := aStream position. element := self parseKeywordTokenOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseBinaryExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0156On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0157On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0157On: aStream ^ (aStream atEnd not and: [ aStream peek = $; ]) ifFalse: [ PPFailure message: '$; expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 19:38'! parseUnnamed0158On: aStream | element | ^ (element := self parseUnnamed0160On: aStream) isPetitFailure ifFalse: [ element first , element last ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0159On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0164On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0160On: aStream | start elements element | start := aStream position. element := self parseUnnamed0161On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseStatementsOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0161On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. (element := self parseUnnamed0162On: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element. [ (element := self parseUnnamed0162On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0162On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0163On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0163On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0164On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0165On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0165On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0166On: aStream | start elements element | start := aStream position. element := self parseReturnOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseUnnamed0167On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0167On: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ (element := self parseUnnamed0171On: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ] repeat! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0168On: aStream | start elements element | start := aStream position. element := self parseUnnamed0169On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements := Array new: 2. elements at: 1 put: element. element := self parseExpressionOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: 2 put: element. ^ elements! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0169On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0170On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0170On: aStream ^ (aStream atEnd not and: [ aStream peek = $^ ]) ifFalse: [ PPFailure message: '$^ expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0171On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0172On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0172On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0173On: aStream | start comments tokenStart element tokenStop | start := aStream position. comments := self parseComments: #() on: aStream. tokenStart := aStream position. element := self parseUnnamed0174On: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. tokenStop := aStream position. comments := self parseComments: comments on: aStream. ^ (self create: aStream collection start: tokenStart + 1 stop: tokenStop) comments: comments! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 18:18'! parseUnnamed0174On: aStream ^ (aStream atEnd not and: [ aStream peek = $. ]) ifFalse: [ PPFailure message: '$. expected' at: aStream position ] ifTrue: [ aStream next ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-unnamed' stamp: 'lr 8/8/2010 17:01'! parseUnnamedOn: aStream ^ self parseStartOn: aStream! ! !PPCompiledSmalltalkParser methodsFor: 'generated-parser' stamp: 'lr 8/8/2010 19:38'! parseVariableOn: aStream | element | ^ (element := self parseIdentifierTokenOn: aStream) isPetitFailure ifFalse: [ RBVariableNode identifierToken: element ] ifTrue: [ element ]! ! !PPCompiledSmalltalkParser methodsFor: 'generated-utilities' stamp: 'lr 8/8/2010 17:01'! tokenClass ^ PPSmalltalkToken! ! !PPParser methodsFor: '*petitbeta-operations' stamp: 'lr 4/16/2010 15:43'! dynamicChoice: aParser | dynamicChoice | ^ dynamicChoice := self | aParser / [ :stream | | resolution | resolution := UIManager default chooseFrom: { self name. aParser name } values: { self. aParser } title: 'Resolve ambiguity'. dynamicChoice def: resolution. resolution parseOn: stream ] asParser! ! !PPParser methodsFor: '*petitbeta-operations' stamp: 'lr 4/29/2010 23:13'! optimize "Optimizes the receiving parser for speed and size." ^ PPOptimizer new optimize: self! ! !PPParser methodsFor: '*petitbeta-operations' stamp: 'lr 4/16/2010 21:09'! whatFollows: aString at: anInteger | stream | stream := aString asPetitStream. (self transform: [ :parser | parser ==> [ :node | stream position < anInteger ifTrue: [ node ] ifFalse: [ ^ parser followSets ] ] ]) parseOn: stream. ^ #()! ! TestResource subclass: #PPJitResource instanceVariableNames: 'jitter' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-JIT'! !PPJitResource methodsFor: 'accessing' stamp: 'lr 8/6/2010 19:17'! jitter ^ jitter! ! !PPJitResource methodsFor: 'running' stamp: 'lr 8/7/2010 10:21'! setUp super setUp. jitter := PPJit new! ! PPAbstractParseTest subclass: #PPOptimizerTest instanceVariableNames: 'a b c' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Optimizer'! !PPOptimizerTest class methodsFor: 'accessing' stamp: 'lr 5/31/2010 18:50'! packageNamesUnderTest ^ #('PetitBeta')! ! !PPOptimizerTest methodsFor: 'utilities' stamp: 'lr 8/26/2010 10:58'! assert: aParser equals: anotherParser self assert: (aParser match: anotherParser inContext: Dictionary new) description: (self comparingStringBetween: aParser and: anotherParser)! ! !PPOptimizerTest methodsFor: 'utilities' stamp: 'lr 4/29/2010 23:21'! optimize: aParser ^ aParser optimize! ! !PPOptimizerTest methodsFor: 'running' stamp: 'lr 8/26/2010 11:08'! setUp super setUp. a := $a asParser. b := $b asParser. c := $c asParser! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 10:57'! testEmptyChoice | grammar | grammar := self optimize: PPChoiceParser new. self assert: grammar equals: PPFailingParser new! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 10:59'! testNestedChoice | grammar | grammar := self optimize: a / (b / c). self assert: grammar equals: a / b / c. grammar := self optimize: (a / b) / c. self assert: grammar equals: a / b / c! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 11:00'! testNulledChoice | grammar | grammar := self optimize: a / nil asParser / b / c. self assert: grammar equals: a optional. grammar := self optimize: a / b / nil asParser / c. self assert: grammar equals: a / b / nil asParser. grammar := self optimize: a / b / c / nil asParser. self assert: grammar equals: a / b / c / nil asParser! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:10'! testOptionalChoice | grammar | grammar := self optimize: a optional / a. self assert: grammar equals: a optional! ! !PPOptimizerTest methodsFor: 'testing-epsilon' stamp: 'lr 8/26/2010 11:09'! testOptionalEpsilon | grammar | grammar := self optimize: nil asParser optional. self assert: grammar equals: nil asParser! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:10'! testOptionalOptional | grammar | grammar := self optimize: a optional optional. self assert: grammar equals: a optional! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:11'! testOptionalPlus | grammar | grammar := self optimize: a optional plus. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:11'! testOptionalPlusChoice | grammar | grammar := self optimize: a optional / a plus. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:11'! testOptionalStar | grammar | grammar := self optimize: a optional star. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:11'! testOptionalStarChoice | grammar | grammar := self optimize: a optional / a star. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:12'! testPlusChoice | grammar | grammar := self optimize: a plus / a. self assert: grammar equals: a plus! ! !PPOptimizerTest methodsFor: 'testing-epsilon' stamp: 'lr 8/26/2010 11:09'! testPlusEpsilon | grammar | grammar := self optimize: nil asParser plus. self assert: grammar equals: nil asParser! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:13'! testPlusOptional | grammar | grammar := self optimize: a plus optional. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:14'! testPlusOptionalChoice | grammar | grammar := self optimize: a plus / a optional. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:13'! testPlusPlus | grammar | grammar := self optimize: a plus plus. self assert: grammar equals: a plus! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:13'! testPlusStar | grammar | grammar := self optimize: a plus star. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:14'! testPlusStarChoice | grammar | grammar := self optimize: a plus / a star. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 11:00'! testPostfixChoice | grammar | grammar := self optimize: (a , b) / (c , b). self assert: grammar equals: (a / c) , b! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 11:00'! testPrefixChoice | grammar | grammar := self optimize: (a , b) / (a , c). self assert: grammar equals: a , (b / c)! ! !PPOptimizerTest methodsFor: 'testing-delegate' stamp: 'lr 8/26/2010 11:03'! testReduceDelegate | grammar | grammar := self optimize: (PPAndParser on: (PPAndParser on: a)). self assert: grammar equals: a and. grammar := self optimize: (PPFlattenParser on: (PPFlattenParser on: a)). self assert: grammar equals: a flatten. grammar := self optimize: (PPTokenParser on: (PPTokenParser on: a)). self assert: grammar equals: a token. grammar := self optimize: (PPMemoizedParser on: (PPMemoizedParser on: a)). self assert: grammar equals: a memoized. grammar := self optimize: (PPTrimmingParser on: (PPTrimmingParser on: a)). self assert: grammar equals: a trim. grammar := self optimize: (PPNotParser on: (PPNotParser on: a)). self assert: grammar equals: a not not! ! !PPOptimizerTest methodsFor: 'testing-delegate' stamp: 'lr 8/26/2010 11:03'! testRemoveDelegate | grammar | grammar := self optimize: a wrapped. self assert: grammar equals: a. grammar := self optimize: a wrapped wrapped. self assert: grammar equals: a. grammar := self optimize: a wrapped / b wrapped wrapped. self assert: grammar equals: a / b! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 11:02'! testRepeatedChoice | grammar | grammar := self optimize: a / a / b / c. self assert: grammar equals: a / b / c. grammar := self optimize: a / b / a / a. self assert: grammar equals: a / b. grammar := self optimize: a / a / a / a. self assert: grammar equals: a! ! !PPOptimizerTest methodsFor: 'testing-choice' stamp: 'lr 8/26/2010 11:02'! testSingleChoice | grammar | grammar := self optimize: (PPChoiceParser with: a). self assert: grammar equals: a! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:15'! testStarChoice | grammar | grammar := self optimize: a star / a. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-epsilon' stamp: 'lr 8/26/2010 11:09'! testStarEpsilon | grammar | grammar := self optimize: nil asParser star. self assert: grammar equals: nil asParser! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:15'! testStarOptional | grammar | grammar := self optimize: a star optional. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:15'! testStarOptionalChoice | grammar | grammar := self optimize: a star / a optional. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:16'! testStarPlus | grammar | grammar := self optimize: a star plus. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:16'! testStarPlusChoice | grammar | grammar := self optimize: a star / a plus. self assert: grammar equals: a star! ! !PPOptimizerTest methodsFor: 'testing-operators' stamp: 'lr 8/26/2010 11:16'! testStarStar | grammar | grammar := self optimize: a star star. self assert: grammar equals: a star! ! PPDelegateParser subclass: #PPJitParser instanceVariableNames: 'method' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-JIT'! !PPJitParser class methodsFor: 'instance creation' stamp: 'lr 8/1/2010 09:02'! on: aParser method: aCompiledMethod ^ (self on: aParser) setMethod: aCompiledMethod! ! !PPJitParser methodsFor: 'accessing' stamp: 'lr 8/1/2010 15:51'! method ^ method! ! !PPJitParser methodsFor: 'parsing' stamp: 'lr 7/31/2010 23:15'! parseOn: aStream ^ self withArgs: (Array with: aStream) executeMethod: method! ! !PPJitParser methodsFor: 'initialization' stamp: 'lr 7/31/2010 23:16'! setMethod: aCompiledMethod method := aCompiledMethod! ! PPParserTest subclass: #PPJitTest instanceVariableNames: 'jitter' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-JIT'! !PPJitTest class methodsFor: 'accessing' stamp: 'lr 8/6/2010 19:17'! resources ^ Array with: PPJitResource! ! !PPJitTest methodsFor: 'utilities' stamp: 'lr 8/6/2010 19:18'! assert: aParser fail: aCollection | parser stream result | parser := PPJitResource current jitter compile: aParser. self assert: (parser isKindOf: PPJitParser). stream := aCollection asPetitStream. result := parser parse: stream. self assert: result isPetitFailure. self assert: stream position = 0! ! !PPJitTest methodsFor: 'utilities' stamp: 'lr 8/6/2010 19:18'! assert: aParser parse: aCollection to: aTargetObject end: anInteger | parser stream result | parser := PPJitResource current jitter compile: aParser. self assert: (parser isKindOf: PPJitParser). stream := aCollection asPetitStream. result := parser parse: stream. aTargetObject isNil ifTrue: [ self deny: result isPetitFailure ] ifFalse: [ self assert: result = aTargetObject ]. self assert: stream position = anInteger! ! !PPJitTest methodsFor: 'testing' stamp: 'lr 8/7/2010 10:37'! testMemoized "This test does not work"! ! Object subclass: #PPJit instanceVariableNames: 'methodTemplates inlineTemplates literalMapping' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-JIT'! !PPJit methodsFor: 'public' stamp: 'lr 8/6/2010 19:15'! compile: aParser "Try to optimize aParser. If no reasonable optimization can be performed return the original parser." | methodTree | methodTree := (methodTemplates at: aParser class ifAbsent: [ ^ aParser ]) copy. literalMapping := IdentityDictionary new. methodTree := self inlineAll: methodTree for: aParser. methodTree := self rewrite: (self rewrite: (self rewrite: methodTree removeDeadCode using: self rewriteParserBlocks) using: self rewriteEmtpyIfTrue) using: self rewriteEmptyBlock. ^ PPJitParser on: aParser method: (self patchLiterals: (self rootParserClass compilerClass new compile: methodTree formattedCode in: self rootParserClass classified: nil notifying: nil ifFail: [ ^ aParser ]) generate)! ! !PPJit methodsFor: 'initialization' stamp: 'lr 8/6/2010 14:55'! initialize self initializeTemplates! ! !PPJit methodsFor: 'initialization' stamp: 'lr 8/6/2010 17:58'! initializeTemplate: class | parseTree | parseTree := (class lookupSelector: self parseOnSelector) parseTree. (parseTree isNil or: [ parseTree isPrimitive or: [ parseTree superMessages notEmpty ] ]) ifTrue: [ ^ self ]. parseTree := (self rewrite: (self rewrite: (self rewrite: parseTree using: self rewriteGuardClause) using: self rewriteIfTrue) using: self rewriteReturns) addSelfReturn; yourself. (parseTree body temporaries isEmpty and: [ parseTree body statements size = 1 and: [ parseTree body statements first isReturn and: [ parseTree body statements first value containsReturn not ] ] ]) ifTrue: [ inlineTemplates at: class put: parseTree body statements first value ]. methodTemplates at: class put: parseTree! ! !PPJit methodsFor: 'initialization' stamp: 'lr 8/6/2010 18:24'! initializeTemplates methodTemplates := IdentityDictionary new. inlineTemplates := IdentityDictionary new. self rootParserClass withAllSubclassesDo: [ :class | self initializeTemplate: class ]! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 19:12'! inlineAll: aNode for: aParser | rewriter1 rewriter2 | rewriter1 := RBParseTreeRewriter new. rewriter1 replace: '`variable value: `@expr' withValueFrom: [ :node | self inlineBlock: node for: aParser ] when: [ :node | (self instanceVariable: node receiver for: aParser) isBlock ]; replace: '`variable parseOn: `stream' withValueFrom: [ :node | self inlineParser: node for: aParser ] when: [ :node | (self instanceVariable: node receiver for: aParser) isPetitParser ]; replace: '`variable `@msg: `@args' withValueFrom: [ :node | self inlineCollection: node for: aParser ] when: [ :node | (self instanceVariable: node receiver for: aParser) isCollection ]. rewriter2 := RBParseTreeRewriter new. rewriter2 replace: 'self' withValueFrom: [ :node | self inlineObject: aParser ]; replace: '`variable' withValueFrom: [ :node | self inlineVariable: node for: aParser ]. ^ rewriter2 executeTree: (rewriter1 executeTree: aNode; tree); tree! ! !PPJit methodsFor: 'private' stamp: 'lr 8/7/2010 09:52'! inlineBlock: aNode for: aParser | block tree | block := self instanceVariable: aNode receiver for: aParser. (block numArgs = 1 and: [ block numCopiedValues = 0 ]) ifFalse: [ ^ aNode ]. tree := RBParser parseExpression: block asString onError: [ :msg :pos | ^ aNode ]. (tree isBlock and: [ tree body temporaries isEmpty and: [ tree body statements size = 1 and: [ tree containsReturn not ] ] ]) ifFalse: [ ^ aNode ]. tree body statements first nodesDo: [ :each | each isVariable ifTrue: [ each name = tree arguments first name ifTrue: [ each replaceWith: aNode arguments first ] ifFalse: [ ^ aNode ] ] ]. ^ tree body statements first! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 18:18'! inlineCollection: aNode for: aParser | collection arguments | collection := self instanceVariable: aNode receiver for: aParser. arguments := aNode arguments collect: [ :each | each isLiteral ifTrue: [ each value ] ifFalse: [ ^ aNode ] ]. ^ RBLiteralNode value: (collection perform: aNode selector withArguments: arguments)! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 18:13'! inlineObject: anObject "Inlines anObject into the literal frame of the generated method." ^ RBLiteralNode value: (literalMapping at: anObject ifAbsentPut: [ ('__ref_' , literalMapping size asString) asSymbol ])! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 17:52'! inlineParser: aNode for: aParser | parser tree | parser := self instanceVariable: aNode receiver for: aParser. tree := (inlineTemplates at: parser class ifAbsent: [ ^ aNode ]) copy. ^ self inlineAll: tree for: parser! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 16:56'! inlineVariable: aNode for: aParser | value | value := self instanceVariable: aNode for: aParser ifAbsent: [ ^ aNode ]. value isLiteral ifTrue: [ ^ RBLiteralNode value: value ]. ^ self inlineObject: value! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 17:41'! inlineVariables: aNode for: aParser | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '`var value' withValueFrom: [ :node | self inlineBlock: node for: aParser ] when: [ :node | (self instanceVariable: node receiver for: aParser) isBlock ]; replace: '`var parseOn: aStream' withValueFrom: [ :node | self inlineParser: node for: aParser ] when: [ :node | (self instanceVariable: node receiver for: aParser) isPetitParser ]; replace: '`var' withValueFrom: [ :node | self inlineVariable: node for: aParser ]. ^ rewriter executeTree: aNode; answer! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 16:56'! instanceVariable: aNode for: aParser ^ self instanceVariable: aNode for: aParser ifAbsent: [ nil ]! ! !PPJit methodsFor: 'private' stamp: 'lr 8/6/2010 16:56'! instanceVariable: aNode for: aParser ifAbsent: aBlock | index | (aNode whoDefines: aNode name) notNil ifTrue: [ ^ aBlock value ]. index := aParser class allInstVarNames indexOf: aNode name ifAbsent: [ ^ aBlock value ]. ^ aParser instVarAt: index! ! !PPJit methodsFor: 'configuration' stamp: 'lr 8/1/2010 08:52'! parseOnSelector ^ #parseOn:! ! !PPJit methodsFor: 'private' stamp: 'lr 8/2/2010 21:53'! patchLiterals: aCompiledMethod | inverseMapping | inverseMapping := IdentityDictionary new: literalMapping size. literalMapping keysAndValuesDo: [ :key :value | inverseMapping at: value put: key ]. 2 to: aCompiledMethod numLiterals + 1 do: [ :index | aCompiledMethod objectAt: index put: (inverseMapping at: (aCompiledMethod objectAt: index) ifAbsent: [ aCompiledMethod objectAt: index ]) ]. ^ aCompiledMethod! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:33'! rewrite: aNode using: aRewriter "Apply aRewriter repeatedly to aNode until no more changes can be performed." | tree | tree := aNode. [ aRewriter executeTree: tree ] whileTrue: [ tree := aRewriter tree ]. ^ tree! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:51'! rewriteEmptyBlock | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '[ ``.object ] value' with: '``.object' when: [ :aNode | aNode parent isCascade not ]; replace: '| `@temps | ``@.Stmts1. [ | `@bTemps | ``@.bStmts ] value. ``@.Stmts2' with: '| `@temps `@bTemps | ``@.Stmts1. ``@.bStmts. ``@.Stmts2'. ^ rewriter! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:51'! rewriteEmtpyIfTrue | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '``@boolean ifTrue: [ ] ifFalse: [ | `@temps | ``@.Stmts ]' with: '``@boolean ifFalse: [ |`@temps | ``@.Stmts ]'; replace: '``@boolean ifFalse: [ ] ifTrue: [ | `@temps | ``@.Stmts ]' with: '``@boolean ifTrue: [ |`@temps | ``@.Stmts ]'; replace: '``@boolean ifTrue: [ | `@temps | ``@.Stmts ] ifFalse: [ ]' with: '``@boolean ifTrue: [ |`@temps | ``@.Stmts ]'; replace: '``@boolean ifFalse: [ | `@temps | ``@.Stmts ] ifTrue: [ ]' with: '``@boolean ifFalse: [ |`@temps | ``@.Stmts ]'. ^ rewriter! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:33'! rewriteGuardClause | rewriter | rewriter := RBParseTreeRewriter new. rewriter replaceMethod: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [| `@t1 | `@.Stmts1. ^`@r1]. `@.s2. ^`@r2' with: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [| `@t1 | `@.Stmts1. ^`@r1] ifFalse: [`@.s2. ^`@r2]'; replaceMethod: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifFalse: [| `@t1 | `@.Stmts1. ^`@r1]. `@.s2. ^`@r2' with: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [`@.s2. ^`@r2] ifFalse: [| `@t1 | `@.Stmts1. ^`@r1]'; replaceMethod: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [| `@t1 | `@.Stmts1. ^`@r1]. `@.s2' with: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [| `@t1 | `@.Stmts1. ^`@r1] ifFalse: [`@.s2. ^self]'; replaceMethod: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifFalse: [| `@t1 | `@.Stmts1. ^`@r1]. `@.s2' with: '`@methodName: `@args | `@temps | `@.s1. `@boolean ifTrue: [`@.s2. ^self] ifFalse: [| `@t1 | `@.Stmts1. ^`@r1]'. ^ rewriter! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:32'! rewriteIfTrue | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '| `@temps | ``@.s1. ``@boolean ifTrue: [| `@t1 | ``@.Stmts1. ^`@r1]. ``@.s2. ^``@r2' with: '| `@temps | ``@.s1. ``@boolean ifTrue: [| `@t1 | ``@.Stmts1. ^`@r1] ifFalse: [``@.s2. ^``@r2]'; replace: '| `@temps | ``@.s1. ``@boolean ifFalse: [| `@t1 | ``@.Stmts1. ^`@r1]. ``@.s2. ^``@r2' with: '| `@temps | ``@.s1. ``@boolean ifTrue: [``@.s2. ^``@r2] ifFalse: [| `@t1 | ``@.Stmts1. ^`@r1]'. ^ rewriter! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 18:01'! rewriteParserBlocks | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '| `@temps1 | `@.stmts1. [ `collection size < 0 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 | `@.stmts1. `@.stmts3'; replace: '| `@temps1 | `@.stmts1. [ `collection size < 1 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 `@temps2 | `@.stmts1. `@.stmts2. `@.stmts3'; replace: '| `@temps1 | `@.stmts1. [ `collection size < 1073741823 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 | `@.stmts1. [ | `@temps2 | `@.stmts2 ] repeat'. ^ rewriter! ! !PPJit methodsFor: 'rewriting' stamp: 'lr 8/2/2010 17:32'! rewriteReturns | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ^``@r1] ifFalse: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ``@r1] ifFalse: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ^``@r1] ifTrue: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ``@r1] ifTrue: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ``@r1] ifFalse: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ``@r1] ifFalse: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ``@r1] ifTrue: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ``@r1] ifTrue: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ^``@r1] ifFalse: [| `@t2 | `@.Stmts2. ``@r2]' with: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ``@r1] ifFalse: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ^``@r1] ifTrue: [| `@t2 | `@.Stmts2. ``@r2]' with: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ``@r1] ifTrue: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '``@boolean ifTrue: [| `@t1 | `@.Stmts1. ^``@r1] ifFalse: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifTrue: [| `@t1 | `@.Stmts1. ``@r1] ifFalse: [| `@t2 | `@.Stmts2. ``@r2]'; replace: '``@boolean ifFalse: [| `@t1 | `@.Stmts1. ^``@r1] ifTrue: [| `@t2 | `@.Stmts2. ^``@r2]' with: '^``@boolean ifFalse: [| `@t1 | `@.Stmts1. ``@r1] ifTrue: [| `@t2 | `@.Stmts2. ``@r2]'. ^ rewriter! ! !PPJit methodsFor: 'configuration' stamp: 'lr 8/1/2010 08:52'! rootParserClass ^ PPParser! ! Object subclass: #PPOptimizer instanceVariableNames: 'rewriter' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Optimizer'! !PPOptimizer commentStamp: '' prior: 0! PPOptimizer improves the internal structure of a grammar without touching its behavior. Instance Variables: rewriter The rewriter that knows how to optimize a grammar.! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 8/26/2010 08:36'! emptyChoice rewriter replace: PPChoiceParser new with: PPFailingParser new! ! !PPOptimizer methodsFor: 'optimizations-delegate' stamp: 'lr 4/29/2010 21:41'! identityWrapper rewriter replace: (PPPattern kind: PPDelegateParser) withValueFrom: [ :parser | parser children first ]! ! !PPOptimizer methodsFor: 'optimizations-delegate' stamp: 'lr 8/26/2010 09:55'! idepotentDelegate rewriter replace: PPPattern any withValueFrom: [ :parser | parser children first ] when: [ :parser | parser children size = 1 and: [ parser class = parser children first class and: [ #(PPAndParser PPEndOfInputParser PPFlattenParser PPTokenParser PPMemoizedParser PPTrimmingParser) includes: parser class name ] ] ]! ! !PPOptimizer methodsFor: 'initialization' stamp: 'lr 4/29/2010 21:01'! initialize rewriter := PPRewriter new. (Pragma allNamed: #optimize in: self class) do: [ :each | self perform: each selector ]! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 5/3/2010 21:50'! nestedChoice | before inside after | before := PPListPattern any. inside := PPListPattern any. after := PPListPattern any. rewriter replace: before / (PPChoiceParser with: inside) / after with: before / inside / after! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 9/1/2010 22:07'! nilledChoice | before parser after | parser := PPPattern any. rewriter replace: parser / nil asParser with: parser optional! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 9/1/2010 22:07'! nulledChoice | before parser after | before := PPListPattern any. parser := PPPattern any. after := PPListPattern any. rewriter replace: before / nil asParser / parser / after with: before / nil asParser! ! !PPOptimizer methodsFor: 'public' stamp: 'lr 4/29/2010 21:29'! optimize: aParser "Transform aParser by applying all the matching optimization rules. Repeatedly apply the rules until no more changes can be done." | current | current := aParser. [ current := rewriter execute: current. rewriter hasChanged ] whileTrue. ^ current! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:00'! optionalChoice | parser | parser := PPPattern any. rewriter replace: parser optional / parser with: parser optional! ! !PPOptimizer methodsFor: 'optimizations-epsilon' stamp: 'lr 8/26/2010 09:39'! optionalEpsilon rewriter replace: nil asParser optional with: nil asParser! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! optionalOptional | parser | parser := PPPattern any. rewriter replace: parser optional optional with: parser optional! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! optionalPlus | parser | parser := PPPattern any. rewriter replace: parser optional plus with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:02'! optionalPlusChoice | parser | parser := PPPattern any. rewriter replace: parser optional / parser plus with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! optionalStar | parser | parser := PPPattern any. rewriter replace: parser optional star with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:02'! optionalStarChoice | parser | parser := PPPattern any. rewriter replace: parser optional / parser star with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:00'! plusChoice | parser | parser := PPPattern any. rewriter replace: parser plus / parser with: parser plus! ! !PPOptimizer methodsFor: 'optimizations-epsilon' stamp: 'lr 8/26/2010 11:09'! plusEpsilon rewriter replace: nil asParser plus with: nil asParser! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! plusOptional | parser | parser := PPPattern any. rewriter replace: parser plus optional with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:03'! plusOptionalChoice | parser | parser := PPPattern any. rewriter replace: parser plus / parser optional with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! plusPlus | parser | parser := PPPattern any. rewriter replace: parser plus plus with: parser plus! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:46'! plusStar | parser | parser := PPPattern any. rewriter replace: parser plus star with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:03'! plusStarChoice | parser | parser := PPPattern any. rewriter replace: parser plus / parser star with: parser star! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 4/29/2010 23:19'! prefixedChoice | before prefix body1 body2 postfix after | before := PPListPattern any. prefix := PPPattern any. body1 := PPListPattern any. body2 := PPListPattern any. postfix := PPPattern any. after := PPListPattern any. rewriter replace: before / (prefix , body1) / (prefix , body2) / after with: before / (prefix , (body1 / body2)) / after. rewriter replace: before / (body1 , postfix) / (body2 , postfix) / after with: before / ((body1 / body2) , postfix) / after! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 4/29/2010 21:41'! repeatedChoice | before parser between after | before := PPListPattern any. parser := PPPattern any. between := PPListPattern any. after := PPListPattern any. rewriter replace: before / parser / between / parser / after with: before / parser / between / after! ! !PPOptimizer methodsFor: 'optimizations-choice' stamp: 'lr 5/3/2010 21:50'! singleChoice | parser | parser := PPPattern any. rewriter replace: (PPChoiceParser with: parser) with: parser! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:00'! starChoice | parser | parser := PPPattern any. rewriter replace: parser star / parser with: parser star! ! !PPOptimizer methodsFor: 'optimizations-epsilon' stamp: 'lr 8/26/2010 11:09'! starEpsilon rewriter replace: nil asParser star with: nil asParser! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:47'! starOptional | parser | parser := PPPattern any. rewriter replace: parser star optional with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:03'! starOptionalChoice | parser | parser := PPPattern any. rewriter replace: parser star / parser optional with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:47'! starPlus | parser | parser := PPPattern any. rewriter replace: parser star plus with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 10:03'! starPlusChoice | parser | parser := PPPattern any. rewriter replace: parser star / parser plus with: parser star! ! !PPOptimizer methodsFor: 'optimizations-operators' stamp: 'lr 8/26/2010 09:47'! starStar | parser | parser := PPPattern any. rewriter replace: parser star star with: parser star! ! Object subclass: #PPVisitor instanceVariableNames: 'dispatcher' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Compiler'! PPVisitor subclass: #PPCompiler instanceVariableNames: 'model selectors parser class removals' classVariableNames: '' poolDictionaries: '' category: 'PetitBeta-Compiler'! !PPCompiler methodsFor: 'accepting' stamp: 'lr 8/14/2010 13:51'! acceptChoice: aParser | method | method := RBMethodNode selector: (self uniqueSelectorFor: aParser) arguments: (Array with: self streamVariable) body: RBSequenceNode new. method body addTemporaryNamed: 'element'. aParser children keysAndValuesDo: [ :index :each | index < aParser children size ifTrue: [ self addExpression: '(element := self ' , (self uniqueSelectorFor: each) , ' aStream) isPetitFailure ifFalse: [ ^ element ]' to: method body ] ifFalse: [ self addExpression: '^ self ' , (self uniqueSelectorFor: each) , ' aStream' to: method body ] ]. ^ method! ! !PPCompiler methodsFor: 'accepting' stamp: 'lr 8/8/2010 19:36'! acceptParser: aParser | selector tree | selector := self uniqueSelectorFor: aParser. tree := (model classNamed: aParser class name) parseTreeFor: #parseOn:. tree renameSelector: selector andArguments: tree arguments. self inlineAll: tree for: aParser. ^ self rewrite: tree using: (RBParseTreeRewriter new replace: '| `@temps1 | `@.stmts1. [ :`arg2 | | `@temps2 | `@.stmts2 ] value: `@expr2. `@.stmts3' with: '| `@temps1 `arg2 `@temps2 | `@.stmts1. `arg2 := `@expr2. `@.stmts2. `@.stmts3'; replace: '| `@temps1 | `@.stmts1. [ :`@args2 | | `@temps2 | `@.stmts2 ] valueWithArguments: `expr2. `@.stmts3' with: '| `@temps1 `@args2 `@temps2 | `@.stmts1. `{ :context | (context at: (RBPatternVariableNode named: ''`@args2'')) withIndexCollect: [ :each :index | RBAssignmentNode variable: each value: (RBMessageNode receiver: (context at: (RBPatternVariableNode named: ''`expr2'')) selector: #at: arguments: (Array with: (RBLiteralNode value: index))) ] }. `@.stmts2. `@.stmts3'; replace: '| `@temps1a `var1 `@temps1b | `var1 := `@expr1. `var1 `@msg2: `@args2' with: '| `@temps1a `@temps1b | `@expr1 `@msg2: `@args2'; replace: '| `@temps1a `var1 `@temps1b | `@.stmts1. `var1 := `var2. `@.stmts2' with: '| `@temps1a `@temps1b | `{ :context | (context at: (RBPatternVariableNode named: ''`@.stmts1'')) , (context at: (RBPatternVariableNode named: ''`@.stmts2'')) collect: [ :each | (RBParseTreeRewriter rename: (context at: (RBPatternVariableNode named: ''`var1'')) name to: (context at: (RBPatternVariableNode named: ''`var2'')) name) executeTree: each; tree ] }'; yourself)! ! !PPCompiler methodsFor: 'accepting' stamp: 'lr 8/7/2010 19:44'! acceptRepetition: aParser continue: aContinuation ^ self rewrite: aContinuation value using: (RBParseTreeRewriter new replace: '| `@temps1 | `@.stmts1. [ `collection size < 0 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 | `@.stmts1. `@.stmts3'; replace: '| `@temps1 | `@.stmts1. [ `collection size < 1 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 `@temps2 | `@.stmts1. `@.stmts2. `@.stmts3'; replace: '| `@temps1 | `@.stmts1. [ `collection size < 1073741823 ] whileTrue: [ | `@temps2 | `@.stmts2 ]. `@.stmts3' with: '| `@temps1 | `@.stmts1. [ | `@temps2 | `@.stmts2 ] repeat'; yourself)! ! !PPCompiler methodsFor: 'accepting' stamp: 'lr 8/14/2010 13:52'! acceptSequence: aParser | method | method := RBMethodNode selector: (self uniqueSelectorFor: aParser) arguments: (Array with: self streamVariable) body: RBSequenceNode new. self addExpression: ' | start elements element | start := aStream position' to: method body. aParser children keysAndValuesDo: [ :index :each | self addExpression: ' element := self ' , (self uniqueSelectorFor: each) , ' aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]' to: method body. index = 1 ifTrue: [ self addExpression: 'elements := Array new: ' , aParser children size asString to: method body ]. self addExpression: 'elements at: ' , index asString , ' put: element' to: method body ]. self addExpression: '^ elements' to: method body. ^ method! ! !PPCompiler methodsFor: 'utilities' stamp: 'lr 8/7/2010 18:02'! addExpression: aString to: aSequenceNode | tree | tree := RBParser parseExpression: aString onError: [ :msg :pos | self error: msg ]. tree isSequence ifFalse: [ aSequenceNode addNode: tree ] ifTrue: [ aSequenceNode addTemporariesNamed: tree temporaryNames. aSequenceNode addNodes: tree statements ]! ! !PPCompiler methodsFor: 'accessing' stamp: 'lr 8/8/2010 11:06'! class: aClassOrSymbol class := model classNamed: (aClassOrSymbol isBehavior ifTrue: [ aClassOrSymbol theNonMetaClass name ] ifFalse: [ aClassOrSymbol asSymbol ])! ! !PPCompiler methodsFor: 'utilities' stamp: 'lr 8/8/2010 12:55'! compile: aMethodNode classified: aSelector (class parseTreeFor: aMethodNode selector asSymbol) = aMethodNode ifFalse: [ class compile: aMethodNode newSource classified: aSelector ]. removals remove: aMethodNode selector ifAbsent: [ nil ]! ! !PPCompiler methodsFor: 'transformation' stamp: 'lr 8/8/2010 12:32'! execute class selectors do: [ :selector | (class protocolsFor: selector) do: [ :protocol | (protocol beginsWith: self protocol) ifTrue: [ removals add: selector ] ] ]. parser allParsersDo: [ :each | self generate: each ]. removals do: [ :each | class removeMethod: each ]. model changes open! ! !PPCompiler methodsFor: 'transformation' stamp: 'lr 8/8/2010 12:52'! generate: aParser self compile: (self visit: aParser) classified: (aParser name isEmptyOrNil ifTrue: [ self protocolUnnamed ] ifFalse: [ self protocolNamed ])! ! !PPCompiler methodsFor: 'initialization' stamp: 'lr 8/8/2010 11:14'! initialize super initialize. model := RBNamespace new. selectors := Dictionary new. removals := Set new! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 13:31'! inlineAll: aMethodNode for: aParser ^ RBParseTreeRewriter new replace: 'parser parseOn: aStream' withValueFrom: [ :node | self inlineParser: node for: aParser ]; replace: 'self `@message: ``@arguments' withValueFrom: [ :node | self inlineSelf: node for: aParser ]; replace: 'super `@message: ``@arguments' withValueFrom: [ :node | self inlineSuper: node for: aParser ]; replace: '`variable' withValueFrom: [ :node | self inlineVariable: node for: aParser ]; executeTree: aMethodNode; tree ! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 16:58'! inlineBlock: aNode for: aParser value: aBlock | tree context rewriter | tree := RBParser parseExpression: aBlock asString onError: [ :msg :pos | self error: aParser printString , ' unable to parse block.' ]. aBlock numCopiedValues isZero ifTrue: [ ^ tree ]. context := aBlock asContext. rewriter := RBParseTreeRewriter new. 1 to: aBlock numCopiedValues do: [ :index | | node | node := RBVariableNode named: (context tempNames at: index). rewriter replaceTree: node withTree: (self inlineVariable: node for: aParser value: (aBlock at: index)) ]. ^ self rewrite: tree using: rewriter! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 13:28'! inlineGlobal: aNode for: aParser value: anObject ^ RBVariableNode named: anObject name! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 11:39'! inlineLiteral: aNode for: aParser value: aLiteral ^ RBLiteralNode value: aLiteral! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 13:32'! inlineParser: aNode for: aParser ^ RBMessageNode receiver: (RBVariableNode named: 'self') selector: (self uniqueSelectorFor: aParser children first) arguments: (Array with: self streamVariable)! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 13:21'! inlineSelf: aNode for: aParser | method | method := (model classNamed: aParser class name) parseTreeFor: aNode selector. self inlineAll: method for: aParser. self compile: method classified: self protocolUtilities. ^ aNode! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 16:05'! inlineSuper: aNode for: aParser self error: 'Unsupported super send ' , aNode formattedCode , ' in ' , aParser printString! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 16:29'! inlineVariable: aNode for: aParser ^ self inlineVariable: aNode for: aParser value: (self lookupValue: aNode in: aParser ifAbsent: [ ^ aNode ])! ! !PPCompiler methodsFor: 'inlining' stamp: 'lr 8/8/2010 16:29'! inlineVariable: aNode for: aParser value: anObject anObject isLiteral ifTrue: [ ^ self inlineLiteral: aNode for: aParser value: anObject ]. anObject isBlock ifTrue: [ ^ self inlineBlock: aNode for: aParser value: anObject ]. anObject isBehavior ifTrue: [ ^ self inlineGlobal: aNode for: aParser value: anObject ]. ^ aNode! ! !PPCompiler methodsFor: 'utilities' stamp: 'lr 8/8/2010 13:26'! lookupValue: aNode in: aParser ifAbsent: aBlock | index | (aNode whoDefines: aNode name) notNil ifTrue: [ ^ aBlock value ]. index := aParser class allInstVarNames indexOf: aNode name ifAbsent: [ nil ]. index isNil ifFalse: [ ^ aParser instVarAt: index ]. (aParser class bindingOf: aNode name) isNil ifFalse: [ ^ aParser class bindingOf: aNode name ]. ^ aBlock value! ! !PPCompiler methodsFor: 'accessing' stamp: 'lr 8/7/2010 10:39'! parser: aParser parser := aParser! ! !PPCompiler methodsFor: 'configuration' stamp: 'lr 8/8/2010 12:31'! protocol ^ 'generated'! ! !PPCompiler methodsFor: 'configuration' stamp: 'lr 8/8/2010 12:52'! protocolNamed ^ self protocol , '-parser'! ! !PPCompiler methodsFor: 'configuration' stamp: 'lr 8/8/2010 12:32'! protocolUnnamed ^ self protocol , '-unnamed'! ! !PPCompiler methodsFor: 'configuration' stamp: 'lr 8/8/2010 12:32'! protocolUtilities ^ self protocol , '-utilities'! ! !PPCompiler methodsFor: 'utilities' stamp: 'lr 8/7/2010 19:44'! rewrite: aNode using: aRewriter "Apply aRewriter repeatedly to aNode until no more changes can be performed." | tree | tree := aNode. [ aRewriter executeTree: tree ] whileTrue: [ tree := aRewriter tree ]. ^ tree! ! !PPCompiler methodsFor: 'configuration' stamp: 'lr 8/7/2010 17:51'! streamVariable ^ RBVariableNode named: 'aStream'! ! !PPCompiler methodsFor: 'transformation' stamp: 'lr 8/7/2010 20:00'! uniqueSelectorFor: aParser | baseName counter | selectors at: aParser ifPresent: [ :selector | ^ selector ]. baseName := aParser name. (baseName isNil or: [ baseName isEmpty ]) ifTrue: [ baseName := 'Unnamed' ] ifFalse: [ baseName := baseName select: [ :each | each isAlphaNumeric ]. baseName isEmpty ifFalse: [ baseName at: 1 put: baseName first asUppercase ] ]. baseName := 'parse' , baseName. (selectors values includes: baseName , 'On:') ifFalse: [ ^ selectors at: aParser put: baseName , 'On:' ]. counter := 1. [ selectors values includes: baseName , (counter asString padded: #left to: 4 with: $0) , 'On:' ] whileTrue: [ counter := counter + 1 ]. ^ selectors at: aParser put: baseName , (counter asString padded: #left to: 4 with: $0) , 'On:'! ! !PPVisitor methodsFor: 'initialization' stamp: 'lr 8/7/2010 18:44'! initialize dispatcher := IdentityDictionary new. (Pragma allNamed: #accept: from: self class to: PPVisitor) do: [ :each | dispatcher at: each arguments first put: each selector ]! ! !PPVisitor methodsFor: 'visiting' stamp: 'lr 8/7/2010 18:45'! visit: anObject ^ self visit: anObject class: anObject class! ! !PPVisitor methodsFor: 'visiting' stamp: 'lr 8/7/2010 18:53'! visit: anObject class: aClass | selector | aClass isNil ifTrue: [ ^ nil ]. selector := dispatcher at: aClass name ifAbsent: [ ^ self visit: anObject class: aClass superclass ]. ^ selector numArgs = 1 ifTrue: [ self perform: selector with: anObject ] ifFalse: [ self perform: selector with: anObject with: [ self visit: anObject class: aClass superclass ] ]! !