SystemOrganization addCategory: #'PetitSmalltalk-Core'! SystemOrganization addCategory: #'PetitSmalltalk-Tests'! PPCompositeParser subclass: #PPSmalltalkGrammar instanceVariableNames: 'array arrayLiteral arrayLiteralArray assignment assignmentToken binary binaryExpression binaryMessage binaryMethod binaryPragma binaryToken block blockArgument blockArguments blockBody byteLiteral cascadeExpression cascadeMessage char charLiteral charToken expression falseLiteral falseToken identifier identifierToken keyword keywordExpression keywordMessage keywordMethod keywordPragma keywordToken literal message method methodDeclaration methodSequence multiword nilLiteral nilToken number numberLiteral numberToken parens pragma pragmaMessage pragmas primary return sequence statements startMethod startExpression string stringLiteral stringToken symbol symbolLiteral temporaries trueLiteral trueToken unary unaryExpression unaryMessage unaryMethod unaryPragma unaryToken variable symbolLiteralArray byteLiteralArray arrayItem blockArgumentsWith blockArgumentsWithout' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Core'! !PPSmalltalkGrammar commentStamp: 'lr 11/29/2009 09:58' prior: 0! A parser for Smalltalk methods and expressions.! !PPSmalltalkGrammar class methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:08'! parseExpression: aString ^ self new parseExpression: aString! ! !PPSmalltalkGrammar class methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:09'! parseExpression: aString onError: aBlock ^ self new parseExpression: aString onError: aBlock! ! !PPSmalltalkGrammar class methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:09'! parseMethod: aString ^ self new parseMethod: aString! ! !PPSmalltalkGrammar class methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:09'! parseMethod: aString onError: aBlock ^ self new parseMethod: aString onError: aBlock! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! array ^ ${ asParser token , statements , $} asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:39'! arrayItem ^ literal / symbolLiteralArray / arrayLiteralArray / byteLiteralArray! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:32'! arrayLiteral ^ '#(' asParser token , arrayItem star , $) asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:37'! arrayLiteralArray ^ $( asParser token , arrayItem star , $) asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! assignment ^ variable , assignmentToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! assignmentToken ^ (':=' asParser / '_' asParser) token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! binary ^ $~ asParser / $- asParser / $!! asParser / $@ asParser / $% asParser / $& asParser / $* asParser / $+ asParser / $= asParser / $\ asParser / $| asParser / $? asParser / $/ asParser / $> asParser / $< asParser / $, asParser , ($~ asParser / $!! asParser / $@ asParser / $% asParser / $& asParser / $* asParser / $+ asParser / $= asParser / $\ asParser / $| asParser / $? asParser / $/ asParser / $> asParser / $< asParser / $, asParser) star! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 9/27/2009 12:42'! binaryExpression ^ unaryExpression , binaryMessage star! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:38'! binaryMessage ^ (binaryToken , unaryExpression) ==> [ :nodes | Array with: (Array with: nodes first) with: (Array with: nodes second) ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-methods' stamp: 'lr 12/6/2009 10:38'! binaryMethod ^ (binaryToken , variable) ==> [ :nodes | Array with: (Array with: nodes first) with: (Array with: nodes second) ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-pragmas' stamp: 'TestRunner 10/23/2009 17:34'! binaryPragma ^ (binaryToken , arrayItem) ==> [ :nodes | Array with: (Array with: nodes first) with: (Array with: nodes second) ]! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! binaryToken ^ binary token! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 9/27/2009 12:42'! block ^ $[ asParser token , blockBody , $] asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 9/27/2009 12:42'! blockArgument ^ $: asParser token , variable! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 2/4/2010 13:21'! blockArguments ^ blockArgumentsWith / blockArgumentsWithout! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 2/4/2010 11:47'! blockArgumentsWith ^ blockArgument plus , ($| asParser token / ($] asParser token and ==> [ :node | nil ]))! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 2/4/2010 11:44'! blockArgumentsWithout ^ nil asParser ==> [ :nodes | Array with: #() with: nil ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-blocks' stamp: 'lr 2/4/2010 11:39'! blockBody ^ blockArguments , sequence! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:38'! byteLiteral ^ '#[' asParser token , numberLiteral star , $] asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:31'! byteLiteralArray ^ $[ asParser token , numberLiteral star , $] asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 9/27/2009 12:42'! cascadeExpression ^ keywordExpression , cascadeMessage star! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 9/27/2009 12:42'! cascadeMessage ^ $; asParser token , message! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! char ^ $$ asParser , #any asParser! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! charLiteral ^ charToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! charToken ^ char token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! expression ^ assignment star , cascadeExpression! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! falseLiteral ^ falseToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! falseToken ^ ('false' asParser , #word asParser not) token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 11/9/2009 18:52'! identifier ^ #letter asParser , #word asParser star! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! identifierToken ^ identifier token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! keyword ^ identifier , $: asParser! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 9/27/2009 12:42'! keywordExpression ^ binaryExpression , keywordMessage optional! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:38'! keywordMessage ^ (keywordToken , binaryExpression) plus ==> [ :nodes | Array with: (nodes collect: [ :each | each first ]) with: (nodes collect: [ :each | each second ]) ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-methods' stamp: 'lr 12/6/2009 10:38'! keywordMethod ^ (keywordToken , variable) plus ==> [ :nodes | Array with: (nodes collect: [ :each | each first ]) with: (nodes collect: [ :each | each second ]) ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-pragmas' stamp: 'TestRunner 10/23/2009 17:35'! keywordPragma ^ (keywordToken , arrayItem) plus ==> [ :nodes | Array with: (nodes collect: [ :each | each first ]) with: (nodes collect: [ :each | each second ]) ]! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! keywordToken ^ keyword token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 2/4/2010 13:09'! literal ^ charLiteral / numberLiteral / stringLiteral / symbolLiteral / arrayLiteral / byteLiteral / trueLiteral / falseLiteral / nilLiteral ! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! message ^ keywordMessage / binaryMessage / unaryMessage! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! method ^ methodDeclaration , methodSequence! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! methodDeclaration ^ keywordMethod / unaryMethod / binaryMethod! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 12/6/2009 10:38'! methodSequence ^ ($. asParser token star , pragmas , temporaries , pragmas , statements) ==> [ :nodes | Array with: nodes second , nodes fourth with: nodes third with: nodes fifth ]! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! multiword ^ keyword plus! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! nilLiteral ^ nilToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! nilToken ^ ('nil' asParser , #word asParser not) token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 11/11/2009 21:19'! number ^ ($- asParser optional , #digit asParser plus , ($. asParser , #digit asParser plus) optional) and , [ :stream | [ Number readFrom: stream ] on: Error do: [ :err | PPFailure reason: err messageText at: stream position ] ] asParser! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! numberLiteral ^ numberToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! numberToken ^ number token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! parens ^ $( asParser token , expression , $) asParser token! ! !PPSmalltalkGrammar methodsFor: 'parsing' stamp: 'lr 2/19/2010 08:00'! parseExpression: aString ^ self parseExpression: aString onError: [ :msg :pos | self error: msg ]! ! !PPSmalltalkGrammar methodsFor: 'parsing' stamp: 'lr 2/19/2010 08:04'! parseExpression: aString onError: aBlock ^ startExpression parse: aString onError: aBlock! ! !PPSmalltalkGrammar methodsFor: 'parsing' stamp: 'lr 2/19/2010 08:01'! parseMethod: aString ^ self parseMethod: aString onError: [ :msg :pos | self error: msg ]! ! !PPSmalltalkGrammar methodsFor: 'parsing' stamp: 'lr 2/19/2010 08:04'! parseMethod: aString onError: aBlock ^ startMethod parse: aString onError: aBlock! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! pragma ^ $< asParser token , pragmaMessage , $> asParser token! ! !PPSmalltalkGrammar methodsFor: 'grammar-pragmas' stamp: 'lr 9/27/2009 12:42'! pragmaMessage ^ keywordPragma / unaryPragma / binaryPragma! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! pragmas ^ pragma star! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 2/4/2010 13:07'! primary ^ block / parens / array / literal / variable! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! return ^ $^ asParser token , expression! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! sequence ^ temporaries , statements! ! !PPSmalltalkGrammar methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:05'! start "Default start production." ^ startMethod! ! !PPSmalltalkGrammar methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:03'! startExpression "Start production for the expression." ^ sequence end! ! !PPSmalltalkGrammar methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:03'! startMethod "Start production for the method." ^ method end! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 2/4/2010 13:01'! statements ^ (expression wrapped , $. asParser token plus , statements ==> [ :nodes | (Array with: nodes first) , (nodes second) , (nodes last) ]) / (expression wrapped , $. asParser token star ==> [ :nodes | (Array with: nodes first) , (nodes second) ]) / (return , $. asParser token star ==> [ :nodes | (Array with: nodes first) , (nodes last) ]) / ($. asParser token star)! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 1/8/2010 15:38'! string ^ $' asParser , ('''''' asParser / $' asParser negate) star , $' asParser! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! stringLiteral ^ stringToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! stringToken ^ string token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! symbol ^ unary / binary / multiword / string! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! symbolLiteral ^ ($# asParser , symbol) token! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'TestRunner 10/23/2009 17:31'! symbolLiteralArray ^ symbol token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 11/5/2009 11:01'! temporaries ^ ($| asParser token , variable star , $| asParser token) optional ==> [ :nodes | nodes ifNil: [ #() ] ]! ! !PPSmalltalkGrammar methodsFor: 'accessing' stamp: 'lr 9/27/2009 12:42'! tokenParser ^ PPSmalltalkTokenParser! ! !PPSmalltalkGrammar methodsFor: 'grammar-literals' stamp: 'lr 9/27/2009 12:42'! trueLiteral ^ trueToken! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! trueToken ^ ('true' asParser , #word asParser not) token! ! !PPSmalltalkGrammar methodsFor: 'primitives' stamp: 'lr 9/27/2009 12:42'! unary ^ identifier , $: asParser not! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 9/27/2009 12:42'! unaryExpression ^ primary , unaryMessage star! ! !PPSmalltalkGrammar methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:39'! unaryMessage ^ unaryToken ==> [ :node | Array with: (Array with: node) with: Array new ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-methods' stamp: 'lr 12/6/2009 10:39'! unaryMethod ^ identifierToken ==> [ :node | Array with: (Array with: node) with: Array new ]! ! !PPSmalltalkGrammar methodsFor: 'grammar-pragmas' stamp: 'TestRunner 10/23/2009 16:35'! unaryPragma ^ identifierToken ==> [ :node | Array with: (Array with: node) with: (Array new) ]! ! !PPSmalltalkGrammar methodsFor: 'token' stamp: 'lr 9/27/2009 12:42'! unaryToken ^ unary token! ! !PPSmalltalkGrammar methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! variable ^ identifierToken! ! PPSmalltalkGrammar subclass: #PPSmalltalkParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Core'! !PPSmalltalkParser commentStamp: 'lr 11/29/2009 09:58' prior: 0! Enhances the Smalltalk grammar with production actions to build parse-tree nodes of the refactoring browser.! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'TestRunner 11/7/2009 13:45'! array ^ super array ==> [ :nodes | (self buildArray: nodes second) left: nodes first start; right: nodes last start; yourself ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:41'! arrayLiteral ^ super arrayLiteral ==> [ :nodes | RBLiteralArrayNode startPosition: nodes first start contents: nodes second stopPosition: nodes last start isByteArray: false ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:41'! arrayLiteralArray ^ super arrayLiteralArray ==> [ :nodes | RBLiteralArrayNode startPosition: nodes first start contents: nodes second stopPosition: nodes last start isByteArray: false ]! ! !PPSmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:39'! binaryExpression ^ super binaryExpression map: [ :receiverNode :messageNodes | self build: receiverNode messages: messageNodes ]! ! !PPSmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 12/6/2009 10:37'! block ^ super block map: [ :leftToken :blockNode :rightToken | blockNode left: leftToken start; right: rightToken start ]! ! !PPSmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 9/27/2009 12:42'! blockArgument ^ super blockArgument ==> #second! ! !PPSmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 2/4/2010 11:42'! blockBody ^ super blockBody ==> [ :nodes | | result | result := RBBlockNode arguments: nodes first first body: nodes last. nodes first last isNil ifFalse: [ result bar: nodes first last start ]. result ]! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'TestRunner 11/5/2009 10:36'! 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 ] ]! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'lr 11/5/2009 10:44'! 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 ]! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'lr 11/5/2009 10:44'! 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 ] ] ]! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'lr 1/29/2010 12:00'! 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! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'lr 3/1/2010 10:22'! 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! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'lr 3/1/2010 10:51'! 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! ! !PPSmalltalkParser methodsFor: 'private' stamp: 'TestRunner 10/23/2009 16:49'! 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: ''''! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:41'! byteLiteral ^ super byteLiteral ==> [ :nodes | RBLiteralArrayNode startPosition: nodes first start contents: nodes second stopPosition: nodes last start isByteArray: true ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:41'! byteLiteralArray ^ super byteLiteralArray ==> [ :nodes | RBLiteralArrayNode startPosition: nodes first start contents: nodes second stopPosition: nodes last start isByteArray: true ]! ! !PPSmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:40'! cascadeExpression ^ super cascadeExpression map: [ :receiverNode :messageNodes | self build: receiverNode cascade: messageNodes ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:28'! charLiteral ^ super charLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: token value second start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 12/6/2009 10:40'! expression ^ super expression map: [ :variableNodes :expressionNodes | self build: expressionNodes assignment: variableNodes ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:29'! falseLiteral ^ super falseLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: false start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:41'! keywordExpression ^ super keywordExpression map: [ :receiveNode :messageNode | self build: receiveNode messages: (Array with: messageNode) ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 3/1/2010 10:28'! method ^ super method map: [ :methodNode :bodyNode | methodNode pragmas: bodyNode first. methodNode body: (self build: bodyNode second sequence: bodyNode third). self buildMethod: methodNode ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 3/1/2010 10:27'! methodDeclaration ^ super methodDeclaration ==> [ :nodes | RBMethodNode selectorParts: nodes first arguments: nodes second ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:29'! nilLiteral ^ super nilLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: nil start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 13:33'! numberLiteral ^ super numberLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBNumberLiteralToken value: (Number readFrom: token value) start: token start stop: token stop source: token value) ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 12/6/2009 10:42'! parens ^ super parens map: [ :openToken :expressionNode :closeToken | expressionNode addParenthesis: (openToken start to: closeToken start) ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 3/1/2010 10:50'! pragma ^ super pragma ==> [ :nodes | (RBPragmaNode selectorParts: nodes second first arguments: nodes second second) addComments: nodes first comments; addComments: nodes last comments; left: nodes first start; right: nodes last start; yourself ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 12/6/2009 10:42'! return ^ super return map: [ :token :expressionNode | RBReturnNode return: token start value: expressionNode ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 12/6/2009 10:42'! sequence ^ super sequence map: [ :tempNodes :statementNodes | self build: tempNodes sequence: statementNodes ]! ! !PPSmalltalkParser methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:07'! startExpression "Make the sequence node has a method node as its parent and that the source is set." ^ ([ :stream | stream collection ] asParser and , super startExpression) map: [ :source :node | (RBMethodNode selector: #doIt body: node) source: source. (node statements size = 1 and: [ node temporaries isEmpty ]) ifTrue: [ node statements first ] ifFalse: [ node ] ]! ! !PPSmalltalkParser methodsFor: 'accessing' stamp: 'lr 2/19/2010 08:20'! startMethod "Make sure the method node has the source code properly set." ^ ([ :stream | stream collection ] asParser and , super startMethod) map: [ :source :node | node source: source ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:30'! stringLiteral ^ super stringLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: token value) start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:31'! symbolLiteral ^ super symbolLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: token value) start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:45'! symbolLiteralArray ^ super symbolLiteralArray ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: (self buildString: token value) asSymbol start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-literals' stamp: 'TestRunner 11/5/2009 11:29'! trueLiteral ^ super trueLiteral ==> [ :token | RBLiteralValueNode literalToken: (RBLiteralToken value: true start: token start stop: token stop) ]! ! !PPSmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 12/6/2009 10:43'! unaryExpression ^ super unaryExpression map: [ :receiverNode :messageNodes | self build: receiverNode messages: messageNodes ]! ! !PPSmalltalkParser methodsFor: 'grammar' stamp: 'lr 9/27/2009 12:42'! variable ^ super variable ==> [ :token | RBVariableNode identifierToken: token ]! ! PPToken subclass: #PPSmalltalkToken instanceVariableNames: 'comments' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Core'! !PPSmalltalkToken class methodsFor: 'instance creation' stamp: 'lr 4/6/2010 20:04'! on: aSequenzeableCollection start: aStartInteger stop: aStopInteger comments: anArray ^ (self on: aSequenzeableCollection start: aStartInteger stop: aStopInteger) comments: anArray! ! !PPSmalltalkToken methodsFor: 'accessing' stamp: 'lr 12/7/2009 09:30'! comments ^ comments! ! !PPSmalltalkToken methodsFor: 'accessing' stamp: 'lr 12/7/2009 09:30'! comments: anArray comments := anArray! ! !PPSmalltalkToken methodsFor: 'compatiblity' stamp: 'lr 2/14/2010 11:58'! length ^ self size! ! !RBProgramNode methodsFor: '*petitsmalltalk-accessing' stamp: 'lr 1/29/2010 12:02'! addComments: aCollectionOfIntervals (aCollectionOfIntervals isNil or: [ aCollectionOfIntervals isEmpty ]) ifFalse: [ self comments: self comments , aCollectionOfIntervals ]! ! PPDelegateParser subclass: #PPSmalltalkTokenParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Core'! !PPSmalltalkTokenParser commentStamp: 'lr 11/29/2009 09:59' prior: 0! A parser that knows how to skip comments and whitespace in Smalltalk and how to instantiate tokens.! !PPSmalltalkTokenParser methodsFor: 'parsing' stamp: 'lr 4/6/2010 20:02'! 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 atEnd not and: [ aStream next = $" ] ] whileFalse. comments := comments copyWith: (start to: aStream position) ]. ^ comments! ! !PPSmalltalkTokenParser methodsFor: 'parsing' stamp: 'lr 4/6/2010 20:00'! parseOn: aStream | begin start comments element stop | begin := aStream position. comments := self parseComments: #() on: aStream. start := aStream position. element := super parseOn: aStream. element isPetitFailure ifTrue: [ aStream position: begin. ^ element ]. stop := aStream position. comments := self parseComments: comments on: aStream. ^ PPSmalltalkToken on: aStream collection start: start + 1 stop: stop comments: comments! ! TestCase subclass: #PPSmalltalkTest instanceVariableNames: 'result' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Tests'! PPSmalltalkTest subclass: #PPSmalltalkClassesTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Tests'! !PPSmalltalkClassesTests commentStamp: 'lr 3/26/2009 16:09' prior: 0! Evalaute the following code to verify the complete image. PackageOrganizer default packages inject: LAPackagesTests new into: [ :test :package | [ test verifyPackage: package packageName ] on: TestResult resumableFailure do: [ :err | err resume ] ]! !PPSmalltalkClassesTests methodsFor: 'private' stamp: 'lr 9/27/2009 12:43'! assert: aBoolean description: aString self assert: aBoolean description: aString resumable: true! ! !PPSmalltalkClassesTests methodsFor: 'accessing' stamp: 'lr 12/7/2009 09:05'! parserClass ^ PPSmalltalkParser! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testCollection self verifyClass: Collection. self verifyClass: Array. self verifyClass: Set. self verifyClass: Dictionary. self verifyClass: Bag. self verifyClass: OrderedCollection. self verifyClass: SortedCollection! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'TestRunner 10/23/2009 18:13'! testDateAndTime self verifyClass: DateAndTime. self verifyClass: Duration! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'TestRunner 10/23/2009 18:12'! testException self verifyClass: Exception. self verifyClass: Notification. self verifyClass: Warning. self verifyClass: Error! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'TestRunner 10/23/2009 18:12'! testFundamental self verifyClass: Object. self verifyClass: Boolean. self verifyClass: True. self verifyClass: False. self verifyClass: Character ! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'TestRunner 10/23/2009 18:10'! testMagnitude self verifyClass: Magnitude. self verifyClass: Number. self verifyClass: Integer. self verifyClass: Float. self verifyClass: Fraction! ! !PPSmalltalkClassesTests methodsFor: 'testing-protocol' stamp: 'lr 2/19/2010 09:13'! testParseExpression result := self parserClass parseExpression: '1 + 2'. self assert: result isMessage. self assert: result source = '1 + 2'. result := self parserClass parseExpression: '| a | 1 + a'. self assert: result isSequence. self assert: result source = '| a | 1 + a'. result := self parserClass parseExpression: '1 + 2. ^ 3'. self assert: result isSequence. self assert: result source = '1 + 2. ^ 3'. result := self parserClass parseExpression: '1 + ' onError: [ :err | true ]. self assert: result. self should: [ self parserClass parseExpression: '1 + ' ] raise: Error! ! !PPSmalltalkClassesTests methodsFor: 'testing-protocol' stamp: 'lr 2/19/2010 09:13'! testParseMethod result := self parserClass parseMethod: 'do 1 + 2'. self assert: result isMethod. self assert: result source = 'do 1 + 2'. result := self parserClass parseMethod: 'do 1 +' onError: [ :err | true ]. self assert: result. self should: [ self parserClass parseMethod: 'do 1 +' ] raise: Error! ! !PPSmalltalkClassesTests methodsFor: 'testing' stamp: 'TestRunner 10/23/2009 18:14'! testStream self verifyClass: Stream. self verifyClass: ReadStream. self verifyClass: WriteStream! ! !PPSmalltalkClassesTests methodsFor: 'private' stamp: 'TestRunner 10/23/2009 18:15'! verifyClass: aClass aClass selectors do: [ :selector | self verifyClass: aClass selector: selector ] displayingProgress: aClass name. aClass isMeta ifFalse: [ self verifyClass: aClass class ]! ! !PPSmalltalkClassesTests methodsFor: 'private' stamp: 'lr 3/29/2010 15:28'! verifyClass: aClass selector: aSelector "Verifies that the method aSelector in aClass parses the same using the standard refactoring parser and the petit smalltalk parser. Also make sure that the position information of all tokens and comments is equal." | source original other checker | source := aClass sourceCodeAt: aSelector. source isNil ifTrue: [ ^ self ]. original := aClass parseTreeFor: aSelector. original isNil ifTrue: [ ^ self ]. other := self parserInstance parseMethod: source. source := aClass name , '>>#' , original selector. other isPetitFailure ifTrue: [ self assert: false description: source ]. self assert: original = other description: 'Code in ' , source. checker := [ :node1 :node2 | self assert: node1 sourceInterval = node2 sourceInterval description: 'Source intervals in ' , source. (node2 isArray or: [ node2 isSequence ]) ifTrue: [ self assert: node1 periods = node2 periods description: 'Periods in ' , source ]. node1 children with: node2 children do: checker ]. checker value: original value: other! ! PPSmalltalkTest subclass: #PPSmalltalkGrammarTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Tests'! !PPSmalltalkGrammarTests methodsFor: 'accessing' stamp: 'lr 9/27/2009 12:42'! parserClass ^ PPSmalltalkGrammar! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock1 self parse: '[ :a | ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock2 self parse: '[ :a :b | ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock3 self parse: '[ :a :b :c | ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:09'! testArray1 self parse: '{}' rule: #array! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:10'! testArray2 self parse: '{self foo}' rule: #array! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:10'! testArray3 self parse: '{self foo. self bar}' rule: #array! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:10'! testArray4 self parse: '{self foo. self bar.}' rule: #array! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral1 self parse: '#()' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral10 self parse: '#((1 2) #(1 2 3))' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral11 self parse: '#([1 2] #[1 2 3])' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral2 self parse: '#(1)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral3 self parse: '#(1 2)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral4 self parse: '#(true false nil)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral5 self parse: '#($a)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral6 self parse: '#(1.2)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral7 self parse: '#(size #at: at:put: #''=='')' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral8 self parse: '#(''baz'')' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'TestRunner 10/23/2009 16:52'! testArrayLiteral9 self parse: '#((1) 2)' rule: #arrayLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment1 self parse: '1' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment2 self parse: 'a := 1' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment3 self parse: 'a := b := 1' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment4 self parse: 'a _ 1' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment5 self parse: 'a _ b _ 1' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryExpression1 self parse: '1 + 2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryExpression2 self parse: '1 + 2 + 3' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod1 self parse: '+ a' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod2 self parse: '+ a | b |' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod3 self parse: '+ a b' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod4 self parse: '+ a | b | c' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral1 self parse: '#[]' rule: #byteLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral2 self parse: '#[0]' rule: #byteLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral3 self parse: '#[255]' rule: #byteLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral4 self parse: '#[ 1 2 ]' rule: #byteLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral5 self parse: '#[ 2r1010 8r77 16rFF ]' rule: #byteLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression1 self parse: '1 abs; negated' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression2 self parse: '1 abs negated; raisedTo: 12; negated' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression3 self parse: '1 + 2; - 3' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral1 self parse: '$a' rule: #charLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral2 self parse: '$ ' rule: #charLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral3 self parse: '$$' rule: #charLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment1 self parse: '1"one"+2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment2 self parse: '1 "one" +2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment3 self parse: '1"one"+"two"2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment4 self parse: '1"one""two"+2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment5 self parse: '1"one" "two"+2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testComplexBlock1 self parse: '[ :a | | b | c ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testComplexBlock2 self parse: '[:a||b|c]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression1 self parse: '1 to: 2' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression2 self parse: '1 to: 2 by: 3' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression3 self parse: '1 to: 2 by: 3 do: 4' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod1 self parse: 'to: a' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod2 self parse: 'to: a do: b | c |' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod3 self parse: 'to: a do: b by: c d' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod4 self parse: 'to: a do: b by: c | d | e' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod1 self parse: 'negated ^ 0 - self' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod2 "Spaces at the beginning of the method." self parse: ' negated ^ 0 - self' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod3 "Spaces at the end of the method." self parse: ' negated ^ 0 - self ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral1 self parse: '0' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral10 self parse: '10r10' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral11 self parse: '8r777' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral12 self parse: '16rAF' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral13 self parse: '16rCA.FE' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral14 self parse: '3r-22.2' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral2 self parse: '0.1' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral3 self parse: '123' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral4 self parse: '123.456' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral5 self parse: '-0' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral6 self parse: '-0.1' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral7 self parse: '-123' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral8 self parse: '-123' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral9 self parse: '-123.456' rule: #numberLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma1 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma10 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma11 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma12 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma13 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma14 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma15 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma2 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma3 self parse: 'method | a | ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma4 self parse: 'method | a |' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma5 self parse: 'method | a | ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma6 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma7 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma8 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma9 self parse: 'method ' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testSequence1 self parse: '| a | 1 . 2' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock1 self parse: '[ ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock2 self parse: '[ nil ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock3 self parse: '[ :a ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral1 self parse: 'true' rule: #trueLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral2 self parse: 'false' rule: #falseLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral3 self parse: 'nil' rule: #nilLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock1 self parse: '[ nil ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock2 self parse: '[ | a | nil ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock3 self parse: '[ | a b | nil ]' rule: #block! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements1 self parse: '1' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements2 self parse: '1 . 2' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements3 self parse: '1 . 2 . 3' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements4 self parse: '1 . 2 . 3 .' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements5 self parse: '1 . . 2' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral1 self parse: '''''' rule: #stringLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral2 self parse: '''ab''' rule: #stringLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral3 self parse: '''ab''''cd''' rule: #stringLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral1 self parse: '#foo' rule: #symbolLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral2 self parse: '#+' rule: #symbolLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral3 self parse: '#key:' rule: #symbolLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral4 self parse: '#key:value:' rule: #symbolLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral5 self parse: '#''testing-result''' rule: #symbolLiteral! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries1 self parse: '| a |' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries2 self parse: '| a b |' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries3 self parse: '| a b c |' rule: #sequence! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryExpression1 self parse: '1 abs' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryExpression2 self parse: '1 abs negated' rule: #expression! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod1 self parse: 'abs' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod2 self parse: 'abs | a |' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod3 self parse: 'abs a' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod4 self parse: 'abs | a | b' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod5 self parse: 'abs | a |' rule: #method! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable1 self parse: 'trueBinding' rule: #primary! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable2 self parse: 'falseBinding' rule: #primary! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable3 self parse: 'nilly' rule: #primary! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable4 self parse: 'selfish' rule: #primary! ! !PPSmalltalkGrammarTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable5 self parse: 'supernanny' rule: #primary! ! PPSmalltalkGrammarTests subclass: #PPSmalltalkParserTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitSmalltalk-Tests'! !PPSmalltalkParserTests methodsFor: 'private' stamp: 'lr 3/29/2010 15:31'! assert: aNode format: aString aNode isCollection ifFalse: [ ^ self assert: (Array with: aNode) format: (Array with: aString) ]. self assert: aNode size = aString size. aNode with: aString do: [ :node :string | self assert: (RBFormatter new format: node) withBlanksTrimmed = string ]! ! !PPSmalltalkParserTests methodsFor: 'accessing' stamp: 'lr 12/7/2009 09:01'! parserClass ^ PPSmalltalkParser! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock1 super testArgumentsBlock1. self assert: result isBlock. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock2 super testArgumentsBlock2. self assert: result isBlock. self assert: result arguments size = 2. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result arguments second isVariable. self assert: result arguments second name = 'b'. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testArgumentsBlock3 super testArgumentsBlock3. self assert: result isBlock. self assert: result arguments size = 3. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result arguments second isVariable. self assert: result arguments second name = 'b'. self assert: result arguments third isVariable. self assert: result arguments third name = 'c'. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:13'! testArray1 super testArray1. self assert: result isArray. self assert: result statements isEmpty. self assert: result periods isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:13'! testArray2 super testArray2. self assert: result isArray. self assert: result periods isEmpty. self assert: result statements size = 1. self assert: result statements first isMessage. self assert: result statements first selector = #foo! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:14'! testArray3 super testArray3. self assert: result isArray. self assert: result periods size = 1. self assert: result statements size = 2. self assert: result statements first isMessage. self assert: result statements first selector = #foo. self assert: result statements last isMessage. self assert: result statements last selector = #bar! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:14'! testArray4 super testArray4. self assert: result isArray. self assert: result periods size = 2. self assert: result statements size = 2. self assert: result statements first isMessage. self assert: result statements first selector = #foo. self assert: result statements last isMessage. self assert: result statements last selector = #bar! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral1 super testArrayLiteral1. self assert: result isLiteral. self assert: result value = #()! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral10 super testArrayLiteral10. self assert: result isLiteral. self assert: result value = #(#(1 2 ) #(1 2 3 ) )! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral11 super testArrayLiteral11. self assert: result isLiteral. self assert: result value size = 2. self assert: (result value first isKindOf: ByteArray). self assert: result value first size = 2. self assert: (result value last isKindOf: ByteArray). self assert: result value last size = 3! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'TestRunner 10/23/2009 17:44'! testArrayLiteral2 super testArrayLiteral2. self assert: result isLiteral. self assert: result value = #(1)! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral3 super testArrayLiteral3. self assert: result isLiteral. self assert: result value = #(1 2 )! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral4 super testArrayLiteral4. self assert: result isLiteral. self assert: result value = #(true false nil )! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral5 super testArrayLiteral5. self assert: result isLiteral. self assert: result value = #($a )! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral6 super testArrayLiteral6. self assert: result isLiteral. self assert: result value = #(1.2 )! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral7 super testArrayLiteral7. self assert: result isLiteral. self assert: result value = #(#size #at: #at:put: #'==' ). result value do: [ :each | self assert: each isSymbol ]! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral8 super testArrayLiteral8. self assert: result isLiteral. self assert: result value = #('baz' ). self assert: result value first isString. self assert: result value first isSymbol not! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testArrayLiteral9 super testArrayLiteral9. self assert: result isLiteral. self assert: result value = #(#(1 ) 2 )! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment1 super testAssignment1. self assert: result isLiteral. self assert: result value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment2 super testAssignment2. self assert: result isAssignment. self assert: result variable isVariable. self assert: result variable name = 'a'. self assert: result value isLiteral. self assert: result value value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment3 super testAssignment3. self assert: result isAssignment. self assert: result variable isVariable. self assert: result variable name = 'a'. self assert: result value isAssignment. self assert: result value variable isVariable. self assert: result value variable name = 'b'. self assert: result value value isLiteral. self assert: result value value value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment4 super testAssignment4. self assert: result isAssignment. self assert: result variable isVariable. self assert: result variable name = 'a'. self assert: result value isLiteral. self assert: result value value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testAssignment5 super testAssignment5. self assert: result isAssignment. self assert: result variable isVariable. self assert: result variable name = 'a'. self assert: result value isAssignment. self assert: result value variable isVariable. self assert: result value variable name = 'b'. self assert: result value value isLiteral. self assert: result value value value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryExpression1 super testBinaryExpression1. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result receiver value = 1. self assert: result arguments size = 1. self assert: result arguments first isLiteral. self assert: result arguments first value = 2! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryExpression2 super testBinaryExpression2. self assert: result isMessage. self assert: result receiver isMessage. self assert: result receiver receiver isLiteral. self assert: result receiver receiver value = 1. self assert: result receiver arguments size = 1. self assert: result receiver arguments first isLiteral. self assert: result receiver arguments first value = 2. self assert: result arguments size = 1. self assert: result arguments first isLiteral. self assert: result arguments first value = 3! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod1 super testBinaryMethod1. self assert: result isMethod. self assert: result selector = #+. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod2 super testBinaryMethod2. self assert: result isMethod. self assert: result selector = #+. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod3 super testBinaryMethod3. self assert: result isMethod. self assert: result selector = #+. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries isEmpty. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testBinaryMethod4 super testBinaryMethod4. self assert: result isMethod. self assert: result selector = #+. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral1 super testByteLiteral1. self assert: result isLiteral. self assert: (result value isKindOf: ByteArray). self assert: result value isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral2 super testByteLiteral2. self assert: result isLiteral. self assert: (result value isKindOf: ByteArray). self assert: result value size = 1. self assert: result value first = 0! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral3 super testByteLiteral3. self assert: result isLiteral. self assert: (result value isKindOf: ByteArray). self assert: result value size = 1. self assert: result value first = 255! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral4 super testByteLiteral4. self assert: result isLiteral. self assert: (result value isKindOf: ByteArray). self assert: result value size = 2. self assert: result value first = 1. self assert: result value last = 2! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testByteLiteral5 super testByteLiteral5. self assert: result isLiteral. self assert: (result value isKindOf: ByteArray). self assert: result value size = 3. self assert: result value first = 10. self assert: result value second = 63. self assert: result value last = 255! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression1 super testCascadeExpression1. self assert: result isCascade. self assert: result receiver isLiteral. self assert: result messages size = 2. self assert: result messages first receiver = result receiver. self assert: result messages first selector = #abs. self assert: result messages second receiver = result receiver. self assert: result messages second selector = #negated! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression2 super testCascadeExpression2. self assert: result isCascade. self assert: result receiver isMessage. self assert: result receiver receiver isLiteral. self assert: result receiver receiver value = 1. self assert: result receiver selector = #abs. self assert: result messages size = 3. self assert: result messages first receiver = result receiver. self assert: result messages first selector = #negated. self assert: result messages second receiver = result receiver. self assert: result messages second selector = #raisedTo:. self assert: result messages third receiver = result receiver. self assert: result messages third selector = #negated! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testCascadeExpression3 super testCascadeExpression3. self assert: result isCascade. self assert: result receiver isLiteral. self assert: result receiver value = 1. self assert: result messages size = 2. self assert: result messages first receiver = result receiver. self assert: result messages first selector = #+. self assert: result messages first arguments size = 1. self assert: result messages second receiver = result receiver. self assert: result messages second selector = #-. self assert: result messages second arguments size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral1 super testCharLiteral1. self assert: result isLiteral. self assert: result value = $a! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral2 super testCharLiteral2. self assert: result isLiteral. self assert: result value = Character space! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testCharLiteral3 super testCharLiteral3. self assert: result isLiteral. self assert: result value = $$! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 3/1/2010 10:20'! testComment1 super testComment1. self assert: result isMessage. self assert: result receiver isValue. self assert: result selector = #+. self assert: result arguments first isValue! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment2 super testComment2. self assert: result isMessage. self assert: result receiver isValue. self assert: result selector = #+. self assert: result arguments first isValue! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment3 super testComment3. self assert: result isMessage. self assert: result receiver isValue. self assert: result selector = #+. self assert: result arguments first isValue! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment4 super testComment4. self assert: result isMessage. self assert: result receiver isValue. self assert: result selector = #+. self assert: result arguments first isValue! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testComment5 super testComment5. self assert: result isMessage. self assert: result receiver isValue. self assert: result selector = #+. self assert: result arguments first isValue! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testComplexBlock1 super testComplexBlock1. self assert: result isBlock. self assert: result arguments size = 1. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testComplexBlock2 super testComplexBlock2. self assert: result isBlock. self assert: result arguments size = 1. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression1 super testKeywordExpression1. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result receiver value = 1. self assert: result selector = #to:. self assert: result arguments size = 1. self assert: result arguments first isLiteral. self assert: result arguments first value = 2! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression2 super testKeywordExpression2. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result selector = #to:by:. self assert: result arguments size = 2. self assert: result arguments first isLiteral. self assert: result arguments first value = 2. self assert: result arguments second isLiteral. self assert: result arguments second value = 3! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordExpression3 super testKeywordExpression3. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result selector = #to:by:do:. self assert: result arguments size = 3. self assert: result arguments first isLiteral. self assert: result arguments first value = 2. self assert: result arguments second isLiteral. self assert: result arguments second value = 3. self assert: result arguments third isLiteral. self assert: result arguments third value = 4! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod1 super testKeywordMethod1. self assert: result isMethod. self assert: result selector = #to:. self assert: result arguments size = 1. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod2 super testKeywordMethod2. self assert: result isMethod. self assert: result selector = #to:do:. self assert: result arguments size = 2. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result arguments second isVariable. self assert: result arguments second name = 'b'. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod3 super testKeywordMethod3. self assert: result isMethod. self assert: result selector = #to:do:by:. self assert: result arguments size = 3. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result arguments second isVariable. self assert: result arguments second name = 'b'. self assert: result arguments third isVariable. self assert: result arguments third name = 'c'. self assert: result body temporaries isEmpty. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testKeywordMethod4 super testKeywordMethod4. self assert: result isMethod. self assert: result selector = #to:do:by:. self assert: result arguments size = 3. self assert: result arguments first isVariable. self assert: result arguments first name = 'a'. self assert: result arguments second isVariable. self assert: result arguments second name = 'b'. self assert: result arguments third isVariable. self assert: result arguments third name = 'c'. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod1 super testMethod1. self assert: result isMethod. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1. self assert: result body statements first isReturn. self assert: result body statements first value isMessage. self assert: result body statements first value receiver isLiteral. self assert: result body statements first value selector = #-. self assert: result body statements first value arguments size = 1. self assert: result body statements first value arguments first isVariable! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod2 super testMethod2. self assert: result isMethod. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1. self assert: result body statements first isReturn. self assert: result body statements first value isMessage. self assert: result body statements first value receiver isLiteral. self assert: result body statements first value selector = #-. self assert: result body statements first value arguments size = 1. self assert: result body statements first value arguments first isVariable! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testMethod3 super testMethod3. self assert: result isMethod. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1. self assert: result body statements first isReturn. self assert: result body statements first value isMessage. self assert: result body statements first value receiver isLiteral. self assert: result body statements first value selector = #-. self assert: result body statements first value arguments size = 1. self assert: result body statements first value arguments first isVariable! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral1 super testNumberLiteral1. self assert: result isLiteral. self assert: result value = 0! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral10 super testNumberLiteral10. self assert: result isLiteral. self assert: result value = 10! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral11 super testNumberLiteral11. self assert: result isLiteral. self assert: result value = 511! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral12 super testNumberLiteral12. self assert: result isLiteral. self assert: result value = 175! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral13 super testNumberLiteral13. self assert: result isLiteral. self assert: result value = 202.9921875! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral14 super testNumberLiteral14. self assert: result isLiteral. self assert: result value floor = -9! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral2 super testNumberLiteral2. self assert: result isLiteral. self assert: result value = 0.1! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral3 super testNumberLiteral3. self assert: result isLiteral. self assert: result value = 123! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral4 super testNumberLiteral4. self assert: result isLiteral. self assert: result value = 123.456! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral5 super testNumberLiteral5. self assert: result isLiteral. self assert: result value = 0! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral6 super testNumberLiteral6. self assert: result isLiteral. self assert: result value = -0.1! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral7 super testNumberLiteral7. self assert: result isLiteral. self assert: result value = -123! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral8 super testNumberLiteral8. self assert: result isLiteral. self assert: result value = -123! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testNumberLiteral9 super testNumberLiteral9. self assert: result isLiteral. self assert: result value = -123.456! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma1 super testPragma1. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma10 super testPragma10. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma11 super testPragma11. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma12 super testPragma12. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma13 super testPragma13. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma14 super testPragma14. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma15 super testPragma15. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma2 super testPragma2. self assert: result pragmas format: #('' '' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma3 super testPragma3. self assert: result pragmas format: #('' ). self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma4 super testPragma4. self assert: result pragmas format: #('' ). self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma5 super testPragma5. self assert: result pragmas format: #('' '' ). self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma6 super testPragma6. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma7 super testPragma7. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma8 super testPragma8. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-pragmas' stamp: 'lr 9/27/2009 12:42'! testPragma9 super testPragma9. self assert: result pragmas format: #('' ). self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testSequence1 super testSequence1. self assert: result isSequence. self assert: result temporaries size = 1. self assert: result temporaries first isVariable. self assert: result temporaries first name = 'a'. self assert: result statements size = 2. self assert: result statements first isLiteral. self assert: result statements first value = 1. self assert: result statements second isLiteral. self assert: result statements second value = 2! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock1 super testSimpleBlock1. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock2 super testSimpleBlock2. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testSimpleBlock3 super testSimpleBlock3. self assert: result isBlock. self assert: result arguments size = 1. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral1 super testSpecialLiteral1. self assert: result isLiteral. self assert: result value = true! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral2 super testSpecialLiteral2. self assert: result isLiteral. self assert: result value = false! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSpecialLiteral3 super testSpecialLiteral3. self assert: result isLiteral. self assert: result value = nil! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock1 super testStatementBlock1. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock2 super testStatementBlock2. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-blocks' stamp: 'lr 9/27/2009 12:42'! testStatementBlock3 super testStatementBlock3. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries size = 2. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements1 super testStatements1. self assert: result isSequence. self assert: result temporaries isEmpty. self assert: result statements size = 1. self assert: result statements first isLiteral. self assert: result statements first value = 1! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements2 super testStatements2. self assert: result isSequence. self assert: result temporaries isEmpty. self assert: result statements size = 2. self assert: result statements first isLiteral. self assert: result statements first value = 1. self assert: result statements second isLiteral. self assert: result statements second value = 2! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements3 super testStatements3. self assert: result isSequence. self assert: result temporaries isEmpty. self assert: result statements size = 3. self assert: result statements first isLiteral. self assert: result statements first value = 1. self assert: result statements second isLiteral. self assert: result statements second value = 2. self assert: result statements third isLiteral. self assert: result statements third value = 3! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements4 super testStatements4. self assert: result isSequence. self assert: result temporaries isEmpty. self assert: result statements size = 3. self assert: result statements first isLiteral. self assert: result statements first value = 1. self assert: result statements second isLiteral. self assert: result statements second value = 2. self assert: result statements third isLiteral. self assert: result statements third value = 3! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testStatements5 super testStatements5. self assert: result isSequence. self assert: result temporaries isEmpty. self assert: result statements size = 2. self assert: result statements first isLiteral. self assert: result statements first value = 1. self assert: result statements second isLiteral. self assert: result statements second value = 2! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral1 super testStringLiteral1. self assert: result isLiteral. self assert: result value = ''! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral2 super testStringLiteral2. self assert: result isLiteral. self assert: result value = 'ab'! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testStringLiteral3 super testStringLiteral3. self assert: result isLiteral. self assert: result value = 'ab''cd'! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral1 super testSymbolLiteral1. self assert: result isLiteral. self assert: result value = #foo! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral2 super testSymbolLiteral2. self assert: result isLiteral. self assert: result value = #+! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral3 super testSymbolLiteral3. self assert: result isLiteral. self assert: result value = #key:! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral4 super testSymbolLiteral4. self assert: result isLiteral. self assert: result value = #key:value:! ! !PPSmalltalkParserTests methodsFor: 'testing-literals' stamp: 'lr 9/27/2009 12:42'! testSymbolLiteral5 super testSymbolLiteral5. self assert: result isLiteral. self assert: result value = #'testing-result'! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries1 super testTemporaries1. self assert: result isSequence. self assert: result temporaries size = 1. self assert: result temporaries first isVariable. self assert: result temporaries first name = 'a'. self assert: result statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries2 super testTemporaries2. self assert: result isSequence. self assert: result temporaries size = 2. self assert: result temporaries first isVariable. self assert: result temporaries first name = 'a'. self assert: result temporaries second isVariable. self assert: result temporaries second name = 'b'. self assert: result statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testTemporaries3 super testTemporaries3. self assert: result isSequence. self assert: result temporaries size = 3. self assert: result temporaries first isVariable. self assert: result temporaries first name = 'a'. self assert: result temporaries second isVariable. self assert: result temporaries second name = 'b'. self assert: result temporaries third isVariable. self assert: result temporaries third name = 'c'. self assert: result statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryExpression1 super testUnaryExpression1. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result selector = #abs. self assert: result arguments isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryExpression2 super testUnaryExpression2. self assert: result isMessage. self assert: result receiver isMessage. self assert: result receiver receiver isLiteral. self assert: result receiver receiver value = 1. self assert: result receiver selector = #abs. self assert: result receiver arguments isEmpty. self assert: result selector = #negated. self assert: result arguments isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod1 super testUnaryMethod1. self assert: result isMethod. self assert: result selector = #abs. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod2 super testUnaryMethod2. self assert: result isMethod. self assert: result selector = #abs. self assert: result arguments isEmpty. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod3 super testUnaryMethod3. self assert: result isMethod. self assert: result selector = #abs. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod4 super testUnaryMethod4. self assert: result isMethod. self assert: result selector = #abs. self assert: result arguments isEmpty. self assert: result body temporaries size = 1. self assert: result body statements size = 1! ! !PPSmalltalkParserTests methodsFor: 'testing-messages' stamp: 'lr 9/27/2009 12:42'! testUnaryMethod5 super testUnaryMethod5. self assert: result isMethod. self assert: result selector = #abs. self assert: result arguments isEmpty. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable1 super testVariable1. self assert: result isVariable. self assert: result name = 'trueBinding'! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable2 super testVariable2. self assert: result isVariable. self assert: result name = 'falseBinding'! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable3 super testVariable3. self assert: result isVariable. self assert: result name = 'nilly'! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable4 super testVariable4. self assert: result isVariable. self assert: result name = 'selfish'! ! !PPSmalltalkParserTests methodsFor: 'testing' stamp: 'lr 9/27/2009 12:42'! testVariable5 super testVariable5. self assert: result isVariable. self assert: result name = 'supernanny'! ! !PPSmalltalkTest class methodsFor: 'testing' stamp: 'lr 1/7/2010 13:34'! isAbstract ^ self name = #PPSmalltalkTest! ! !PPSmalltalkTest class methodsFor: 'accessing' stamp: 'lr 10/23/2009 16:22'! packageNamesUnderTest ^ #('PetitSmalltalk')! ! !PPSmalltalkTest class methodsFor: 'accessing' stamp: 'lr 3/29/2010 15:26'! resources ^ Array with: PPParserResource! ! !PPSmalltalkTest methodsFor: 'parsing' stamp: 'lr 3/29/2010 15:29'! parse: aString rule: aSymbol | production | production := self parserInstance productionAt: aSymbol. result := production end parse: aString. self deny: result isPetitFailure description: 'Unable to parse ' , aString printString! ! !PPSmalltalkTest methodsFor: 'accessing' stamp: 'lr 9/27/2009 12:42'! parserClass self subclassResponsibility! ! !PPSmalltalkTest methodsFor: 'accessing' stamp: 'lr 3/29/2010 15:27'! parserInstance ^ PPParserResource current parserAt: self parserClass! !