SystemOrganization addCategory: #'LanguageAspects-Core'! SystemOrganization addCategory: #'LanguageAspects-Tests'! SystemOrganization addCategory: #'LanguageAspects-Examples'! SystemOrganization addCategory: #'LanguageAspects-Integration'! !RBAssignmentNode methodsFor: '*languageaspects-override' stamp: 'lr 10/17/2008 15:10'! assignmentOperator ^ self defaultAssignmentOperator! ! CUCompositeParser subclass: #LASmalltalkParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! LASmalltalkParser subclass: #LASmalltalkCompiler instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 10/17/2008 15:47'! array super array ==> [ :nodes | RBArrayNode leftBrace: nodes first rightBrace: nodes last statements: nodes second ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:06'! arrayLiteral super arrayLiteral ==> [ :nodes | RBLiteralNode value: nodes second asArray ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 14:21'! arrayLiteralArray super arrayLiteralArray ==> [ :nodes | nodes second asArray ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:19'! arrayLiteralChar super arrayLiteralChar ==> [ :token | token value second ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:15'! arrayLiteralFalse super arrayLiteralFalse ==> [ :token | false ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:14'! arrayLiteralNil super arrayLiteralNil ==> [ :token | nil ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:14'! arrayLiteralNumber super arrayLiteralNumber ==> [ :token | Number readFrom: token value ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:21'! arrayLiteralString super arrayLiteralString ==> [ :token | self cleanupString: token value ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 13:46'! arrayLiteralSymbol super arrayLiteralSymbol ==> [ :token | self cleanupString: token value ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:15'! arrayLiteralTrue super arrayLiteralTrue ==> [ :token | true ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 9/26/2008 11:33'! assignment super assignment ==> #first! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:16'! binaryExpression super binaryExpression map: [ :receiver :message | self build: receiver message: message ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:26'! binaryMessage super binaryMessage ==> [ :nodes | Array with: nodes first value with: (Array with: nodes second) ]! ! !LASmalltalkCompiler methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 11:59'! block super block ==> [ :nodes | RBBlockNode arguments: nodes second body: nodes third ]! ! !LASmalltalkCompiler methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 12:00'! blockArgument super blockArgument ==> #second! ! !LASmalltalkCompiler methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 12:07'! blockArgumentsMany super blockArgumentsMany ==> #first! ! !LASmalltalkCompiler methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 12:05'! blockArgumentsNone super blockArgumentsNone ==> [ :token | Array new ]! ! !LASmalltalkCompiler methodsFor: 'private' stamp: 'lr 9/23/2008 20:53'! build: aNode message: anArray ^ anArray isEmptyOrNil ifTrue: [ aNode ] ifFalse: [ anArray inject: aNode into: [ :receiver :pair | pair isEmptyOrNil ifTrue: [ receiver ] ifFalse: [ RBMessageNode receiver: receiver selector: pair first asSymbol arguments: pair last ] ] ]! ! !LASmalltalkCompiler methodsFor: 'private' stamp: 'lr 10/23/2008 14:01'! buildSequence: aStatementCollection temps: aTempCollection ^ (aTempCollection isEmpty ifTrue: [ RBSequenceNode new ] ifFalse: [ RBSequenceNode leftBar: aTempCollection first temporaries: aTempCollection second rightBar: aTempCollection last ]) statements: aStatementCollection; yourself ! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:49'! cascadeExpression ^ super cascadeExpression map: [ :receiver :messages | messages isEmpty ifTrue: [ receiver ] ifFalse: [ | sends | sends := OrderedCollection new: messages size + 1. sends addLast: receiver. messages do: [ :each | sends addLast: (RBMessageNode receiver: receiver receiver selector: each first asSymbol arguments: each last) ]. RBCascadeNode messages: sends ] ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:39'! cascadeMessage super cascadeMessage ==> [ :nodes | nodes second ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:16'! charLiteral super charLiteral ==> [ :token | RBLiteralNode literalToken: token value: token value second ]! ! !LASmalltalkCompiler methodsFor: 'private' stamp: 'lr 10/23/2008 13:45'! cleanupString: aString (aString notEmpty and: [ aString first = $# ]) ifTrue: [ ^ (self cleanupString: aString allButFirst) asSymbol ]. (aString isEmpty or: [ aString first ~= $' or: [ aString last ~= $' ] ]) ifTrue: [ ^ aString ]. ^ (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '''''' with: ''''! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:34'! expression super expression map: [ :variables :message | variables isEmpty ifTrue: [ message ] ifFalse: [ variables reverse inject: message into: [ :result :each | RBAssignmentNode variable: each value: result ] ] ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:16'! falseLiteral super falseLiteral ==> [ :token | RBLiteralNode literalToken: token value: false ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 20:43'! keywordExpression super keywordExpression map: [ :receiver :message | self build: receiver message: (Array with: message) ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 20:41'! keywordMessage super keywordMessage ==> [ :nodes | Array with: (nodes inject: String new into: [ :result :each | result , each first value ]) with: (nodes collect: [ :each | each second ]) ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 10/23/2008 14:01'! method super method map: [ :declaration :body | (RBMethodNode selector: declaration first asSymbol arguments: declaration second body: (self buildSequence: body third temps: body second)) pragmas: body first; yourself ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:16'! nilLiteral super nilLiteral ==> [ :token | RBLiteralNode literalToken: token value: nil ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:17'! numberLiteral super numberLiteral ==> [ :token | RBLiteralNode literalToken: token value: (Number readFrom: token value) ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 10/17/2008 15:40'! parens super parens ==> #second! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 10/20/2008 16:26'! pragma super pragma ==> [ :nodes | RBPragmaNode pragma: (Pragma keyword: nodes second first asSymbol arguments: nodes second second) spec: nodes second first asSymbol start: nodes first start stop: nodes last stop firstToken: nodes first lastToken: nodes last ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:00'! return super return map: [ :token :expression | RBReturnNode value: expression ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 10/23/2008 14:00'! sequence super sequence map: [ :temporaries :statements | self buildSequence: statements temps: temporaries ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:27'! stringLiteral super stringLiteral ==> [ :token | RBLiteralNode literalToken: token value: (self cleanupString: token value) ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 13:46'! symbolLiteral super symbolLiteral ==> [ :node | RBLiteralNode literalToken: node value: (self cleanupString: node value) ]! ! !LASmalltalkCompiler methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:28'! trueLiteral super trueLiteral ==> [ :token | RBLiteralNode literalToken: token value: true ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:15'! unaryExpression super unaryExpression map: [ :receiver :message | self build: receiver message: message ]! ! !LASmalltalkCompiler methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:25'! unaryMessage super unaryMessage ==> [ :node | Array with: node value with: Array new ]! ! !LASmalltalkCompiler methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:02'! variable super variable ==> [ :token | RBVariableNode identifierToken: token ]! ! LASmalltalkParser subclass: #LASmalltalkHighlighter instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:27'! charLiteral super charLiteral ==> [ :token | token -> Color magenta ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:28'! falseLiteral super falseLiteral ==> [ :token | token -> Color cyan ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:28'! nilLiteral super nilLiteral ==> [ :token | token -> Color cyan ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:28'! numberLiteral super numberLiteral ==> [ :token | token -> Color magenta ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:28'! stringLiteral super stringLiteral ==> [ :token | token -> Color magenta ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 15:38'! symbolLiteral super symbolLiteral ==> [ :token | token -> Color magenta ]! ! !LASmalltalkHighlighter methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 11:28'! trueLiteral super trueLiteral ==> [ :token | token -> Color cyan ]! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/20/2008 10:24'! array ${ small , statements , $} small! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 14:43'! arrayLiteral '#(' small , arrayLiteralElement star , $) small! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 14:43'! arrayLiteralArray ($# optional , $() small , arrayLiteralElement star , $) small! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:11'! arrayLiteralChar charToken! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:10'! arrayLiteralElement arrayLiteralTrue / arrayLiteralFalse / arrayLiteralNil / arrayLiteralNumber / arrayLiteralChar / arrayLiteralString / arrayLiteralSymbol / arrayLiteralArray! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:12'! arrayLiteralFalse falseToken! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:12'! arrayLiteralNil nilToken! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:12'! arrayLiteralNumber numberToken! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:12'! arrayLiteralString stringToken! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 13:50'! arrayLiteralSymbol ($# optional , symbol) small! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/17/2008 11:11'! arrayLiteralTrue trueToken! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:27'! assignment variable , assignmentToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! assignmentToken (':=' / '_') small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 15:07'! binary ($~ / $- / $!! / $@ / $% / $& / $* / $+ / $= / $\ / $| / $? / $/ / $> / $< / $,) , ($~ / $!! / $@ / $% / $& / $* / $+ / $= / $\ / $| / $? / $/ / $> / $< / $,) star! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 18:43'! binaryExpression unaryExpression , binaryMessage star! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 18:42'! binaryMessage binaryToken , unaryExpression! ! !LASmalltalkParser methodsFor: 'grammar-methods' stamp: 'lr 9/23/2008 19:55'! binaryMethod binaryToken , variable ==> [ :nodes | Array with: nodes first value with: (Array with: nodes second) ]! ! !LASmalltalkParser methodsFor: 'grammar-pragmas' stamp: 'lr 10/20/2008 16:27'! binaryPragma binaryToken , arrayLiteralElement ==> [ :nodes | Array with: nodes first value with: (Array with: nodes second) ]! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! binaryToken binary small! ! !LASmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 14:43'! block $[ small , blockArguments , sequence , $] small! ! !LASmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 10/20/2008 17:15'! blockArgument $: small , variable! ! !LASmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 12:54'! blockArguments blockArgumentsMany / blockArgumentsNone! ! !LASmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 14:43'! blockArgumentsMany blockArgument plus , $| small! ! !LASmalltalkParser methodsFor: 'grammar-blocks' stamp: 'lr 10/17/2008 12:55'! blockArgumentsNone PPEpsilonParser new! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:29'! cascadeExpression keywordExpression , cascadeMessage star! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 10/23/2008 13:46'! cascadeMessage $; token , (keywordMessage / binaryMessage / unaryMessage)! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 14:22'! char $$ , #any! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:15'! charLiteral charToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! charToken char small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:27'! expression assignment star , cascadeExpression! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:23'! falseLiteral falseToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! falseToken 'false' small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 14:22'! identifier #letter , #word star! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! identifierToken identifier small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 14:23'! keyword identifier , $:! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 18:44'! keywordExpression binaryExpression , keywordMessage optional! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 18:44'! keywordMessage (keywordToken , binaryExpression) plus! ! !LASmalltalkParser methodsFor: 'grammar-methods' stamp: 'lr 9/23/2008 19:55'! keywordMethod (keywordToken , variable) plus ==> [ :nodes | Array with: (nodes inject: String new into: [ :result :each | result , each first value ]) with: (nodes collect: [ :each | each second ]) ]! ! !LASmalltalkParser methodsFor: 'grammar-pragmas' stamp: 'lr 10/20/2008 16:27'! keywordPragma (keywordToken , arrayLiteralElement) plus ==> [ :nodes | Array with: (nodes inject: String new into: [ :result :each | result , each first value ]) with: (nodes collect: [ :each | each second ]) ]! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! keywordToken keyword small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/17/2008 11:11'! literal trueLiteral / falseLiteral / nilLiteral / charLiteral / numberLiteral / stringLiteral / symbolLiteral / arrayLiteral! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/20/2008 10:26'! method (keywordMethod / unaryMethod / binaryMethod) , methodSequence! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/20/2008 13:44'! methodSequence pragmas , temporaries , pragmas , statements ==> [ :nodes | Array with: nodes first , nodes third with: nodes second with: nodes fourth ]! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 9/23/2008 21:06'! multiword keyword plus! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! multiwordToken multiword small! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:16'! nilLiteral nilToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! nilToken 'nil' small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/20/2008 16:48'! number ($- optional , #digit) and , [ :stream | [ Number readFrom: stream ] on: Error do: [ :err | PPFailure reason: err messageText at: stream position ] ] asParser! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:17'! numberLiteral numberToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! numberToken number small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/17/2008 15:39'! parens $( small , expression , $) small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/20/2008 17:13'! pragma $< small , (keywordPragma / unaryPragma / binaryPragma) , $> small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/20/2008 10:31'! pragmas pragma star! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/17/2008 15:41'! primary variable / literal / block / parens / array! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/17/2008 14:43'! return $^ small , expression! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:00'! sequence temporaries , statements! ! !LASmalltalkParser methodsFor: 'accessing' stamp: 'lr 10/17/2008 14:20'! start method end! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/23/2008 14:05'! statements (return , $. small optional ==> [ :nodes | Array with: nodes first ]) / (expression wrapped , $. small , statements ==> [ :nodes | nodes third copyWithFirst: nodes first ]) / (expression wrapped , $. small optional ==> [ :nodes | Array with: nodes first ]) / ($. small optional ==> [ :node | Array new ])! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 14:23'! string $' , (($' , $') / $' negate) star , $'! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:17'! stringLiteral stringToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! stringToken string small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/23/2008 13:50'! symbol unary / binary / multiword / string! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/23/2008 13:50'! symbolLiteral ($# , symbol) small! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/23/2008 13:49'! symbolToken symbol small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 10/23/2008 13:52'! temporaries ($| small , variable star , $| small) optional ==> [ :nodes | nodes isNil ifTrue: [ Array new ] ifFalse: [ nodes ] ]! ! !LASmalltalkParser methodsFor: 'grammar-literals' stamp: 'lr 10/13/2008 17:18'! trueLiteral trueToken! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! trueToken 'true' small! ! !LASmalltalkParser methodsFor: 'primitives' stamp: 'lr 10/17/2008 14:23'! unary identifier , $: not! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 19:07'! unaryExpression primary , unaryMessage star! ! !LASmalltalkParser methodsFor: 'grammar-messages' stamp: 'lr 9/23/2008 18:47'! unaryMessage unaryToken! ! !LASmalltalkParser methodsFor: 'grammar-methods' stamp: 'lr 9/23/2008 19:55'! unaryMethod identifierToken ==> [ :node | Array with: node value with: #() ]! ! !LASmalltalkParser methodsFor: 'grammar-pragmas' stamp: 'lr 10/20/2008 16:16'! unaryPragma identifierToken ==> [ :node | Array with: node value with: #() ]! ! !LASmalltalkParser methodsFor: 'token' stamp: 'lr 10/17/2008 14:43'! unaryToken unary small! ! !LASmalltalkParser methodsFor: 'grammar' stamp: 'lr 9/23/2008 20:02'! variable identifierToken! ! Object subclass: #LAAspect instanceVariableNames: 'active environments concerns pointcut' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! LAAspect class instanceVariableNames: 'Default'! LAAspect class instanceVariableNames: 'Default'! !LAAspect class methodsFor: 'querying' stamp: 'lr 10/23/2008 11:00'! all ^ self allSubclasses collect: [ :each | each default ]! ! !LAAspect class methodsFor: 'querying' stamp: 'lr 10/23/2008 11:03'! allActiveForSelector: aSymbol in: aClass ^ self all select: [ :each | each isActive and: [ each includesSelector: aSymbol in: aClass ] ]! ! !LAAspect class methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:03'! default ^ Default ifNil: [ Default := self new ]! ! !LAAspect class methodsFor: 'initialization' stamp: 'lr 10/10/2008 15:08'! reset Default := nil. self subclasses do: [ :each | each reset ]! ! !LAAspect class methodsFor: 'initialization' stamp: 'lr 10/10/2008 15:03'! unload self default active: false! ! !LAAspect methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:09'! active: aBoolean "Enable or disable the receiving language aspect." active = aBoolean ifTrue: [ ^ self ]. active := aBoolean. self recompile! ! !LAAspect methodsFor: 'scoping' stamp: 'lr 10/23/2008 09:59'! addClassScope: aClass ^ self addScope: (BrowserEnvironment new forClasses: (Array with: aClass))! ! !LAAspect methodsFor: 'concerns' stamp: 'lr 10/23/2008 11:09'! addConcern: aConcern concerns := concerns copyWith: aConcern. ^ aConcern! ! !LAAspect methodsFor: 'scoping' stamp: 'lr 10/23/2008 09:59'! addPackageScope: aString ^ self addScope: (BrowserEnvironment new forPackageNamed: aString)! ! !LAAspect methodsFor: 'scoping' stamp: 'lr 10/23/2008 09:59'! addPragmaScope: aKeyword ^ self addScope: (BrowserEnvironment new forPragmas: (Array with: aKeyword))! ! !LAAspect methodsFor: 'scoping' stamp: 'lr 10/23/2008 09:59'! addScope: anEnvironment "Add a new scope to the receiving aspect and incrementally update all code." environments := environments copyWith: anEnvironment. self isActive ifTrue: [ self recompile: anEnvironment ]. ^ anEnvironment! ! !LAAspect methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:21'! concerns "Answer a collection of concerns." ^ concerns! ! !LAAspect methodsFor: 'accessing' stamp: 'lr 10/23/2008 09:44'! environment "Answer a a composed environment." ^ environments isEmpty ifTrue: [ BrowserEnvironment new not ] ifFalse: [ environments fold: [ :first :second | first | second ] ]! ! !LAAspect methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:05'! environments "Answer a collection of environments." ^ environments! ! !LAAspect methodsFor: 'testing' stamp: 'lr 10/23/2008 11:12'! includesSelector: aSelector in: aClass "Answer wether the receiving aspect is active in the given context or not." ^ self environment includesSelector: aSelector in: aClass! ! !LAAspect methodsFor: 'initialization' stamp: 'lr 10/10/2008 15:21'! initialize active := true. pointcut := LAPointcut new. concerns := environments := #()! ! !LAAspect methodsFor: 'testing' stamp: 'lr 10/10/2008 15:01'! isActive "Answer wether the receiving aspect is active or not." ^ active! ! !LAAspect methodsFor: 'accessing' stamp: 'lr 10/13/2008 13:41'! pointcut "Answer the pointcut of the reciever." ^ pointcut! ! !LAAspect methodsFor: 'actions' stamp: 'lr 10/20/2008 15:53'! recompile "Recompile all the affected methods in the selected enviornments." self recompile: self environment! ! !LAAspect methodsFor: 'actions' stamp: 'lr 10/10/2008 14:43'! recompile: anEnvironment "Recompile all the affected methods in anEnvironment." anEnvironment classesAndSelectorsDo: [ :class :selector | class recompile: selector ]! ! !LAAspect methodsFor: 'actions' stamp: 'lr 10/23/2008 09:56'! refresh self isActive ifTrue: [ self recompile ]! ! !LAAspect methodsFor: 'actions' stamp: 'lr 10/23/2008 10:01'! reset self initialize. self refresh! ! LAAspect subclass: #LAPathAspect instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Examples'! LAAspect subclass: #LARegexpAspect instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Examples'! !LARegexpAspect class methodsFor: 'initialization' stamp: 'lr 10/23/2008 10:01'! initialize self default reset! ! !LARegexpAspect methodsFor: 'initialization' stamp: 'lr 10/23/2008 11:16'! initialize super initialize. self pointcut after; choice; name: 'literal'; parser: $/ asParser , $/ asParser negate , $/ asParser. self addConcern: (LAHighlighter attribute: TextColor red). self addClassScope: LARegexpAspectTest! ! Object subclass: #LAConcern instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LAConcern methodsFor: 'public' stamp: 'lr 10/10/2008 15:30'! apply: aNode self subclassResponsibility! ! !LAConcern methodsFor: 'weaving' stamp: 'lr 10/10/2008 15:30'! weave: aParser ^ aParser => [ :node | self apply: node ]! ! LAConcern subclass: #LAHighlighter instanceVariableNames: 'attribute' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LAHighlighter class methodsFor: 'as yet unclassified' stamp: 'lr 10/23/2008 10:04'! attribute: aTextAttribute ^ self new setAttribute: aTextAttribute! ! !LAHighlighter methodsFor: 'public' stamp: 'lr 10/10/2008 15:31'! apply: aNode ^ self color! ! !LAHighlighter methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:31'! color ^ color! ! !LAHighlighter methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:31'! color: aColor color := aColor! ! !LAHighlighter methodsFor: 'initialization' stamp: 'lr 10/23/2008 10:04'! setAttribute: aTextAttribute attribute := aTextAttribute! ! LAConcern subclass: #LATransformer instanceVariableNames: 'block' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! Object subclass: #LAPointcut instanceVariableNames: 'name parser action class' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LAPointcut methodsFor: 'accessing-place' stamp: 'lr 10/10/2008 15:36'! after "Insert the new parser and concern after the name rule." action := #after! ! !LAPointcut methodsFor: 'accessing-place' stamp: 'lr 10/10/2008 15:35'! around "Insert the concern around the named rule." action := #around! ! !LAPointcut methodsFor: 'accessing-place' stamp: 'lr 10/10/2008 15:36'! before "Insert the new parser and concern before the name rule." action := #before! ! !LAPointcut methodsFor: 'accessing-list' stamp: 'lr 10/10/2008 15:39'! choice "Use a choice to combine the two grammars." class := PPChoiceParser! ! !LAPointcut methodsFor: 'initialization' stamp: 'lr 10/13/2008 13:47'! initialize self after. self choice. self name: #start. self parser: PPEpsilonParser new! ! !LAPointcut methodsFor: 'accessing' stamp: 'lr 10/13/2008 13:46'! name: aSymbol "The name of the rule to identify." name := aSymbol asSymbol! ! !LAPointcut methodsFor: 'accessing' stamp: 'lr 10/10/2008 15:40'! parser: aParser "The new/replacement parser to be used." parser := aParser asParser! ! !LAPointcut methodsFor: 'accessing-place' stamp: 'lr 10/10/2008 15:36'! replace "Replace the named rule with the given parser and concern." action := #replace! ! !LAPointcut methodsFor: 'accessing-list' stamp: 'lr 10/10/2008 15:39'! sequence "Use a sequence to combine the two grammars." class := PPSequenceParser! ! !LAPointcut methodsFor: 'actions' stamp: 'lr 10/13/2008 13:46'! weave: aParser concern: aConcern | original copied | original := aParser perform: name. copied := original copy. original becomeForward: (action = #replace ifTrue: [ aConcern weave: parser ] ifFalse: [ action = #around ifTrue: [ aConcern weave: copied ] ifFalse: [ action = #before ifTrue: [ class with: (aConcern weave: parser) with: copied ] ifFalse: [ action = #after ifTrue: [ class with: copied with: (aConcern weave: parser) ] ifFalse: [ self error: 'Invalid pointcut action.' ] ] ] ])! ! !PPParser methodsFor: '*languageaspects' stamp: 'lr 10/20/2008 13:38'! small ^ LATokenParser on: self! ! !ProtoObject methodsFor: '*languageaspects' stamp: 'lr 10/23/2008 10:39'! languageAspectsHighlighter ^ LAHighlightingAction new! ! PPTokenParser subclass: #LATokenParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Core'! !LATokenParser methodsFor: 'hooks' stamp: 'lr 10/20/2008 10:17'! consumeSpaces: aStream [ super consumeSpaces: aStream. aStream peek == $" ] whileTrue: [ aStream next. [ aStream atEnd not and: [ aStream next = $" ] ] whileFalse ]! ! DSLRule subclass: #LAHighlightingAction instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Integration'! !LAHighlightingAction methodsFor: 'visiting' stamp: 'lr 10/23/2008 11:09'! acceptDsl: aVisitor | aspects | aspects := LAAspect allActiveForSelector: aVisitor selector in: (aVisitor theClass ifNil: [ Object ]). aspects isEmpty ifFalse: [ Transcript show: aspects; cr ]! ! TestCase subclass: #LAPackagesTests instanceVariableNames: 'parser' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Examples'! !LAPackagesTests methodsFor: 'accessing' stamp: 'lr 10/20/2008 16:58'! parser ^ parser ifNil: [ parser := LASmalltalkCompiler new ]! ! !LAPackagesTests methodsFor: 'testing' stamp: 'lr 10/20/2008 17:08'! testCollections self verifyClass: Collection. self verifyClass: SequenceableCollection. self verifyClass: OrderedCollection. self verifyClass: Array. self verifyClass: Dictionary. self verifyClass: Set. self verifyClass: Bag ! ! !LAPackagesTests methodsFor: 'testing' stamp: 'lr 10/20/2008 17:09'! testMorph self verifyClass: Morph! ! !LAPackagesTests methodsFor: 'testing' stamp: 'lr 10/20/2008 17:00'! testPetitParser self verifyPackage: 'PetitParser'! ! !LAPackagesTests methodsFor: 'testing' stamp: 'lr 10/20/2008 17:03'! testQuasiQuote self verifyPackage: 'QuasiQuote'! ! !LAPackagesTests methodsFor: 'private' stamp: 'lr 10/20/2008 17:03'! verifyClass: aClass aClass selectors do: [ :selector | self verifyClass: aClass selector: selector ]! ! !LAPackagesTests methodsFor: 'private' stamp: 'lr 10/20/2008 17:02'! verifyClass: aClass selector: aSelector | source original other | source := aClass sourceCodeAt: aSelector. source isNil ifTrue: [ ^ self ]. original := aClass parseTreeFor: aSelector. original isNil ifTrue: [ ^ self ]. original nodesDo: [ :each | each comments: nil ]. other := self parser parse: source asParserStream. other isFailure ifTrue: [ self assert: false description: other printString resumable: true ] ifFalse: [ self assert: original formattedCode = other formattedCode description: source resumable: true ]! ! !LAPackagesTests methodsFor: 'private' stamp: 'lr 10/20/2008 17:01'! verifyPackage: aString | package | package := PackageInfo named: aString. package classesAndMetaClasses do: [ :each | self verifyClass: each ] displayingProgress: 'Verifying ' , aString! ! TestCase subclass: #LAParserTests instanceVariableNames: 'parser result' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Tests'! LAParserTests subclass: #LACompilerTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Tests'! !LACompilerTests methodsFor: 'accessing' stamp: 'lr 10/23/2008 15:53'! parserClass ^ LASmalltalkCompiler! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral1 super testArrayLiteral1. self assert: result isLiteral. self assert: result value = #()! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral10 super testArrayLiteral10. self assert: result isLiteral. self assert: result value = #(#(1 2 ) #(1 2 3 ) )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral2 super testArrayLiteral2. self assert: result isLiteral. self assert: result value = #(1 )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral3 super testArrayLiteral3. self assert: result isLiteral. self assert: result value = #(1 2 )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral4 super testArrayLiteral4. self assert: result isLiteral. self assert: result value = #(true false nil )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral5 super testArrayLiteral5. self assert: result isLiteral. self assert: result value = #($a )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral6 super testArrayLiteral6. self assert: result isLiteral. self assert: result value = #(1.2 )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral7 super testArrayLiteral7. self assert: result isLiteral. self assert: result value = #(#size #at: #at:put: #'==' )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral8 super testArrayLiteral8. self assert: result isLiteral. self assert: result value = #('baz' )! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral9 super testArrayLiteral9. self assert: result isLiteral. self assert: result value = #(#(1 ) 2 )! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment1 super testAssignment1. self assert: result isLiteral. self assert: result value = 1! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral1 super testCharLiteral1. self assert: result isLiteral. self assert: result value = $a! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral2 super testCharLiteral2. self assert: result isLiteral. self assert: result value = Character space! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral3 super testCharLiteral3. self assert: result isLiteral. self assert: result value = $$! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral1 super testNumberLiteral1. self assert: result isLiteral. self assert: result value = 0! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral10 super testNumberLiteral10. self assert: result isLiteral. self assert: result value = 10! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral11 super testNumberLiteral11. self assert: result isLiteral. self assert: result value = 511! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral12 super testNumberLiteral12. self assert: result isLiteral. self assert: result value = 175! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral13 super testNumberLiteral13. self assert: result isLiteral. self assert: result value = 202.9921875! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral14 super testNumberLiteral14. self assert: result isLiteral. self assert: result value floor = -9! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral2 super testNumberLiteral2. self assert: result isLiteral. self assert: result value = 0.1! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral3 super testNumberLiteral3. self assert: result isLiteral. self assert: result value = 123! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral4 super testNumberLiteral4. self assert: result isLiteral. self assert: result value = 123.456! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral5 super testNumberLiteral5. self assert: result isLiteral. self assert: result value = 0! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral6 super testNumberLiteral6. self assert: result isLiteral. self assert: result value = -0.1! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral7 super testNumberLiteral7. self assert: result isLiteral. self assert: result value = -123! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral8 super testNumberLiteral8. self assert: result isLiteral. self assert: result value = -123! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral9 super testNumberLiteral9. self assert: result isLiteral. self assert: result value = -123.456! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma1 super testPragma1. self assert: result pragmas size = 1. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma2 super testPragma2. self assert: result pragmas size = 2. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma3 super testPragma3. self assert: result pragmas size = 1. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma4 super testPragma4. self assert: result pragmas size = 1. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma5 super testPragma5. self assert: result pragmas size = 2. self assert: result body temporaries size = 1. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testSimpleBlock1 super testSimpleBlock1. self assert: result isBlock. self assert: result arguments isEmpty. self assert: result body temporaries isEmpty. self assert: result body statements isEmpty! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral1 super testSpecialLiteral1. self assert: result isLiteral. self assert: result value = true! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral2 super testSpecialLiteral2. self assert: result isLiteral. self assert: result value = false! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral3 super testSpecialLiteral3. self assert: result isLiteral. self assert: result value = nil! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral1 super testStringLiteral1. self assert: result isLiteral. self assert: result value = ''! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral2 super testStringLiteral2. self assert: result isLiteral. self assert: result value = 'ab'! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral3 super testStringLiteral3. self assert: result isLiteral. self assert: result value = 'ab''cd'! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral1 super testSymbolLiteral1. self assert: result isLiteral. self assert: result value = #foo! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral2 super testSymbolLiteral2. self assert: result isLiteral. self assert: result value = #+! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral3 super testSymbolLiteral3. self assert: result isLiteral. self assert: result value = #key:! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral4 super testSymbolLiteral4. self assert: result isLiteral. self assert: result value = #key:value:! ! !LACompilerTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral5 super testSymbolLiteral5. self assert: result isLiteral. self assert: result value = #'testing-result'! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryExpression1 super testUnaryExpression1. self assert: result isMessage. self assert: result receiver isLiteral. self assert: result selector = #abs. self assert: result arguments isEmpty! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! !LACompilerTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! 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! ! LAParserTests subclass: #LAHighlighterTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Tests'! !LAHighlighterTests methodsFor: 'accessing' stamp: 'lr 10/23/2008 15:53'! parserClass ^ LASmalltalkHighlighter! ! !LAParserTests methodsFor: 'parsing' stamp: 'lr 10/23/2008 15:53'! parse: aString self parse: aString rule: #start! ! !LAParserTests methodsFor: 'parsing' stamp: 'lr 10/23/2008 15:53'! parse: aString rule: aSymbol | production | production := self parser productionAt: aSymbol definition: [ self error: 'Invalid production ' , aSymbol printString ]. result := production parse: aString asParserStream! ! !LAParserTests methodsFor: 'accessing' stamp: 'lr 10/23/2008 15:53'! parser ^ parser ifNil: [ parser := self parserClass new ]! ! !LAParserTests methodsFor: 'accessing' stamp: 'lr 10/23/2008 15:53'! parserClass ^ LASmalltalkParser! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testArgumentsBlock1 self parse: '[ :a | ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testArgumentsBlock2 self parse: '[ :a :b | ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testArgumentsBlock3 self parse: '[ :a :b :c | ]' rule: #block! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral1 self parse: '#()' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral10 self parse: '#((1 2) #(1 2 3))' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral2 self parse: '#(1)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral3 self parse: '#(1 2)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral4 self parse: '#(true false nil)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral5 self parse: '#($a)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral6 self parse: '#(1.2)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral7 self parse: '#(size at: at:put: ==)' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral8 self parse: '#(''baz'')' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testArrayLiteral9 self parse: '#((1) 2))' rule: #arrayLiteral! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment1 self parse: '1' rule: #expression! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment2 self parse: 'a := 1' rule: #expression! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment3 self parse: 'a := b := 1' rule: #expression! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment4 self parse: 'a _ 1' rule: #expression! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testAssignment5 self parse: 'a _ b _ 1' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryExpression1 self parse: '1 + 2' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryExpression2 self parse: '1 + 2 + 3' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryMethod1 self parse: '+ a' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryMethod2 self parse: '+ a | b |' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryMethod3 self parse: '+ a b' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testBinaryMethod4 self parse: '+ a | b | c' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testCascadeExpression1 self parse: '1 abs; negated' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testCascadeExpression2 self parse: '1 abs negated; raisedTo: 12; negated' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testCascadeExpression3 self parse: '1 + 2; - 3' rule: #expression! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral1 self parse: '$a' rule: #charLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral2 self parse: '$ ' rule: #charLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testCharLiteral3 self parse: '$$' rule: #charLiteral! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testComplexBlock1 self parse: '[ :a | | b | c ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testComplexBlock2 self parse: '[:a||b|c]' rule: #block! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordExpression1 self parse: '1 to: 2' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordExpression2 self parse: '1 to: 2 by: 3' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordExpression3 self parse: '1 to: 2 by: 3 do: 4' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordMethod1 self parse: 'to: a' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordMethod2 self parse: 'to: a do: b | c |' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordMethod3 self parse: 'to: a do: b by: c d' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testKeywordMethod4 self parse: 'to: a do: b by: c | d | e' rule: #method! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral1 self parse: '0' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral10 self parse: '10r10' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral11 self parse: '8r777' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral12 self parse: '16rAF' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral13 self parse: '16rCA.FE' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral14 self parse: '3r-22.2' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral2 self parse: '0.1' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral3 self parse: '123' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral4 self parse: '123.456' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral5 self parse: '-0' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral6 self parse: '-0.1' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral7 self parse: '-123' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral8 self parse: '-123' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testNumberLiteral9 self parse: '-123.456' rule: #numberLiteral! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma1 self parse: 'method ' rule: #method! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma2 self parse: 'method ' rule: #method! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma3 self parse: 'method | a | ' rule: #method! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma4 self parse: 'method | a |' rule: #method! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testPragma5 self parse: 'method | a | ' rule: #method! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testSequence1 self parse: '| a | 1 . 2' rule: #sequence! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testSimpleBlock1 self parse: '[ ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testSimpleBlock2 self parse: '[ nil ]' rule: #block! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral1 self parse: 'true' rule: #trueLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral2 self parse: 'false' rule: #falseLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSpecialLiteral3 self parse: 'nil' rule: #nilLiteral! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testStatementBlock1 self parse: '[ nil ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testStatementBlock2 self parse: '[ | a | nil ]' rule: #block! ! !LAParserTests methodsFor: 'testing-blocks' stamp: 'lr 10/23/2008 15:53'! testStatementBlock3 self parse: '[ | a b | nil ]' rule: #block! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testStatements1 self parse: '1' rule: #sequence! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testStatements2 self parse: '1 . 2' rule: #sequence! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testStatements3 self parse: '1 . 2 . 3' rule: #sequence! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral1 self parse: '''''' rule: #stringLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral2 self parse: '''ab''' rule: #stringLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testStringLiteral3 self parse: '''ab''''cd''' rule: #stringLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral1 self parse: '#foo' rule: #symbolLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral2 self parse: '#+' rule: #symbolLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral3 self parse: '#key:' rule: #symbolLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral4 self parse: '#key:value:' rule: #symbolLiteral! ! !LAParserTests methodsFor: 'testing-literals' stamp: 'lr 10/23/2008 15:53'! testSymbolLiteral5 self parse: '#''testing-result''' rule: #symbolLiteral! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testTemporaries1 self parse: '| a |' rule: #sequence! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testTemporaries2 self parse: '| a b |' rule: #sequence! ! !LAParserTests methodsFor: 'testing' stamp: 'lr 10/23/2008 15:53'! testTemporaries3 self parse: '| a b c |' rule: #sequence! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryExpression1 self parse: '1 abs' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryExpression2 self parse: '1 abs negated' rule: #expression! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryMethod1 self parse: 'abs' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryMethod2 self parse: 'abs | a |' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryMethod3 self parse: 'abs a' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryMethod4 self parse: 'abs | a | b' rule: #method! ! !LAParserTests methodsFor: 'testing-messages' stamp: 'lr 10/23/2008 15:53'! testUnaryMethod5 self parse: 'abs | a |' rule: #method! ! TestCase subclass: #LAPathAspectTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Examples'! TestCase subclass: #LARegexpAspectTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'LanguageAspects-Examples'! !LARegexpAspectTest methodsFor: 'accessing' stamp: 'lr 10/23/2008 11:16'! aspect ^ LARegexpAspect default! ! LARegexpAspect initialize!