Dear all, I'm developing code which generates a method content, compiles it and adds it to an existing class. I compile the message using #compile: message:
for instance:
MorphicReplayDemoTest compile: ' testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 651@559 to: 643@579. '. This works fine. However if the contents of the method is too long; for instance:
if the self addMMEFrom: 1054@512 to: 1037@504. is repeated around 250 times; I get following error (see stack below) The strange thing is that if I manually add that method using the editor and paste it, it works just fine. I even tested up to 5000 lines of code; its slow, but its working.
Any ideas how to solve this? Thanks, Bart I'm using Pharo 1.0 rc update: 10502; using Ubuntu 9.10, using vm pharo-vm-0.15.2f-linux.
THERE_BE_DRAGONS_HERE
MessageNotUnderstood: receiver of "<" is nil 20 December 2009 8:17:14 pm VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update: #10074] Image: PharoCore1.0rc1 [Latest update: #10502] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image Trusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image/secure Untrusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image/My Squeak UndefinedObject(Object)>>doesNotUnderstand: #< Receiver: nil Arguments and temporary variables: aMessage: < 0 exception: MessageNotUnderstood: receiver of "<" is nil resumeValue: nil Receiver's instance variables: nil EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: Receiver: {an EncoderForV3PlusClosures} Arguments and temporary variables: literalIndex: nil Receiver's instance variables: comment: nil pc: nil scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... nTemps: 0 supered: false requestor: nil class: MorphicReplayDemoTest selector: #testMethod literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... litSet: a LiteralDictionary(size 402) sourceRanges: a Dictionary(size 853) globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... addedSelectorAndMethodClassLiterals: false stream: {an EncoderForV3PlusClosures} position: 0 rootNode: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEF...etc... blockExtentsToLocals: nil EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: Receiver: {an EncoderForV3PlusClosures} Arguments and temporary variables: genSelector: #genPushLiteral: args: #(nil) Receiver's instance variables: comment: nil pc: nil scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... nTemps: 0 supered: false requestor: nil class: MorphicReplayDemoTest selector: #testMethod literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... litSet: a LiteralDictionary(size 402) sourceRanges: a Dictionary(size 853) globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... addedSelectorAndMethodClassLiterals: false stream: {an EncoderForV3PlusClosures} position: 0 rootNode: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEF...etc... blockExtentsToLocals: nil EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: Receiver: {an EncoderForV3PlusClosures} Arguments and temporary variables: literalIndex: nil Receiver's instance variables: comment: nil pc: nil scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... nTemps: 0 supered: false requestor: nil class: MorphicReplayDemoTest selector: #testMethod literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... litSet: a LiteralDictionary(size 402) sourceRanges: a Dictionary(size 853) globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... addedSelectorAndMethodClassLiterals: false stream: {an EncoderForV3PlusClosures} position: 0 rootNode: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEF...etc... blockExtentsToLocals: nil LiteralNode>>sizeCodeForValue: Receiver: {397} Arguments and temporary variables: encoder: {an EncoderForV3PlusClosures} Receiver's instance variables: comment: nil pc: nil key: 397 code: -3 index: nil [] in MessageNode>>sizeCodeForValue: Receiver: {1092 @ 397} Arguments and temporary variables: <<error during printing> Receiver's instance variables: comment: nil pc: nil receiver: {1092} selector: {@} precedence: 2 special: 0 arguments: #({397}) sizes: #(nil) equalNode: nil caseErrorNode: nil Array(SequenceableCollection)>>collect: Receiver: #({397}) Arguments and temporary variables: aBlock: [closure] in MessageNode>>sizeCodeForValue: newCollection: #(nil) index: 1 indexLimiT: 1 Receiver's instance variables: #({397}) MessageNode>>sizeCodeForValue: Receiver: {1092 @ 397} Arguments and temporary variables: <<error during printing> Receiver's instance variables: comment: nil pc: nil receiver: {1092} selector: {@} precedence: 2 special: 0 arguments: #({397}) sizes: #(nil) equalNode: nil caseErrorNode: nil [] in MessageNode>>sizeCodeForValue: Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} Arguments and temporary variables: <<error during printing> Receiver's instance variables: comment: nil pc: nil receiver: {self} selector: {addMMEFrom:to:} precedence: 3 special: 0 arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) sizes: #(nil nil) equalNode: nil caseErrorNode: nil OrderedCollection>>collect: Receiver: an OrderedCollection({1140 @ 387} {1092 @ 397}) Arguments and temporary variables: aBlock: [closure] in MessageNode>>sizeCodeForValue: newCollection: an OrderedCollection(7) index: 4 Receiver's instance variables: array: an Array(nil nil {1140 @ 387} {1092 @ 397} nil nil nil nil nil nil) firstIndex: 3 lastIndex: 4 MessageNode>>sizeCodeForValue: Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} Arguments and temporary variables: <<error during printing> Receiver's instance variables: comment: nil pc: nil receiver: {self} selector: {addMMEFrom:to:} precedence: 3 special: 0 arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) sizes: #(nil nil) equalNode: nil caseErrorNode: nil MessageNode(ParseNode)>>sizeCodeForEffect: Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} Arguments and temporary variables: encoder: {an EncoderForV3PlusClosures} Receiver's instance variables: comment: nil pc: nil receiver: {self} selector: {addMMEFrom:to:} precedence: 3 special: 0 arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) sizes: #(nil nil) equalNode: nil caseErrorNode: nil MessageNode>>sizeCodeForEffect: Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} Arguments and temporary variables: encoder: {an EncoderForV3PlusClosures} Receiver's instance variables: comment: nil pc: nil receiver: {self} selector: {addMMEFrom:to:} precedence: 3 special: 0 arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) sizes: #(nil nil) equalNode: nil caseErrorNode: nil BlockNode>>sizeCodeExceptLast: Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEFrom: 1037 @ 504 to: 979 @ 482. ...etc... Arguments and temporary variables: encoder: {an EncoderForV3PlusClosures} codeSize: 2564 i: 169 statement: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} iLimiT: 287 Receiver's instance variables: comment: nil pc: nil arguments: #() statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ 504} {...etc... returns: true nArgsNode: nil size: nil remoteCopyNode: nil temporaries: an OrderedCollection() optimized: false actualScopeIfOptimized: nil blockExtent: (0 to: 2) remoteTempNode: nil copiedValues: nil closureCreationNode: nil startOfLastStatement: 11519 BlockNode>>sizeCodeForEvaluatedValue: Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEFrom: 1037 @ 504 to: 979 @ 482. ...etc... Arguments and temporary variables: encoder: {an EncoderForV3PlusClosures} Receiver's instance variables: comment: nil pc: nil arguments: #() statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ 504} {...etc... returns: true nArgsNode: nil size: nil remoteCopyNode: nil temporaries: an OrderedCollection() optimized: false actualScopeIfOptimized: nil blockExtent: (0 to: 2) remoteTempNode: nil copiedValues: nil closureCreationNode: nil startOfLastStatement: 11519 BytecodeAgnosticMethodNode>>generate: Receiver: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEFrom: 1037 @ 504 to: 9...etc... Arguments and temporary variables: trailer: #(0 0 0 0) primErrNode: nil blkSize: nil nLits: nil literals: nil stack: nil method: nil locals: nil lit: nil Receiver's instance variables: comment: nil pc: nil selectorOrFalse: #testMethod precedence: 1 arguments: #() block: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMMEFrom: 1037 @ 5...etc... primitive: 0 encoder: {an EncoderForV3PlusClosures} temporaries: #() properties: an AdditionalMethodState sourceText: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFr...etc... locationCounter: 3 localsPool: an IdentitySet() CompiledMethodWithNode class>>generateMethodFromNode:trailer: Receiver: CompiledMethodWithNode Arguments and temporary variables: aMethodNode: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addM...etc... bytes: #(0 0 0 0) Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#method->a CompiledMethod(650: CompiledMethodWit...etc... format: 134 instanceVariables: #('node' 'method') organization: ('accessing' method node selector) ('private' method: node:) subclasses: nil name: #CompiledMethodWithNode classPool: nil sharedPools: nil environment: Smalltalk category: #'Compiler-Support' traitComposition: nil localSelectors: nil MorphicReplayDemoTest class(Behavior)>>compile:classified:notifying:trailer:ifFail: Receiver: MorphicReplayDemoTest Arguments and temporary variables: code: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... category: #'as yet unclassified' requestor: nil bytes: #(0 0 0 0) failBlock: [closure] in MorphicReplayDemoTest class(ClassDescription)>>compile:...etc... methodNode: testMethod self addMMEFrom: 1054 @ 512 to: 1037 @ 504. self addMM...etc... Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: Receiver: MorphicReplayDemoTest Arguments and temporary variables: text: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... category: #'as yet unclassified' changeStamp: 'BartGauquie 12/20/2009 20:17' requestor: nil logSource: true methodAndNode: nil Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying: Receiver: MorphicReplayDemoTest Arguments and temporary variables: text: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... category: #'as yet unclassified' changeStamp: 'BartGauquie 12/20/2009 20:17' requestor: nil Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... MorphicReplayDemoTest class(ClassDescription)>>compile:classified:notifying: Receiver: MorphicReplayDemoTest Arguments and temporary variables: text: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... category: #'as yet unclassified' requestor: nil stamp: 'BartGauquie 12/20/2009 20:17' Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: Receiver: MorphicReplayDemoTest Arguments and temporary variables: code: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... requestor: nil Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... MorphicReplayDemoTest class(Behavior)>>compile: Receiver: MorphicReplayDemoTest Arguments and temporary variables: code: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... Receiver's instance variables: superclass: AbstractReplayTestCase methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... format: 134 instanceVariables: nil organization: ('tests' testMethod) subclasses: nil name: #MorphicReplayDemoTest classPool: nil sharedPools: nil environment: Smalltalk category: #'MorphicsRecordNPlay-Model' traitComposition: nil localSelectors: nil history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... ByteString>>DoIt Receiver: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 1037@504 to: 979@48...etc... Arguments and temporary variables: Receiver's instance variables: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 1037@504 to: 979@48...etc... Compiler>>evaluate:in:to:notifying:ifFail:logged: Receiver: a Compiler Arguments and temporary variables: textOrStream: a ReadWriteStream 'MorphicReplayDemoTest compile: self.' aContext: nil receiver: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom...etc... aRequestor: a TextMorphEditor failBlock: [closure] in [] in TextMorphEditor(ParagraphEditor)>>evaluateSelecti...etc... logFlag: true methodNode: DoIt ^ MorphicReplayDemoTest compile: self method: a CompiledMethod(2378: ByteString>>DoIt) value: nil toLog: nil itsSelection: nil itsSelectionString: nil Receiver's instance variables: sourceStream: a ReadWriteStream 'MorphicReplayDemoTest compile: self.' requestor: a TextMorphEditor class: ByteString category: nil context: nil parser: a Parser [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection Receiver: a TextMorphEditor Arguments and temporary variables: rcvr: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... ctxt: nil Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil BlockClosure>>on:do: Receiver: [closure] in TextMorphEditor(ParagraphEditor)>>evaluateSelection Arguments and temporary variables: exception: OutOfScopeNotification handlerAction: [closure] in TextMorphEditor(ParagraphEditor)>>evaluateSelection...etc... handlerActive: true Receiver's instance variables: outerContext: TextMorphEditor(ParagraphEditor)>>evaluateSelection startpc: 116 numArgs: 0 TextMorphEditor(ParagraphEditor)>>evaluateSelection Receiver: a TextMorphEditor Arguments and temporary variables: result: nil rcvr: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 10...etc... ctxt: nil Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor(ParagraphEditor)>>doIt Receiver: a TextMorphEditor Arguments and temporary variables: Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil [] in TextMorphEditor(ParagraphEditor)>>doIt: Receiver: a TextMorphEditor Arguments and temporary variables: Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: Receiver: a TextMorphEditor Arguments and temporary variables: aBlock: [closure] in TextMorphEditor(ParagraphEditor)>>doIt: Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor(ParagraphEditor)>>doIt: Receiver: a TextMorphEditor Arguments and temporary variables: characterStream: a WriteStream '' Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: Receiver: a TextMorphEditor Arguments and temporary variables: keyEvent: [keystroke '<Cmd-d>'] typeAheadStream: a WriteStream '' honorCommandKeys: true keyValue: 100 keyChar: $d char: $d action: #doIt: Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor>>dispatchOnKeyEvent:with: Receiver: a TextMorphEditor Arguments and temporary variables: keyEvent: [keystroke '<Cmd-d>'] typeAheadStream: a WriteStream '' Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor(ParagraphEditor)>>keystroke: Receiver: a TextMorphEditor Arguments and temporary variables: keyEvent: [keystroke '<Cmd-d>'] typeAhead: a WriteStream '' Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil TextMorphEditor>>keystroke: Receiver: a TextMorphEditor Arguments and temporary variables: keyEvent: [keystroke '<Cmd-d>'] Receiver's instance variables: model: a NewInspector paragraph: a MultiNewParagraph startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 ...etc... stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... beginTypeInBlock: nil emphasisHere: an Array(a TextFontChange font: 2) initialText: a Text for 'MorphicReplayDemoTest compile: self ' selectionShowing: false otherInterval: (38 to: 38) lastParentLocation: nil morph: a TextMorphForEditView(3730) oldInterval: nil pivotBlock: nil [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: Receiver: a TextMorphForEditView(3730) Arguments and temporary variables: evt: [keystroke '<Cmd-d>'] Receiver's instance variables: bounds: 0@0 corner: 358@34 owner: a TransformMorph(942) submorphs: #() fullBounds: 0@0 corner: 358@34 color: Color black extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] borderWidth: 0 borderColor: Color black textStyle: a TextStyle Bitmap DejaVu Sans 9 text: a Text for 'MorphicReplayDemoTest compile: self.' wrapFlag: true paragraph: a MultiNewParagraph editor: a TextMorphEditor container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil editHistory: a TextMorphCommandHistory editView: a PluggableTextMorphPlus(2866) acceptOnCR: false TextMorphForEditView(TextMorph)>>handleInteraction: Receiver: a TextMorphForEditView(3730) Arguments and temporary variables: interactionBlock: [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke...etc... oldEditor: a TextMorphEditor oldParagraph: a MultiNewParagraph oldText: a Text for 'MorphicReplayDemoTest compile: self.' Receiver's instance variables: bounds: 0@0 corner: 358@34 owner: a TransformMorph(942) submorphs: #() fullBounds: 0@0 corner: 358@34 color: Color black extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] borderWidth: 0 borderColor: Color black textStyle: a TextStyle Bitmap DejaVu Sans 9 text: a Text for 'MorphicReplayDemoTest compile: self.' wrapFlag: true paragraph: a MultiNewParagraph editor: a TextMorphEditor container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil editHistory: a TextMorphCommandHistory editView: a PluggableTextMorphPlus(2866) acceptOnCR: false TextMorphForEditView>>handleInteraction: Receiver: a TextMorphForEditView(3730) Arguments and temporary variables: interActionBlock: [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke...etc... Receiver's instance variables: bounds: 0@0 corner: 358@34 owner: a TransformMorph(942) submorphs: #() fullBounds: 0@0 corner: 358@34 color: Color black extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] borderWidth: 0 borderColor: Color black textStyle: a TextStyle Bitmap DejaVu Sans 9 text: a Text for 'MorphicReplayDemoTest compile: self.' wrapFlag: true paragraph: a MultiNewParagraph editor: a TextMorphEditor container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil editHistory: a TextMorphCommandHistory editView: a PluggableTextMorphPlus(2866) acceptOnCR: false --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #< EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: LiteralNode>>sizeCodeForValue: [] in MessageNode>>sizeCodeForValue: Array(SequenceableCollection)>>collect: MessageNode>>sizeCodeForValue: [] in MessageNode>>sizeCodeForValue: OrderedCollection>>collect: MessageNode>>sizeCodeForValue: MessageNode(ParseNode)>>sizeCodeForEffect: MessageNode>>sizeCodeForEffect: BlockNode>>sizeCodeExceptLast: BlockNode>>sizeCodeForEvaluatedValue: BytecodeAgnosticMethodNode>>generate: CompiledMethodWithNode class>>generateMethodFromNode:trailer: MorphicReplayDemoTest class(Behavior)>>compile:classified:notifying:trailer:ifFail: MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying: MorphicReplayDemoTest class(ClassDescription)>>compile:classified:notifying: MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: MorphicReplayDemoTest class(Behavior)>>compile: ByteString>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection BlockClosure>>on:do: TextMorphEditor(ParagraphEditor)>>evaluateSelection TextMorphEditor(ParagraphEditor)>>doIt [] in TextMorphEditor(ParagraphEditor)>>doIt: TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: TextMorphEditor(ParagraphEditor)>>doIt: TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: TextMorphEditor>>dispatchOnKeyEvent:with: TextMorphEditor(ParagraphEditor)>>keystroke: TextMorphEditor>>keystroke: [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: TextMorphForEditView(TextMorph)>>handleInteraction: TextMorphForEditView>>handleInteraction: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [] in TextMorphForEditView(TextMorph)>>keyStroke: ECToolSet class>>codeCompletionAround:textMorph:keyStroke: DEVToolSet class>>codeCompletionAround:textMorph:keyStroke: ToolSet class>>codeCompletionAround:textMorph:keyStroke: TextMorphForEditView(TextMorph)>>keyStroke: TextMorphForEditView>>keyStroke: TextMorphForEditView(TextMorph)>>handleKeystroke: KeyboardEvent>>sentTo: TextMorphForEditView(Morph)>>handleEvent: TextMorphForEditView(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: [] in PasteUpMorph>>becomeActiveDuring: BlockClosure>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess [] in BlockClosure>>newProcess ----------------------------------------------------------- _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
On 20.12.2009 20:44, Bart Gauquie wrote:
> Dear all, > > I'm developing code which generates a method content, compiles it and > adds it to an existing class. > I compile the message using #compile: message: > for instance: > > MorphicReplayDemoTest compile: ' > testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 651@559 to: 643@579. > '. > > This works fine. However if the contents of the method is too long; > for instance: > if the self addMMEFrom: 1054@512 to: 1037@504. is repeated around 250 > times; I get following error (see stack below) > > The strange thing is that if I manually add that method using the > editor and paste it, it works just fine. I even tested up to 5000 > lines of code; its slow, but its working. > > Any ideas how to solve this? > > Thanks, > > Bart > > I'm using Pharo 1.0 rc update: 10502; using Ubuntu 9.10, using vm > pharo-vm-0.15.2f-linux. > what I think you are, why not keep an OrderedCollection of MessageSend instances instead? Cheers, Henry _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
In reply to this post by Bart Gauquie
On Dec 20, 2009, at 8:44 PM, Bart Gauquie wrote: > Dear all, > > I'm developing code which generates a method content, compiles it and adds it to an existing class. > I compile the message using #compile: message: > for instance: > In general, everything is limited to a fairly low quantity: number of temps, number of ivars, number of literals. Especially that the literal frame is limted to some small number (255 or something) can be easily be a problem. (we ran into that already when using bytesurgeon on large existing methods when reifying all sends, for example). Marcus _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
In reply to this post by Bart Gauquie
Hi Bart, can you package this up as a reproducible case, something like
Object compile: (Stream stringContents: [:s| s nextPutAll: 'testMethod'. 256 timesRepeat: ...]) ?
TIA 2009/12/20 Bart Gauquie <[hidden email]>
_______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
In reply to this post by Marcus Denker-4
2009/12/20 Marcus Denker <[hidden email]>:
> > On Dec 20, 2009, at 8:44 PM, Bart Gauquie wrote: > >> Dear all, >> >> I'm developing code which generates a method content, compiles it and adds it to an existing class. >> I compile the message using #compile: message: >> for instance: >> > In general, everything is limited to a fairly low quantity: number of temps, number of ivars, number of > literals. > > Especially that the literal frame is limted to some small number (255 or something) can be easily be a problem. > (we ran into that already when using bytesurgeon on large existing methods when reifying all sends, for example). > To get around this, place all literals into one (usually array): #( a b c d e ..... ) For instance, the above: self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 651@559 to: 643@579. can be easily replaced by something like: #( (1054 512 1037 504) ..... put as many as you want here.... no limit!!! (651 559 643 579) ) do: [:each | self addMMEFrom: (each first @ each second) to: (each third @ each fourth) ] > Marcus > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > -- Best regards, Igor Stasenko AKA sig. _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
2009/12/20 Igor Stasenko <[hidden email]>:
> 2009/12/20 Marcus Denker <[hidden email]>: >> >> On Dec 20, 2009, at 8:44 PM, Bart Gauquie wrote: >> >>> Dear all, >>> >>> I'm developing code which generates a method content, compiles it and adds it to an existing class. >>> I compile the message using #compile: message: >>> for instance: >>> >> In general, everything is limited to a fairly low quantity: number of temps, number of ivars, number of >> literals. >> >> Especially that the literal frame is limted to some small number (255 or something) can be easily be a problem. >> (we ran into that already when using bytesurgeon on large existing methods when reifying all sends, for example). >> > > To get around this, place all literals into one (usually array): > #( a b c d e ..... ) > > For instance, the above: > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 651@559 to: 643@579. > > can be easily replaced by something like: > > #( (1054 512 1037 504) > ..... put as many as you want here.... no limit!!! > > (651 559 643 579) ) do: [:each | > self addMMEFrom: (each first @ each second) to: (each third @ each fourth) > ] > >> Marcus >> _______________________________________________ >> Pharo-project mailing list >> [hidden email] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > > > -- > Best regards, > Igor Stasenko AKA sig. > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project Hehe, when generating code for evaluating monster symbolic expressions, I bumped into many of these limitations. Using a literal Array was not enough because even the indices would consume a literal slot. So i had to decompose indices into operations... Oh, and even some message sends had to be transformed in #perform: sends (not shown here)... Here is a fragment of code for allocating a literal slot (in Objectworks, an ancestor of VW). Nicolas CodeStream subclass: #ExtendedCodeStream instanceVariableNames: 'reduceLiterals' classVariableNames: 'MaxLiteralIndex ' poolDictionaries: 'OpcodePool ' category: 'System-Compiler' ExtendedCodeStream>>pushReducedConstant: lit "Handle MaxLiteralsNumber" | classIndex newClassArray litIndex | self push. lit == nil ifTrue: [code nextPut: OpLoadNil. ^self]. lit == true ifTrue: [code nextPut: OpLoadTrue. ^self]. lit == false ifTrue: [code nextPut: OpLoadFalse. ^self]. lit isInteger ifTrue: [(lit >= 0 and: [lit <= 2]) ifTrue: [code nextPut: OpLoadZero + lit. ^self]. (lit >= 0 and: [lit <= 255]) ifTrue: [code nextPut: OpLoadByte with: lit. ^self]. (lit >= -32768 and: [lit < 32768]) ifTrue: [code nextPut: OpLoadTwoBytes with: ((lit bitShift: -8) bitAnd: 255) with: (lit bitAnd: 255). ^self]]. ((lit isMemberOf: Character) and: [lit asInteger between: 0 and: 255]) ifTrue: [code nextPut: OpLoadCharacter with: lit asInteger. ^self]. classIndex := literals at: lit class ifAbsent: ["Add the literal class array to the collection" literalCollection addLast: Array new. literals at: lit class put: literalCollection size - 1]. classIndex > MaxLiteralIndex ifTrue: [Errorscript cr; show: 'compilation failure: too many literal classes...'. self class literalLimitSignal raiseWith: topNode body]. classIndex <= MaxLoadLiteral ifTrue: [code nextPut: OpLoadLiteral + classIndex] ifFalse: [code nextPut: OpXLoadLiteral with: classIndex]. newClassArray := literalCollection at: classIndex + 1. litIndex := newClassArray indexOf: lit ifAbsent: [0]. litIndex = 0 ifTrue: [newClassArray := newClassArray copyWith: lit. literalCollection at: classIndex + 1 put: newClassArray. litIndex := newClassArray size]. self pushBigIndex: litIndex. self sendNoCheck: #at: numArgs: 1 ExtendedCodeStream>>pushBigIndex: index "i do not want the index to figure in literalCollection so it must remain < 32768" | q r | index < 32768 ifTrue: [^self pushConstant: index]. q := index // 32768. r := index - (q * 32768). self pushConstant: 32767; pushConstant: 1; sendNoCheck: #+ numArgs: 1. q = 1 ifFalse: [self pushBigIndex: q; sendNoCheck: #* numArgs: 1]. r = 0 ifFalse: [self pushConstant: r; sendNoCheck: #+ numArgs: 1]. ExtendedCodeStream>>pushStatic: binding "Static variables do normally consume a literal slot. Arrange to economize this precious ressource" reduceLiterals ifTrue: [self pushReducedConstant: binding. self sendNoCheck: #value numArgs: 0] ifFalse: [super pushStatic: binding] ExtendedCodeStream>>pushConstant: lit "Handle MaxLiteralsIndex" reduceLiterals ifTrue: [^self pushReducedConstant: lit]. super pushConstant: lit. ExtendedCodeStream>>testLiteralsSize "Restart compilation if literal limit is exceeded" literalCollection size > MaxLiteralIndex ifTrue: [reduceLiterals ifTrue: [self class literalLimitSignal raiseWith: topNode body] ifFalse: [self doReduceLiterals; restartCompilation]] _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
You might want to have a look at SmaCC and how it generates the
scanner code: a huge state machine implemented in a single method that consumes the source code of a programming language. To compile the method SmaCC repeatedly applies the "extract method" refactoring to reduce the code into nicely sized (but still efficient) methods. Lukas 2009/12/21 Nicolas Cellier <[hidden email]>: > 2009/12/20 Igor Stasenko <[hidden email]>: >> 2009/12/20 Marcus Denker <[hidden email]>: >>> >>> On Dec 20, 2009, at 8:44 PM, Bart Gauquie wrote: >>> >>>> Dear all, >>>> >>>> I'm developing code which generates a method content, compiles it and adds it to an existing class. >>>> I compile the message using #compile: message: >>>> for instance: >>>> >>> In general, everything is limited to a fairly low quantity: number of temps, number of ivars, number of >>> literals. >>> >>> Especially that the literal frame is limted to some small number (255 or something) can be easily be a problem. >>> (we ran into that already when using bytesurgeon on large existing methods when reifying all sends, for example). >>> >> >> To get around this, place all literals into one (usually array): >> #( a b c d e ..... ) >> >> For instance, the above: >> self addMMEFrom: 1054@512 to: 1037@504. >> self addMMEFrom: 651@559 to: 643@579. >> >> can be easily replaced by something like: >> >> #( (1054 512 1037 504) >> ..... put as many as you want here.... no limit!!! >> >> (651 559 643 579) ) do: [:each | >> self addMMEFrom: (each first @ each second) to: (each third @ each fourth) >> ] >> >>> Marcus >>> _______________________________________________ >>> Pharo-project mailing list >>> [hidden email] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>> >> >> >> >> -- >> Best regards, >> Igor Stasenko AKA sig. >> >> _______________________________________________ >> Pharo-project mailing list >> [hidden email] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > Hehe, when generating code for evaluating monster symbolic > expressions, I bumped into many of these limitations. > Using a literal Array was not enough because even the indices would > consume a literal slot. So i had to decompose indices into > operations... Oh, and even some message sends had to be transformed > in #perform: sends (not shown here)... > Here is a fragment of code for allocating a literal slot (in > Objectworks, an ancestor of VW). > > Nicolas > > CodeStream subclass: #ExtendedCodeStream > instanceVariableNames: 'reduceLiterals' > classVariableNames: 'MaxLiteralIndex ' > poolDictionaries: 'OpcodePool ' > category: 'System-Compiler' > > ExtendedCodeStream>>pushReducedConstant: lit > "Handle MaxLiteralsNumber" > > | classIndex newClassArray litIndex | > self push. > lit == nil > ifTrue: > [code nextPut: OpLoadNil. > ^self]. > lit == true > ifTrue: > [code nextPut: OpLoadTrue. > ^self]. > lit == false > ifTrue: > [code nextPut: OpLoadFalse. > ^self]. > lit isInteger > ifTrue: > [(lit >= 0 and: [lit <= 2]) > ifTrue: > [code nextPut: OpLoadZero + lit. > ^self]. > (lit >= 0 and: [lit <= 255]) > ifTrue: > [code nextPut: OpLoadByte with: lit. > ^self]. > (lit >= -32768 and: [lit < 32768]) > ifTrue: > [code > nextPut: OpLoadTwoBytes > with: ((lit bitShift: -8) > bitAnd: 255) > with: (lit bitAnd: 255). > ^self]]. > ((lit isMemberOf: Character) > and: [lit asInteger between: 0 and: 255]) > ifTrue: > [code nextPut: OpLoadCharacter with: lit asInteger. > ^self]. > classIndex := literals at: lit class > ifAbsent: > ["Add the literal class array to the collection" > literalCollection addLast: Array new. > literals at: lit class put: literalCollection size - 1]. > classIndex > MaxLiteralIndex > ifTrue: > [Errorscript cr; show: 'compilation failure: too many literal classes...'. > self class literalLimitSignal raiseWith: topNode body]. > classIndex <= MaxLoadLiteral > ifTrue: [code nextPut: OpLoadLiteral + classIndex] > ifFalse: [code nextPut: OpXLoadLiteral with: classIndex]. > newClassArray := literalCollection at: classIndex + 1. > litIndex := newClassArray indexOf: lit ifAbsent: [0]. > litIndex = 0 > ifTrue: > [newClassArray := newClassArray copyWith: lit. > literalCollection at: classIndex + 1 put: newClassArray. > litIndex := newClassArray size]. > self pushBigIndex: litIndex. > self sendNoCheck: #at: numArgs: 1 > > ExtendedCodeStream>>pushBigIndex: index > "i do not want the index to figure in literalCollection > so it must remain < 32768" > > | q r | > index < 32768 ifTrue: [^self pushConstant: index]. > q := index // 32768. > r := index - (q * 32768). > self pushConstant: 32767; pushConstant: 1; sendNoCheck: #+ numArgs: 1. > q = 1 ifFalse: [self pushBigIndex: q; sendNoCheck: #* numArgs: 1]. > r = 0 ifFalse: [self pushConstant: r; sendNoCheck: #+ numArgs: 1]. > > ExtendedCodeStream>>pushStatic: binding > "Static variables do normally consume a literal slot. > Arrange to economize this precious ressource" > > reduceLiterals > ifTrue: > [self pushReducedConstant: binding. > self sendNoCheck: #value numArgs: 0] > ifFalse: [super pushStatic: binding] > > ExtendedCodeStream>>pushConstant: lit > "Handle MaxLiteralsIndex" > > reduceLiterals ifTrue: [^self pushReducedConstant: lit]. > super pushConstant: lit. > > ExtendedCodeStream>>testLiteralsSize > "Restart compilation if literal limit is exceeded" > > literalCollection size > MaxLiteralIndex ifTrue: [reduceLiterals > ifTrue: [self class literalLimitSignal raiseWith: topNode body] > ifFalse: [self doReduceLiterals; restartCompilation]] > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > -- Lukas Renggli http://www.lukas-renggli.ch _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
2009/12/21 Lukas Renggli <[hidden email]>:
> You might want to have a look at SmaCC and how it generates the > scanner code: a huge state machine implemented in a single method that > consumes the source code of a programming language. To compile the > method SmaCC repeatedly applies the "extract method" refactoring to > reduce the code into nicely sized (but still efficient) methods. > > Lukas > Of course, that would have been a nice option too (more general). Above code is from 1994, not sure what was the status of SmaCC at that time... In case of symbolic expressions, more agressive transformation could occur, like common subexpression elimination... (run on symbolic expression tree rather than AST, because knowing there would be no side effect). Nicolas > 2009/12/21 Nicolas Cellier <[hidden email]>: >> 2009/12/20 Igor Stasenko <[hidden email]>: >>> 2009/12/20 Marcus Denker <[hidden email]>: >>>> >>>> On Dec 20, 2009, at 8:44 PM, Bart Gauquie wrote: >>>> >>>>> Dear all, >>>>> >>>>> I'm developing code which generates a method content, compiles it and adds it to an existing class. >>>>> I compile the message using #compile: message: >>>>> for instance: >>>>> >>>> In general, everything is limited to a fairly low quantity: number of temps, number of ivars, number of >>>> literals. >>>> >>>> Especially that the literal frame is limted to some small number (255 or something) can be easily be a problem. >>>> (we ran into that already when using bytesurgeon on large existing methods when reifying all sends, for example). >>>> >>> >>> To get around this, place all literals into one (usually array): >>> #( a b c d e ..... ) >>> >>> For instance, the above: >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 651@559 to: 643@579. >>> >>> can be easily replaced by something like: >>> >>> #( (1054 512 1037 504) >>> ..... put as many as you want here.... no limit!!! >>> >>> (651 559 643 579) ) do: [:each | >>> self addMMEFrom: (each first @ each second) to: (each third @ each fourth) >>> ] >>> >>>> Marcus >>>> _______________________________________________ >>>> Pharo-project mailing list >>>> [hidden email] >>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>>> >>> >>> >>> >>> -- >>> Best regards, >>> Igor Stasenko AKA sig. >>> >>> _______________________________________________ >>> Pharo-project mailing list >>> [hidden email] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> Hehe, when generating code for evaluating monster symbolic >> expressions, I bumped into many of these limitations. >> Using a literal Array was not enough because even the indices would >> consume a literal slot. So i had to decompose indices into >> operations... Oh, and even some message sends had to be transformed >> in #perform: sends (not shown here)... >> Here is a fragment of code for allocating a literal slot (in >> Objectworks, an ancestor of VW). >> >> Nicolas >> >> CodeStream subclass: #ExtendedCodeStream >> instanceVariableNames: 'reduceLiterals' >> classVariableNames: 'MaxLiteralIndex ' >> poolDictionaries: 'OpcodePool ' >> category: 'System-Compiler' >> >> ExtendedCodeStream>>pushReducedConstant: lit >> "Handle MaxLiteralsNumber" >> >> | classIndex newClassArray litIndex | >> self push. >> lit == nil >> ifTrue: >> [code nextPut: OpLoadNil. >> ^self]. >> lit == true >> ifTrue: >> [code nextPut: OpLoadTrue. >> ^self]. >> lit == false >> ifTrue: >> [code nextPut: OpLoadFalse. >> ^self]. >> lit isInteger >> ifTrue: >> [(lit >= 0 and: [lit <= 2]) >> ifTrue: >> [code nextPut: OpLoadZero + lit. >> ^self]. >> (lit >= 0 and: [lit <= 255]) >> ifTrue: >> [code nextPut: OpLoadByte with: lit. >> ^self]. >> (lit >= -32768 and: [lit < 32768]) >> ifTrue: >> [code >> nextPut: OpLoadTwoBytes >> with: ((lit bitShift: -8) >> bitAnd: 255) >> with: (lit bitAnd: 255). >> ^self]]. >> ((lit isMemberOf: Character) >> and: [lit asInteger between: 0 and: 255]) >> ifTrue: >> [code nextPut: OpLoadCharacter with: lit asInteger. >> ^self]. >> classIndex := literals at: lit class >> ifAbsent: >> ["Add the literal class array to the collection" >> literalCollection addLast: Array new. >> literals at: lit class put: literalCollection size - 1]. >> classIndex > MaxLiteralIndex >> ifTrue: >> [Errorscript cr; show: 'compilation failure: too many literal classes...'. >> self class literalLimitSignal raiseWith: topNode body]. >> classIndex <= MaxLoadLiteral >> ifTrue: [code nextPut: OpLoadLiteral + classIndex] >> ifFalse: [code nextPut: OpXLoadLiteral with: classIndex]. >> newClassArray := literalCollection at: classIndex + 1. >> litIndex := newClassArray indexOf: lit ifAbsent: [0]. >> litIndex = 0 >> ifTrue: >> [newClassArray := newClassArray copyWith: lit. >> literalCollection at: classIndex + 1 put: newClassArray. >> litIndex := newClassArray size]. >> self pushBigIndex: litIndex. >> self sendNoCheck: #at: numArgs: 1 >> >> ExtendedCodeStream>>pushBigIndex: index >> "i do not want the index to figure in literalCollection >> so it must remain < 32768" >> >> | q r | >> index < 32768 ifTrue: [^self pushConstant: index]. >> q := index // 32768. >> r := index - (q * 32768). >> self pushConstant: 32767; pushConstant: 1; sendNoCheck: #+ numArgs: 1. >> q = 1 ifFalse: [self pushBigIndex: q; sendNoCheck: #* numArgs: 1]. >> r = 0 ifFalse: [self pushConstant: r; sendNoCheck: #+ numArgs: 1]. >> >> ExtendedCodeStream>>pushStatic: binding >> "Static variables do normally consume a literal slot. >> Arrange to economize this precious ressource" >> >> reduceLiterals >> ifTrue: >> [self pushReducedConstant: binding. >> self sendNoCheck: #value numArgs: 0] >> ifFalse: [super pushStatic: binding] >> >> ExtendedCodeStream>>pushConstant: lit >> "Handle MaxLiteralsIndex" >> >> reduceLiterals ifTrue: [^self pushReducedConstant: lit]. >> super pushConstant: lit. >> >> ExtendedCodeStream>>testLiteralsSize >> "Restart compilation if literal limit is exceeded" >> >> literalCollection size > MaxLiteralIndex ifTrue: [reduceLiterals >> ifTrue: [self class literalLimitSignal raiseWith: topNode body] >> ifFalse: [self doReduceLiterals; restartCompilation]] >> >> _______________________________________________ >> Pharo-project mailing list >> [hidden email] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > > > -- > Lukas Renggli > http://www.lukas-renggli.ch > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
In reply to this post by Bart Gauquie
Hi Bart,
I still want to take a look at this specific case because the compiler should produce a proper error message, not an internal error. So could you please package it up as a reproducible case, or email me the full string that fails?
TIA 2009/12/20 Bart Gauquie <[hidden email]>
_______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
Hi, First load the latest http://www.squeaksource.com/MorphicsRecordNPlay package. Then for instance following fails if I evaluate it in a workspace:
MorphicReplayDemoTest compile: 'testMethod self addMMEFrom: 1054@512 to: 1037@504. self addMMEFrom: 1037@504 to: 979@482. self addMMEFrom: 979@482 to: 905@464. self addMMEFrom: 905@464 to: 823@462. self addMMEFrom: 823@462 to: 745@482. self addMMEFrom: 745@482 to: 685@520. self addMMEFrom: 685@520 to: 651@559. self addMMEFrom: 651@559 to: 643@579. self addMMEFrom: 643@579 to: 653@579. self addMMEFrom: 653@579 to: 675@564. self addMMEFrom: 675@564 to: 810@452. self addMMEFrom: 810@452 to: 923@353. self addMMEFrom: 923@353 to: 1005@287. self addMMEFrom: 1005@287 to: 1052@257. self addMMEFrom: 1052@257 to: 1061@252. self addMMEFrom: 1061@252 to: 1059@259. self addMMEFrom: 1059@259 to: 998@314. self addMMEFrom: 998@314 to: 898@414. self addMMEFrom: 898@414 to: 827@502. self addMMEFrom: 827@502 to: 789@570. self addMMEFrom: 789@570 to: 792@610. self addMMEFrom: 792@610 to: 839@630. self addMMEFrom: 839@630 to: 929@620. self addMMEFrom: 929@620 to: 1039@579. self addMMEFrom: 1039@579 to: 1086@549. self addMMEFrom: 1086@549 to: 1158@447. self addMMEFrom: 1158@447 to: 1147@379. self addMMEFrom: 1147@379 to: 1066@377. self addMMEFrom: 1066@377 to: 930@416. self addMMEFrom: 930@416 to: 864@446. self addMMEFrom: 864@446 to: 734@530. self addMMEFrom: 734@530 to: 714@548. self addMMEFrom: 714@548 to: 734@546. self addMMEFrom: 734@546 to: 815@515. self addMMEFrom: 815@515 to: 875@491. self addMMEFrom: 875@491 to: 1065@407. self addMMEFrom: 1065@407 to: 1128@361. self addMMEFrom: 1128@361 to: 1142@343. self addMMEFrom: 1142@343 to: 1112@340. self addMMEFrom: 1112@340 to: 1064@349. self addMMEFrom: 1064@349 to: 864@416. self addMMEFrom: 864@416 to: 757@471. self addMMEFrom: 757@471 to: 705@511. self addMMEFrom: 705@511 to: 701@524. self addMMEFrom: 701@524 to: 743@528. self addMMEFrom: 743@528 to: 845@509. self addMMEFrom: 845@509 to: 914@493. self addMMEFrom: 914@493 to: 1101@446. self addMMEFrom: 1101@446 to: 1154@427. self addMMEFrom: 1154@427 to: 1163@423. self addMMEFrom: 1163@423 to: 1156@422. self addMMEFrom: 1156@422 to: 1129@424. self addMMEFrom: 1129@424 to: 923@449. self addMMEFrom: 923@449 to: 785@479. self addMMEFrom: 785@479 to: 689@503. self addMMEFrom: 689@503 to: 651@512. self addMMEFrom: 651@512 to: 650@512. self addMMEFrom: 650@512 to: 672@508. self addMMEFrom: 672@508 to: 773@492. self addMMEFrom: 773@492 to: 916@486. self addMMEFrom: 916@486 to: 1066@494. self addMMEFrom: 1066@494 to: 1175@508. self addMMEFrom: 1175@508 to: 1229@514. self addMMEFrom: 1229@514 to: 1232@514. self addMMEFrom: 1232@514 to: 1142@492. self addMMEFrom: 1142@492 to: 986@483. self addMMEFrom: 986@483 to: 810@498. self addMMEFrom: 810@498 to: 678@519. self addMMEFrom: 678@519 to: 637@523. self addMMEFrom: 637@523 to: 606@502. self addMMEFrom: 606@502 to: 659@442. self addMMEFrom: 659@442 to: 769@365. self addMMEFrom: 769@365 to: 911@316. self addMMEFrom: 911@316 to: 1052@318. self addMMEFrom: 1052@318 to: 1129@360. self addMMEFrom: 1129@360 to: 1153@403. self addMMEFrom: 1153@403 to: 1127@443. self addMMEFrom: 1127@443 to: 1015@491. self addMMEFrom: 1015@491 to: 850@536. self addMMEFrom: 850@536 to: 697@571. self addMMEFrom: 697@571 to: 642@578. self addMMEFrom: 642@578 to: 571@545. self addMMEFrom: 571@545 to: 604@485. self addMMEFrom: 604@485 to: 701@419. self addMMEFrom: 701@419 to: 843@383. self addMMEFrom: 843@383 to: 919@383. self addMMEFrom: 919@383 to: 1095@425. self addMMEFrom: 1095@425 to: 1126@443. self addMMEFrom: 1126@443 to: 1102@449. self addMMEFrom: 1102@449 to: 984@468. self addMMEFrom: 984@468 to: 829@509. self addMMEFrom: 829@509 to: 703@547. self addMMEFrom: 703@547 to: 637@555. self addMMEFrom: 637@555 to: 633@531. self addMMEFrom: 633@531 to: 694@468. self addMMEFrom: 694@468 to: 809@407. self addMMEFrom: 809@407 to: 946@380. self addMMEFrom: 946@380 to: 1011@378. self addMMEFrom: 1011@378 to: 1119@393. self addMMEFrom: 1119@393 to: 1110@393. self addMMEFrom: 1110@393 to: 1010@388. self addMMEFrom: 1010@388 to: 859@402. self addMMEFrom: 859@402 to: 727@433. self addMMEFrom: 727@433 to: 665@454. self addMMEFrom: 665@454 to: 663@461. self addMMEFrom: 663@461 to: 683@469. self addMMEFrom: 683@469 to: 837@492. self addMMEFrom: 837@492 to: 989@495. self addMMEFrom: 989@495 to: 1103@476. self addMMEFrom: 1103@476 to: 1153@433. self addMMEFrom: 1153@433 to: 1163@404. self addMMEFrom: 1163@404 to: 1147@307. self addMMEFrom: 1147@307 to: 1086@294. self addMMEFrom: 1086@294 to: 995@324. self addMMEFrom: 995@324 to: 935@357. self addMMEFrom: 935@357 to: 922@366. self addMMEFrom: 922@366 to: 925@370. self addMMEFrom: 925@370 to: 941@379. self addMMEFrom: 941@379 to: 974@389. self addMMEFrom: 974@389 to: 1010@399. self addMMEFrom: 1010@399 to: 1036@408. self addMMEFrom: 1036@408 to: 1052@414. self addMMEFrom: 1052@414 to: 1056@416. self addMMEFrom: 1056@416 to: 1061@418. self addMMEFrom: 1061@418 to: 1068@419. self addMMEFrom: 1068@419 to: 1078@418. self addMMEFrom: 1078@418 to: 1086@414. self addMMEFrom: 1086@414 to: 1089@411. self addMMEFrom: 1089@411 to: 1095@404. self addMMEFrom: 1095@404 to: 1097@404. self addMMEFrom: 1097@404 to: 1099@406. self addMMEFrom: 1099@406 to: 1100@407. self addMMEFrom: 1100@407 to: 1101@408. self addMMEFrom: 1101@408 to: 1101@409. self addMMEFrom: 1101@409 to: 1101@410. self addMMEFrom: 1101@410 to: 1102@411. self addMMEFrom: 1102@411 to: 1104@412. self addMMEFrom: 1104@412 to: 1106@411. self addMMEFrom: 1106@411 to: 1110@409. self addMMEFrom: 1110@409 to: 1112@408. self addMMEFrom: 1112@408 to: 1114@407. self addMMEFrom: 1114@407 to: 1115@408. self addMMEFrom: 1115@408 to: 1115@408. self addMMEFrom: 1115@408 to: 1115@407. MouseButtonEvent new. MouseButtonEvent new. self addMMEFrom: 1131@401 to: 1129@403. self addMMEFrom: 1129@403 to: 1121@408. self addMMEFrom: 1121@408 to: 1106@416. self addMMEFrom: 1106@416 to: 1084@426. self addMMEFrom: 1084@426 to: 1051@443. self addMMEFrom: 1051@443 to: 1019@470. self addMMEFrom: 1019@470 to: 995@504. self addMMEFrom: 995@504 to: 981@546. self addMMEFrom: 981@546 to: 980@592. self addMMEFrom: 980@592 to: 990@634. self addMMEFrom: 990@634 to: 1012@665. self addMMEFrom: 1012@665 to: 1043@680. self addMMEFrom: 1043@680 to: 1076@677. self addMMEFrom: 1076@677 to: 1132@658. self addMMEFrom: 1132@658 to: 1189@626. self addMMEFrom: 1189@626 to: 1205@606. self addMMEFrom: 1205@606 to: 1222@543. self addMMEFrom: 1222@543 to: 1219@504. self addMMEFrom: 1219@504 to: 1207@464. self addMMEFrom: 1207@464 to: 1190@425. self addMMEFrom: 1190@425 to: 1180@409. self addMMEFrom: 1180@409 to: 1140@387. self addMMEFrom: 1140@387 to: 1092@397. self addMMEFrom: 1092@397 to: 1044@424. self addMMEFrom: 1044@424 to: 1004@464. self addMMEFrom: 1004@464 to: 977@513. self addMMEFrom: 977@513 to: 965@565. self addMMEFrom: 965@565 to: 965@614. self addMMEFrom: 965@614 to: 977@656. self addMMEFrom: 977@656 to: 1001@689. self addMMEFrom: 1001@689 to: 1035@709. self addMMEFrom: 1035@709 to: 1067@714. self addMMEFrom: 1067@714 to: 1094@710. self addMMEFrom: 1094@710 to: 1219@673. self addMMEFrom: 1219@673 to: 1254@635. self addMMEFrom: 1254@635 to: 1269@594. self addMMEFrom: 1269@594 to: 1277@552. self addMMEFrom: 1277@552 to: 1277@530. self addMMEFrom: 1277@530 to: 1251@459. self addMMEFrom: 1251@459 to: 1215@418. self addMMEFrom: 1215@418 to: 1180@389. self addMMEFrom: 1180@389 to: 1143@377. self addMMEFrom: 1143@377 to: 1092@379. self addMMEFrom: 1092@379 to: 1041@397. self addMMEFrom: 1041@397 to: 1019@410. self addMMEFrom: 1019@410 to: 972@460. self addMMEFrom: 972@460 to: 955@499. self addMMEFrom: 955@499 to: 951@541. self addMMEFrom: 951@541 to: 954@580. self addMMEFrom: 954@580 to: 960@597. self addMMEFrom: 960@597 to: 991@639. self addMMEFrom: 991@639 to: 1027@657. self addMMEFrom: 1027@657 to: 1066@666. self addMMEFrom: 1066@666 to: 1122@665. self addMMEFrom: 1122@665 to: 1199@651. self addMMEFrom: 1199@651 to: 1245@625. self addMMEFrom: 1245@625 to: 1270@596. self addMMEFrom: 1270@596 to: 1284@565. self addMMEFrom: 1284@565 to: 1287@528. self addMMEFrom: 1287@528 to: 1275@486. self addMMEFrom: 1275@486 to: 1242@445. self addMMEFrom: 1242@445 to: 1204@412. self addMMEFrom: 1204@412 to: 1171@390. self addMMEFrom: 1171@390 to: 1126@383. self addMMEFrom: 1126@383 to: 1083@394. self addMMEFrom: 1083@394 to: 1040@420. self addMMEFrom: 1040@420 to: 1025@438. self addMMEFrom: 1025@438 to: 996@506. self addMMEFrom: 996@506 to: 992@555. self addMMEFrom: 992@555 to: 999@596. self addMMEFrom: 999@596 to: 1015@629. self addMMEFrom: 1015@629 to: 1027@641. self addMMEFrom: 1027@641 to: 1068@658. self addMMEFrom: 1068@658 to: 1115@655. self addMMEFrom: 1115@655 to: 1184@640. self addMMEFrom: 1184@640 to: 1234@616. self addMMEFrom: 1234@616 to: 1266@589. self addMMEFrom: 1266@589 to: 1290@555. self addMMEFrom: 1290@555 to: 1301@518. self addMMEFrom: 1301@518 to: 1296@474. self addMMEFrom: 1296@474 to: 1267@430. self addMMEFrom: 1267@430 to: 1223@392. self addMMEFrom: 1223@392 to: 1187@370. self addMMEFrom: 1187@370 to: 1172@366. self addMMEFrom: 1172@366 to: 1115@375. self addMMEFrom: 1115@375 to: 1076@397. self addMMEFrom: 1076@397 to: 1046@429. self addMMEFrom: 1046@429 to: 1027@468. self addMMEFrom: 1027@468 to: 1022@489. self addMMEFrom: 1022@489 to: 1023@545. self addMMEFrom: 1023@545 to: 1033@567. self addMMEFrom: 1033@567 to: 1061@590. self addMMEFrom: 1061@590 to: 1104@603. self addMMEFrom: 1104@603 to: 1165@605. self addMMEFrom: 1165@605 to: 1220@593. self addMMEFrom: 1220@593 to: 1258@571. self addMMEFrom: 1258@571 to: 1284@543. self addMMEFrom: 1284@543 to: 1298@509. self addMMEFrom: 1298@509 to: 1299@466. self addMMEFrom: 1299@466 to: 1276@414. self addMMEFrom: 1276@414 to: 1255@390. self addMMEFrom: 1255@390 to: 1189@340. self addMMEFrom: 1189@340 to: 1148@334. self addMMEFrom: 1148@334 to: 1094@346. self addMMEFrom: 1094@346 to: 1051@373. self addMMEFrom: 1051@373 to: 1021@412. self addMMEFrom: 1021@412 to: 1006@457. self addMMEFrom: 1006@457 to: 1002@506. self addMMEFrom: 1002@506 to: 1006@557. self addMMEFrom: 1006@557 to: 1012@581. self addMMEFrom: 1012@581 to: 1041@637. self addMMEFrom: 1041@637 to: 1070@657. self addMMEFrom: 1070@657 to: 1127@660. self addMMEFrom: 1127@660 to: 1209@644. self addMMEFrom: 1209@644 to: 1234@630. self addMMEFrom: 1234@630 to: 1284@569. self addMMEFrom: 1284@569 to: 1302@521. self addMMEFrom: 1302@521 to: 1304@466. self addMMEFrom: 1304@466 to: 1286@410. self addMMEFrom: 1286@410 to: 1247@369. self addMMEFrom: 1247@369 to: 1208@347. self addMMEFrom: 1208@347 to: 1196@342. self addMMEFrom: 1196@342 to: 1170@346. self addMMEFrom: 1170@346 to: 1151@356. self addMMEFrom: 1151@356 to: 1137@363. self addMMEFrom: 1137@363 to: 1133@366. self addMMEFrom: 1133@366 to: 1133@366. self addMMEFrom: 1133@366 to: 1135@372. self addMMEFrom: 1135@372 to: 1133@381. self addMMEFrom: 1133@381 to: 1128@393. self addMMEFrom: 1128@393 to: 1126@399. self addMMEFrom: 1126@399 to: 1125@401. self addMMEFrom: 1125@401 to: 1125@401. self addMMEFrom: 1125@401 to: 1125@400. self addMMEFrom: 1125@400 to: 1124@401. self addMMEFrom: 1124@401 to: 1124@403. self addMMEFrom: 1124@403 to: 1124@404. self addMMEFrom: 1124@404 to: 1124@405. self addMMEFrom: 1124@405 to: 1124@404. MouseButtonEvent new. MouseButtonEvent new. ' These are autogenerated contents I want to export as a test case. The strange thing is that, if I manually create the testMethod using the system browser, and paste the content in it; it works fine.
Kind Regards, Bart 2009/12/21 Eliot Miranda <[hidden email]> Hi Bart, -- imagination is more important than knowledge - Albert Einstein Logic will get you from A to B. Imagination will take you everywhere - Albert Einstein Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning. - Albert Einstein The true sign of intelligence is not knowledge but imagination. - Albert Einstein Gravitation is not responsible for people falling in love. - Albert Einstein _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
Shouldn't Parser Encoder & co just raise Error and Warning, and let
the upper level handle these (or not) ? Expert driver methods would install ad-hoc handlers actions (like inserting an error message in source controller, or opening a Debugger, or. a SyntaxErrror window, or...) Nicolas 2009/12/21 Bart Gauquie <[hidden email]>: > Hi, > > First load the latest http://www.squeaksource.com/MorphicsRecordNPlay > package. > Then for instance following fails if I evaluate it in a workspace: > MorphicReplayDemoTest compile: > 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 1037@504 to: 979@482. > self addMMEFrom: 979@482 to: 905@464. > self addMMEFrom: 905@464 to: 823@462. > self addMMEFrom: 823@462 to: 745@482. > self addMMEFrom: 745@482 to: 685@520. > self addMMEFrom: 685@520 to: 651@559. > self addMMEFrom: 651@559 to: 643@579. > self addMMEFrom: 643@579 to: 653@579. > self addMMEFrom: 653@579 to: 675@564. > self addMMEFrom: 675@564 to: 810@452. > self addMMEFrom: 810@452 to: 923@353. > self addMMEFrom: 923@353 to: 1005@287. > self addMMEFrom: 1005@287 to: 1052@257. > self addMMEFrom: 1052@257 to: 1061@252. > self addMMEFrom: 1061@252 to: 1059@259. > self addMMEFrom: 1059@259 to: 998@314. > self addMMEFrom: 998@314 to: 898@414. > self addMMEFrom: 898@414 to: 827@502. > self addMMEFrom: 827@502 to: 789@570. > self addMMEFrom: 789@570 to: 792@610. > self addMMEFrom: 792@610 to: 839@630. > self addMMEFrom: 839@630 to: 929@620. > self addMMEFrom: 929@620 to: 1039@579. > self addMMEFrom: 1039@579 to: 1086@549. > self addMMEFrom: 1086@549 to: 1158@447. > self addMMEFrom: 1158@447 to: 1147@379. > self addMMEFrom: 1147@379 to: 1066@377. > self addMMEFrom: 1066@377 to: 930@416. > self addMMEFrom: 930@416 to: 864@446. > self addMMEFrom: 864@446 to: 734@530. > self addMMEFrom: 734@530 to: 714@548. > self addMMEFrom: 714@548 to: 734@546. > self addMMEFrom: 734@546 to: 815@515. > self addMMEFrom: 815@515 to: 875@491. > self addMMEFrom: 875@491 to: 1065@407. > self addMMEFrom: 1065@407 to: 1128@361. > self addMMEFrom: 1128@361 to: 1142@343. > self addMMEFrom: 1142@343 to: 1112@340. > self addMMEFrom: 1112@340 to: 1064@349. > self addMMEFrom: 1064@349 to: 864@416. > self addMMEFrom: 864@416 to: 757@471. > self addMMEFrom: 757@471 to: 705@511. > self addMMEFrom: 705@511 to: 701@524. > self addMMEFrom: 701@524 to: 743@528. > self addMMEFrom: 743@528 to: 845@509. > self addMMEFrom: 845@509 to: 914@493. > self addMMEFrom: 914@493 to: 1101@446. > self addMMEFrom: 1101@446 to: 1154@427. > self addMMEFrom: 1154@427 to: 1163@423. > self addMMEFrom: 1163@423 to: 1156@422. > self addMMEFrom: 1156@422 to: 1129@424. > self addMMEFrom: 1129@424 to: 923@449. > self addMMEFrom: 923@449 to: 785@479. > self addMMEFrom: 785@479 to: 689@503. > self addMMEFrom: 689@503 to: 651@512. > self addMMEFrom: 651@512 to: 650@512. > self addMMEFrom: 650@512 to: 672@508. > self addMMEFrom: 672@508 to: 773@492. > self addMMEFrom: 773@492 to: 916@486. > self addMMEFrom: 916@486 to: 1066@494. > self addMMEFrom: 1066@494 to: 1175@508. > self addMMEFrom: 1175@508 to: 1229@514. > self addMMEFrom: 1229@514 to: 1232@514. > self addMMEFrom: 1232@514 to: 1142@492. > self addMMEFrom: 1142@492 to: 986@483. > self addMMEFrom: 986@483 to: 810@498. > self addMMEFrom: 810@498 to: 678@519. > self addMMEFrom: 678@519 to: 637@523. > self addMMEFrom: 637@523 to: 606@502. > self addMMEFrom: 606@502 to: 659@442. > self addMMEFrom: 659@442 to: 769@365. > self addMMEFrom: 769@365 to: 911@316. > self addMMEFrom: 911@316 to: 1052@318. > self addMMEFrom: 1052@318 to: 1129@360. > self addMMEFrom: 1129@360 to: 1153@403. > self addMMEFrom: 1153@403 to: 1127@443. > self addMMEFrom: 1127@443 to: 1015@491. > self addMMEFrom: 1015@491 to: 850@536. > self addMMEFrom: 850@536 to: 697@571. > self addMMEFrom: 697@571 to: 642@578. > self addMMEFrom: 642@578 to: 571@545. > self addMMEFrom: 571@545 to: 604@485. > self addMMEFrom: 604@485 to: 701@419. > self addMMEFrom: 701@419 to: 843@383. > self addMMEFrom: 843@383 to: 919@383. > self addMMEFrom: 919@383 to: 1095@425. > self addMMEFrom: 1095@425 to: 1126@443. > self addMMEFrom: 1126@443 to: 1102@449. > self addMMEFrom: 1102@449 to: 984@468. > self addMMEFrom: 984@468 to: 829@509. > self addMMEFrom: 829@509 to: 703@547. > self addMMEFrom: 703@547 to: 637@555. > self addMMEFrom: 637@555 to: 633@531. > self addMMEFrom: 633@531 to: 694@468. > self addMMEFrom: 694@468 to: 809@407. > self addMMEFrom: 809@407 to: 946@380. > self addMMEFrom: 946@380 to: 1011@378. > self addMMEFrom: 1011@378 to: 1119@393. > self addMMEFrom: 1119@393 to: 1110@393. > self addMMEFrom: 1110@393 to: 1010@388. > self addMMEFrom: 1010@388 to: 859@402. > self addMMEFrom: 859@402 to: 727@433. > self addMMEFrom: 727@433 to: 665@454. > self addMMEFrom: 665@454 to: 663@461. > self addMMEFrom: 663@461 to: 683@469. > self addMMEFrom: 683@469 to: 837@492. > self addMMEFrom: 837@492 to: 989@495. > self addMMEFrom: 989@495 to: 1103@476. > self addMMEFrom: 1103@476 to: 1153@433. > self addMMEFrom: 1153@433 to: 1163@404. > self addMMEFrom: 1163@404 to: 1147@307. > self addMMEFrom: 1147@307 to: 1086@294. > self addMMEFrom: 1086@294 to: 995@324. > self addMMEFrom: 995@324 to: 935@357. > self addMMEFrom: 935@357 to: 922@366. > self addMMEFrom: 922@366 to: 925@370. > self addMMEFrom: 925@370 to: 941@379. > self addMMEFrom: 941@379 to: 974@389. > self addMMEFrom: 974@389 to: 1010@399. > self addMMEFrom: 1010@399 to: 1036@408. > self addMMEFrom: 1036@408 to: 1052@414. > self addMMEFrom: 1052@414 to: 1056@416. > self addMMEFrom: 1056@416 to: 1061@418. > self addMMEFrom: 1061@418 to: 1068@419. > self addMMEFrom: 1068@419 to: 1078@418. > self addMMEFrom: 1078@418 to: 1086@414. > self addMMEFrom: 1086@414 to: 1089@411. > self addMMEFrom: 1089@411 to: 1095@404. > self addMMEFrom: 1095@404 to: 1097@404. > self addMMEFrom: 1097@404 to: 1099@406. > self addMMEFrom: 1099@406 to: 1100@407. > self addMMEFrom: 1100@407 to: 1101@408. > self addMMEFrom: 1101@408 to: 1101@409. > self addMMEFrom: 1101@409 to: 1101@410. > self addMMEFrom: 1101@410 to: 1102@411. > self addMMEFrom: 1102@411 to: 1104@412. > self addMMEFrom: 1104@412 to: 1106@411. > self addMMEFrom: 1106@411 to: 1110@409. > self addMMEFrom: 1110@409 to: 1112@408. > self addMMEFrom: 1112@408 to: 1114@407. > self addMMEFrom: 1114@407 to: 1115@408. > self addMMEFrom: 1115@408 to: 1115@408. > self addMMEFrom: 1115@408 to: 1115@407. > MouseButtonEvent new. > MouseButtonEvent new. > self addMMEFrom: 1131@401 to: 1129@403. > self addMMEFrom: 1129@403 to: 1121@408. > self addMMEFrom: 1121@408 to: 1106@416. > self addMMEFrom: 1106@416 to: 1084@426. > self addMMEFrom: 1084@426 to: 1051@443. > self addMMEFrom: 1051@443 to: 1019@470. > self addMMEFrom: 1019@470 to: 995@504. > self addMMEFrom: 995@504 to: 981@546. > self addMMEFrom: 981@546 to: 980@592. > self addMMEFrom: 980@592 to: 990@634. > self addMMEFrom: 990@634 to: 1012@665. > self addMMEFrom: 1012@665 to: 1043@680. > self addMMEFrom: 1043@680 to: 1076@677. > self addMMEFrom: 1076@677 to: 1132@658. > self addMMEFrom: 1132@658 to: 1189@626. > self addMMEFrom: 1189@626 to: 1205@606. > self addMMEFrom: 1205@606 to: 1222@543. > self addMMEFrom: 1222@543 to: 1219@504. > self addMMEFrom: 1219@504 to: 1207@464. > self addMMEFrom: 1207@464 to: 1190@425. > self addMMEFrom: 1190@425 to: 1180@409. > self addMMEFrom: 1180@409 to: 1140@387. > self addMMEFrom: 1140@387 to: 1092@397. > self addMMEFrom: 1092@397 to: 1044@424. > self addMMEFrom: 1044@424 to: 1004@464. > self addMMEFrom: 1004@464 to: 977@513. > self addMMEFrom: 977@513 to: 965@565. > self addMMEFrom: 965@565 to: 965@614. > self addMMEFrom: 965@614 to: 977@656. > self addMMEFrom: 977@656 to: 1001@689. > self addMMEFrom: 1001@689 to: 1035@709. > self addMMEFrom: 1035@709 to: 1067@714. > self addMMEFrom: 1067@714 to: 1094@710. > self addMMEFrom: 1094@710 to: 1219@673. > self addMMEFrom: 1219@673 to: 1254@635. > self addMMEFrom: 1254@635 to: 1269@594. > self addMMEFrom: 1269@594 to: 1277@552. > self addMMEFrom: 1277@552 to: 1277@530. > self addMMEFrom: 1277@530 to: 1251@459. > self addMMEFrom: 1251@459 to: 1215@418. > self addMMEFrom: 1215@418 to: 1180@389. > self addMMEFrom: 1180@389 to: 1143@377. > self addMMEFrom: 1143@377 to: 1092@379. > self addMMEFrom: 1092@379 to: 1041@397. > self addMMEFrom: 1041@397 to: 1019@410. > self addMMEFrom: 1019@410 to: 972@460. > self addMMEFrom: 972@460 to: 955@499. > self addMMEFrom: 955@499 to: 951@541. > self addMMEFrom: 951@541 to: 954@580. > self addMMEFrom: 954@580 to: 960@597. > self addMMEFrom: 960@597 to: 991@639. > self addMMEFrom: 991@639 to: 1027@657. > self addMMEFrom: 1027@657 to: 1066@666. > self addMMEFrom: 1066@666 to: 1122@665. > self addMMEFrom: 1122@665 to: 1199@651. > self addMMEFrom: 1199@651 to: 1245@625. > self addMMEFrom: 1245@625 to: 1270@596. > self addMMEFrom: 1270@596 to: 1284@565. > self addMMEFrom: 1284@565 to: 1287@528. > self addMMEFrom: 1287@528 to: 1275@486. > self addMMEFrom: 1275@486 to: 1242@445. > self addMMEFrom: 1242@445 to: 1204@412. > self addMMEFrom: 1204@412 to: 1171@390. > self addMMEFrom: 1171@390 to: 1126@383. > self addMMEFrom: 1126@383 to: 1083@394. > self addMMEFrom: 1083@394 to: 1040@420. > self addMMEFrom: 1040@420 to: 1025@438. > self addMMEFrom: 1025@438 to: 996@506. > self addMMEFrom: 996@506 to: 992@555. > self addMMEFrom: 992@555 to: 999@596. > self addMMEFrom: 999@596 to: 1015@629. > self addMMEFrom: 1015@629 to: 1027@641. > self addMMEFrom: 1027@641 to: 1068@658. > self addMMEFrom: 1068@658 to: 1115@655. > self addMMEFrom: 1115@655 to: 1184@640. > self addMMEFrom: 1184@640 to: 1234@616. > self addMMEFrom: 1234@616 to: 1266@589. > self addMMEFrom: 1266@589 to: 1290@555. > self addMMEFrom: 1290@555 to: 1301@518. > self addMMEFrom: 1301@518 to: 1296@474. > self addMMEFrom: 1296@474 to: 1267@430. > self addMMEFrom: 1267@430 to: 1223@392. > self addMMEFrom: 1223@392 to: 1187@370. > self addMMEFrom: 1187@370 to: 1172@366. > self addMMEFrom: 1172@366 to: 1115@375. > self addMMEFrom: 1115@375 to: 1076@397. > self addMMEFrom: 1076@397 to: 1046@429. > self addMMEFrom: 1046@429 to: 1027@468. > self addMMEFrom: 1027@468 to: 1022@489. > self addMMEFrom: 1022@489 to: 1023@545. > self addMMEFrom: 1023@545 to: 1033@567. > self addMMEFrom: 1033@567 to: 1061@590. > self addMMEFrom: 1061@590 to: 1104@603. > self addMMEFrom: 1104@603 to: 1165@605. > self addMMEFrom: 1165@605 to: 1220@593. > self addMMEFrom: 1220@593 to: 1258@571. > self addMMEFrom: 1258@571 to: 1284@543. > self addMMEFrom: 1284@543 to: 1298@509. > self addMMEFrom: 1298@509 to: 1299@466. > self addMMEFrom: 1299@466 to: 1276@414. > self addMMEFrom: 1276@414 to: 1255@390. > self addMMEFrom: 1255@390 to: 1189@340. > self addMMEFrom: 1189@340 to: 1148@334. > self addMMEFrom: 1148@334 to: 1094@346. > self addMMEFrom: 1094@346 to: 1051@373. > self addMMEFrom: 1051@373 to: 1021@412. > self addMMEFrom: 1021@412 to: 1006@457. > self addMMEFrom: 1006@457 to: 1002@506. > self addMMEFrom: 1002@506 to: 1006@557. > self addMMEFrom: 1006@557 to: 1012@581. > self addMMEFrom: 1012@581 to: 1041@637. > self addMMEFrom: 1041@637 to: 1070@657. > self addMMEFrom: 1070@657 to: 1127@660. > self addMMEFrom: 1127@660 to: 1209@644. > self addMMEFrom: 1209@644 to: 1234@630. > self addMMEFrom: 1234@630 to: 1284@569. > self addMMEFrom: 1284@569 to: 1302@521. > self addMMEFrom: 1302@521 to: 1304@466. > self addMMEFrom: 1304@466 to: 1286@410. > self addMMEFrom: 1286@410 to: 1247@369. > self addMMEFrom: 1247@369 to: 1208@347. > self addMMEFrom: 1208@347 to: 1196@342. > self addMMEFrom: 1196@342 to: 1170@346. > self addMMEFrom: 1170@346 to: 1151@356. > self addMMEFrom: 1151@356 to: 1137@363. > self addMMEFrom: 1137@363 to: 1133@366. > self addMMEFrom: 1133@366 to: 1133@366. > self addMMEFrom: 1133@366 to: 1135@372. > self addMMEFrom: 1135@372 to: 1133@381. > self addMMEFrom: 1133@381 to: 1128@393. > self addMMEFrom: 1128@393 to: 1126@399. > self addMMEFrom: 1126@399 to: 1125@401. > self addMMEFrom: 1125@401 to: 1125@401. > self addMMEFrom: 1125@401 to: 1125@400. > self addMMEFrom: 1125@400 to: 1124@401. > self addMMEFrom: 1124@401 to: 1124@403. > self addMMEFrom: 1124@403 to: 1124@404. > self addMMEFrom: 1124@404 to: 1124@405. > self addMMEFrom: 1124@405 to: 1124@404. > MouseButtonEvent new. > MouseButtonEvent new. > ' > > These are autogenerated contents I want to export as a test case. The > strange thing is that, if I manually create the testMethod using the system > browser, and paste the content in it; it works fine. > Kind Regards, > Bart > 2009/12/21 Eliot Miranda <[hidden email]> >> >> Hi Bart, >> I still want to take a look at this specific case because the compiler >> should produce a proper error message, not an internal error. So could you >> please package it up as a reproducible case, or email me the full string >> that fails? >> TIA >> >> 2009/12/20 Bart Gauquie <[hidden email]> >>> >>> Dear all, >>> >>> I'm developing code which generates a method content, compiles it and >>> adds it to an existing class. >>> I compile the message using #compile: message: >>> for instance: >>> MorphicReplayDemoTest compile: ' >>> testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 651@559 to: 643@579. >>> '. >>> >>> This works fine. However if the contents of the method is too long; for >>> instance: >>> if the self addMMEFrom: 1054@512 to: 1037@504. is repeated around 250 >>> times; I get following error (see stack below) >>> The strange thing is that if I manually add that method using the editor >>> and paste it, it works just fine. I even tested up to 5000 lines of code; >>> its slow, but its working. >>> Any ideas how to solve this? >>> Thanks, >>> Bart >>> >>> I'm using Pharo 1.0 rc update: 10502; using Ubuntu 9.10, using vm >>> pharo-vm-0.15.2f-linux. >>> THERE_BE_DRAGONS_HERE >>> MessageNotUnderstood: receiver of "<" is nil >>> 20 December 2009 8:17:14 pm >>> >>> VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update: >>> #10074] >>> Image: PharoCore1.0rc1 [Latest update: #10502] >>> >>> SecurityManager state: >>> Restricted: false >>> FileAccess: true >>> SocketAccess: true >>> Working Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground >>> Image >>> Trusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground >>> Image/secure >>> Untrusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 >>> Playground Image/My Squeak >>> >>> UndefinedObject(Object)>>doesNotUnderstand: #< >>> Receiver: nil >>> Arguments and temporary variables: >>> aMessage: < 0 >>> exception: MessageNotUnderstood: receiver of "<" is nil >>> resumeValue: nil >>> Receiver's instance variables: >>> nil >>> >>> EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: >>> Receiver: {an EncoderForV3PlusClosures} >>> Arguments and temporary variables: >>> literalIndex: nil >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil} >>> 'recording'->{recording}...etc... >>> nTemps: 0 >>> supered: false >>> requestor: nil >>> class: MorphicReplayDemoTest >>> selector: #testMethod >>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. >>> 482. ...etc... >>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} >>> #<->{<} #...etc... >>> litIndSet: a >>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... >>> litSet: a LiteralDictionary(size 402) >>> sourceRanges: a Dictionary(size 853) >>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: >>> 5778). ...etc... >>> addedSelectorAndMethodClassLiterals: false >>> stream: {an EncoderForV3PlusClosures} >>> position: 0 >>> rootNode: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEF...etc... >>> blockExtentsToLocals: nil >>> >>> >>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: >>> Receiver: {an EncoderForV3PlusClosures} >>> Arguments and temporary variables: >>> genSelector: #genPushLiteral: >>> args: #(nil) >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil} >>> 'recording'->{recording}...etc... >>> nTemps: 0 >>> supered: false >>> requestor: nil >>> class: MorphicReplayDemoTest >>> selector: #testMethod >>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. >>> 482. ...etc... >>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} >>> #<->{<} #...etc... >>> litIndSet: a >>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... >>> litSet: a LiteralDictionary(size 402) >>> sourceRanges: a Dictionary(size 853) >>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: >>> 5778). ...etc... >>> addedSelectorAndMethodClassLiterals: false >>> stream: {an EncoderForV3PlusClosures} >>> position: 0 >>> rootNode: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEF...etc... >>> blockExtentsToLocals: nil >>> >>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: >>> Receiver: {an EncoderForV3PlusClosures} >>> Arguments and temporary variables: >>> literalIndex: nil >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil} >>> 'recording'->{recording}...etc... >>> nTemps: 0 >>> supered: false >>> requestor: nil >>> class: MorphicReplayDemoTest >>> selector: #testMethod >>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. >>> 482. ...etc... >>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} >>> #<->{<} #...etc... >>> litIndSet: a >>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... >>> litSet: a LiteralDictionary(size 402) >>> sourceRanges: a Dictionary(size 853) >>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: >>> 5778). ...etc... >>> addedSelectorAndMethodClassLiterals: false >>> stream: {an EncoderForV3PlusClosures} >>> position: 0 >>> rootNode: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEF...etc... >>> blockExtentsToLocals: nil >>> >>> LiteralNode>>sizeCodeForValue: >>> Receiver: {397} >>> Arguments and temporary variables: >>> encoder: {an EncoderForV3PlusClosures} >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> key: 397 >>> code: -3 >>> index: nil >>> >>> [] in MessageNode>>sizeCodeForValue: >>> Receiver: {1092 @ 397} >>> Arguments and temporary variables: >>> <<error during printing> >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {1092} >>> selector: {@} >>> precedence: 2 >>> special: 0 >>> arguments: #({397}) >>> sizes: #(nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> Array(SequenceableCollection)>>collect: >>> Receiver: #({397}) >>> Arguments and temporary variables: >>> aBlock: [closure] in MessageNode>>sizeCodeForValue: >>> newCollection: #(nil) >>> index: 1 >>> indexLimiT: 1 >>> Receiver's instance variables: >>> #({397}) >>> >>> MessageNode>>sizeCodeForValue: >>> Receiver: {1092 @ 397} >>> Arguments and temporary variables: >>> <<error during printing> >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {1092} >>> selector: {@} >>> precedence: 2 >>> special: 0 >>> arguments: #({397}) >>> sizes: #(nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> [] in MessageNode>>sizeCodeForValue: >>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} >>> Arguments and temporary variables: >>> <<error during printing> >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {self} >>> selector: {addMMEFrom:to:} >>> precedence: 3 >>> special: 0 >>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) >>> sizes: #(nil nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> OrderedCollection>>collect: >>> Receiver: an OrderedCollection({1140 @ 387} {1092 @ 397}) >>> Arguments and temporary variables: >>> aBlock: [closure] in MessageNode>>sizeCodeForValue: >>> newCollection: an OrderedCollection(7) >>> index: 4 >>> Receiver's instance variables: >>> array: an Array(nil nil {1140 @ 387} {1092 @ 397} nil nil nil nil nil >>> nil) >>> firstIndex: 3 >>> lastIndex: 4 >>> >>> MessageNode>>sizeCodeForValue: >>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} >>> Arguments and temporary variables: >>> <<error during printing> >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {self} >>> selector: {addMMEFrom:to:} >>> precedence: 3 >>> special: 0 >>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) >>> sizes: #(nil nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> MessageNode(ParseNode)>>sizeCodeForEffect: >>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} >>> Arguments and temporary variables: >>> encoder: {an EncoderForV3PlusClosures} >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {self} >>> selector: {addMMEFrom:to:} >>> precedence: 3 >>> special: 0 >>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) >>> sizes: #(nil nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> MessageNode>>sizeCodeForEffect: >>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} >>> Arguments and temporary variables: >>> encoder: {an EncoderForV3PlusClosures} >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> receiver: {self} >>> selector: {addMMEFrom:to:} >>> precedence: 3 >>> special: 0 >>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) >>> sizes: #(nil nil) >>> equalNode: nil >>> caseErrorNode: nil >>> >>> BlockNode>>sizeCodeExceptLast: >>> Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEFrom: 1037 @ 504 to: 979 @ 482. >>> ...etc... >>> Arguments and temporary variables: >>> encoder: {an EncoderForV3PlusClosures} >>> codeSize: 2564 >>> i: 169 >>> statement: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} >>> iLimiT: 287 >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> arguments: #() >>> statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ >>> 504} {...etc... >>> returns: true >>> nArgsNode: nil >>> size: nil >>> remoteCopyNode: nil >>> temporaries: an OrderedCollection() >>> optimized: false >>> actualScopeIfOptimized: nil >>> blockExtent: (0 to: 2) >>> remoteTempNode: nil >>> copiedValues: nil >>> closureCreationNode: nil >>> startOfLastStatement: 11519 >>> >>> BlockNode>>sizeCodeForEvaluatedValue: >>> Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEFrom: 1037 @ 504 to: 979 @ 482. >>> ...etc... >>> Arguments and temporary variables: >>> encoder: {an EncoderForV3PlusClosures} >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> arguments: #() >>> statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ >>> 504} {...etc... >>> returns: true >>> nArgsNode: nil >>> size: nil >>> remoteCopyNode: nil >>> temporaries: an OrderedCollection() >>> optimized: false >>> actualScopeIfOptimized: nil >>> blockExtent: (0 to: 2) >>> remoteTempNode: nil >>> copiedValues: nil >>> closureCreationNode: nil >>> startOfLastStatement: 11519 >>> >>> BytecodeAgnosticMethodNode>>generate: >>> Receiver: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEFrom: 1037 @ 504 to: 9...etc... >>> Arguments and temporary variables: >>> trailer: #(0 0 0 0) >>> primErrNode: nil >>> blkSize: nil >>> nLits: nil >>> literals: nil >>> stack: nil >>> method: nil >>> locals: nil >>> lit: nil >>> Receiver's instance variables: >>> comment: nil >>> pc: nil >>> selectorOrFalse: #testMethod >>> precedence: 1 >>> arguments: #() >>> block: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMMEFrom: 1037 @ 5...etc... >>> primitive: 0 >>> encoder: {an EncoderForV3PlusClosures} >>> temporaries: #() >>> properties: an AdditionalMethodState >>> sourceText: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFr...etc... >>> locationCounter: 3 >>> localsPool: an IdentitySet() >>> >>> CompiledMethodWithNode class>>generateMethodFromNode:trailer: >>> Receiver: CompiledMethodWithNode >>> Arguments and temporary variables: >>> aMethodNode: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addM...etc... >>> bytes: #(0 0 0 0) >>> Receiver's instance variables: >>> superclass: Object >>> methodDict: a MethodDictionary(#method->a CompiledMethod(650: >>> CompiledMethodWit...etc... >>> format: 134 >>> instanceVariables: #('node' 'method') >>> organization: ('accessing' method node selector) >>> ('private' method: node:) >>> >>> subclasses: nil >>> name: #CompiledMethodWithNode >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'Compiler-Support' >>> traitComposition: nil >>> localSelectors: nil >>> >>> MorphicReplayDemoTest >>> class(Behavior)>>compile:classified:notifying:trailer:ifFail: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> code: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> category: #'as yet unclassified' >>> requestor: nil >>> bytes: #(0 0 0 0) >>> failBlock: [closure] in MorphicReplayDemoTest >>> class(ClassDescription)>>compile:...etc... >>> methodNode: testMethod >>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504. >>> self addMM...etc... >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> text: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> category: #'as yet unclassified' >>> changeStamp: 'BartGauquie 12/20/2009 20:17' >>> requestor: nil >>> logSource: true >>> methodAndNode: nil >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:withStamp:notifying: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> text: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> category: #'as yet unclassified' >>> changeStamp: 'BartGauquie 12/20/2009 20:17' >>> requestor: nil >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:notifying: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> text: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> category: #'as yet unclassified' >>> requestor: nil >>> stamp: 'BartGauquie 12/20/2009 20:17' >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> code: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> requestor: nil >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> MorphicReplayDemoTest class(Behavior)>>compile: >>> Receiver: MorphicReplayDemoTest >>> Arguments and temporary variables: >>> code: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> Receiver's instance variables: >>> superclass: AbstractReplayTestCase >>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: >>> MorphicRepla...etc... >>> format: 134 >>> instanceVariables: nil >>> organization: ('tests' testMethod) >>> >>> subclasses: nil >>> name: #MorphicReplayDemoTest >>> classPool: nil >>> sharedPools: nil >>> environment: Smalltalk >>> category: #'MorphicsRecordNPlay-Model' >>> traitComposition: nil >>> localSelectors: nil >>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a >>> Set(#testM...etc... >>> >>> ByteString>>DoIt >>> Receiver: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 1037@504 to: 979@48...etc... >>> Arguments and temporary variables: >>> >>> Receiver's instance variables: >>> 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 1037@504 to: 979@48...etc... >>> >>> Compiler>>evaluate:in:to:notifying:ifFail:logged: >>> Receiver: a Compiler >>> Arguments and temporary variables: >>> textOrStream: a ReadWriteStream 'MorphicReplayDemoTest >>> compile: self.' >>> aContext: nil >>> receiver: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom...etc... >>> aRequestor: a TextMorphEditor >>> failBlock: [closure] in [] in >>> TextMorphEditor(ParagraphEditor)>>evaluateSelecti...etc... >>> logFlag: true >>> methodNode: DoIt >>> ^ MorphicReplayDemoTest compile: self >>> method: a CompiledMethod(2378: ByteString>>DoIt) >>> value: nil >>> toLog: nil >>> itsSelection: nil >>> itsSelectionString: nil >>> Receiver's instance variables: >>> sourceStream: a ReadWriteStream 'MorphicReplayDemoTest >>> compile: self.' >>> requestor: a TextMorphEditor >>> class: ByteString >>> category: nil >>> context: nil >>> parser: a Parser >>> >>> [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> rcvr: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> ctxt: nil >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> BlockClosure>>on:do: >>> Receiver: [closure] in >>> TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> Arguments and temporary variables: >>> exception: OutOfScopeNotification >>> handlerAction: [closure] in >>> TextMorphEditor(ParagraphEditor)>>evaluateSelection...etc... >>> handlerActive: true >>> Receiver's instance variables: >>> outerContext: TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> startpc: 116 >>> numArgs: 0 >>> >>> TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> result: nil >>> rcvr: 'testMethod >>> self addMMEFrom: 1054@512 to: 1037@504. >>> self addMMEFrom: 10...etc... >>> ctxt: nil >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor(ParagraphEditor)>>doIt >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> [] in TextMorphEditor(ParagraphEditor)>>doIt: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> aBlock: [closure] in TextMorphEditor(ParagraphEditor)>>doIt: >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor(ParagraphEditor)>>doIt: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> characterStream: a WriteStream '' >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> keyEvent: [keystroke '<Cmd-d>'] >>> typeAheadStream: a WriteStream '' >>> honorCommandKeys: true >>> keyValue: 100 >>> keyChar: $d >>> char: $d >>> action: #doIt: >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor>>dispatchOnKeyEvent:with: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> keyEvent: [keystroke '<Cmd-d>'] >>> typeAheadStream: a WriteStream '' >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor(ParagraphEditor)>>keystroke: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> keyEvent: [keystroke '<Cmd-d>'] >>> typeAhead: a WriteStream '' >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> TextMorphEditor>>keystroke: >>> Receiver: a TextMorphEditor >>> Arguments and temporary variables: >>> keyEvent: [keystroke '<Cmd-d>'] >>> Receiver's instance variables: >>> model: a NewInspector >>> paragraph: a MultiNewParagraph >>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: >>> 103@32 >>> ...etc... >>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle >>> 0@0 cor...etc... >>> beginTypeInBlock: nil >>> emphasisHere: an Array(a TextFontChange font: 2) >>> initialText: a Text for 'MorphicReplayDemoTest >>> compile: self >>> ' >>> selectionShowing: false >>> otherInterval: (38 to: 38) >>> lastParentLocation: nil >>> morph: a TextMorphForEditView(3730) >>> oldInterval: nil >>> pivotBlock: nil >>> >>> [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: >>> Receiver: a TextMorphForEditView(3730) >>> Arguments and temporary variables: >>> evt: [keystroke '<Cmd-d>'] >>> Receiver's instance variables: >>> bounds: 0@0 corner: 358@34 >>> owner: a TransformMorph(942) >>> submorphs: #() >>> fullBounds: 0@0 corner: 358@34 >>> color: Color black >>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] >>> borderWidth: 0 >>> borderColor: Color black >>> textStyle: a TextStyle Bitmap DejaVu Sans 9 >>> text: a Text for 'MorphicReplayDemoTest >>> compile: self.' >>> wrapFlag: true >>> paragraph: a MultiNewParagraph >>> editor: a TextMorphEditor >>> container: nil >>> predecessor: nil >>> successor: nil >>> backgroundColor: nil >>> margins: nil >>> editHistory: a TextMorphCommandHistory >>> editView: a PluggableTextMorphPlus(2866) >>> acceptOnCR: false >>> >>> TextMorphForEditView(TextMorph)>>handleInteraction: >>> Receiver: a TextMorphForEditView(3730) >>> Arguments and temporary variables: >>> interactionBlock: [closure] in [] in >>> TextMorphForEditView(TextMorph)>>keyStroke...etc... >>> oldEditor: a TextMorphEditor >>> oldParagraph: a MultiNewParagraph >>> oldText: a Text for 'MorphicReplayDemoTest >>> compile: self.' >>> Receiver's instance variables: >>> bounds: 0@0 corner: 358@34 >>> owner: a TransformMorph(942) >>> submorphs: #() >>> fullBounds: 0@0 corner: 358@34 >>> color: Color black >>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] >>> borderWidth: 0 >>> borderColor: Color black >>> textStyle: a TextStyle Bitmap DejaVu Sans 9 >>> text: a Text for 'MorphicReplayDemoTest >>> compile: self.' >>> wrapFlag: true >>> paragraph: a MultiNewParagraph >>> editor: a TextMorphEditor >>> container: nil >>> predecessor: nil >>> successor: nil >>> backgroundColor: nil >>> margins: nil >>> editHistory: a TextMorphCommandHistory >>> editView: a PluggableTextMorphPlus(2866) >>> acceptOnCR: false >>> >>> TextMorphForEditView>>handleInteraction: >>> Receiver: a TextMorphForEditView(3730) >>> Arguments and temporary variables: >>> interActionBlock: [closure] in [] in >>> TextMorphForEditView(TextMorph)>>keyStroke...etc... >>> Receiver's instance variables: >>> bounds: 0@0 corner: 358@34 >>> owner: a TransformMorph(942) >>> submorphs: #() >>> fullBounds: 0@0 corner: 358@34 >>> color: Color black >>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] >>> borderWidth: 0 >>> borderColor: Color black >>> textStyle: a TextStyle Bitmap DejaVu Sans 9 >>> text: a Text for 'MorphicReplayDemoTest >>> compile: self.' >>> wrapFlag: true >>> paragraph: a MultiNewParagraph >>> editor: a TextMorphEditor >>> container: nil >>> predecessor: nil >>> successor: nil >>> backgroundColor: nil >>> margins: nil >>> editHistory: a TextMorphCommandHistory >>> editView: a PluggableTextMorphPlus(2866) >>> acceptOnCR: false >>> >>> >>> --- The full stack --- >>> UndefinedObject(Object)>>doesNotUnderstand: #< >>> EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: >>> >>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: >>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: >>> LiteralNode>>sizeCodeForValue: >>> [] in MessageNode>>sizeCodeForValue: >>> Array(SequenceableCollection)>>collect: >>> MessageNode>>sizeCodeForValue: >>> [] in MessageNode>>sizeCodeForValue: >>> OrderedCollection>>collect: >>> MessageNode>>sizeCodeForValue: >>> MessageNode(ParseNode)>>sizeCodeForEffect: >>> MessageNode>>sizeCodeForEffect: >>> BlockNode>>sizeCodeExceptLast: >>> BlockNode>>sizeCodeForEvaluatedValue: >>> BytecodeAgnosticMethodNode>>generate: >>> CompiledMethodWithNode class>>generateMethodFromNode:trailer: >>> MorphicReplayDemoTest >>> class(Behavior)>>compile:classified:notifying:trailer:ifFail: >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:withStamp:notifying: >>> MorphicReplayDemoTest >>> class(ClassDescription)>>compile:classified:notifying: >>> MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: >>> MorphicReplayDemoTest class(Behavior)>>compile: >>> ByteString>>DoIt >>> Compiler>>evaluate:in:to:notifying:ifFail:logged: >>> [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> BlockClosure>>on:do: >>> TextMorphEditor(ParagraphEditor)>>evaluateSelection >>> TextMorphEditor(ParagraphEditor)>>doIt >>> [] in TextMorphEditor(ParagraphEditor)>>doIt: >>> TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: >>> TextMorphEditor(ParagraphEditor)>>doIt: >>> TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: >>> TextMorphEditor>>dispatchOnKeyEvent:with: >>> TextMorphEditor(ParagraphEditor)>>keystroke: >>> TextMorphEditor>>keystroke: >>> [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: >>> TextMorphForEditView(TextMorph)>>handleInteraction: >>> TextMorphForEditView>>handleInteraction: >>> - - - - - - - - - - - - - - - >>> - - - - - - - - - - - - - - - - - - >>> [] in TextMorphForEditView(TextMorph)>>keyStroke: >>> ECToolSet class>>codeCompletionAround:textMorph:keyStroke: >>> DEVToolSet class>>codeCompletionAround:textMorph:keyStroke: >>> ToolSet class>>codeCompletionAround:textMorph:keyStroke: >>> TextMorphForEditView(TextMorph)>>keyStroke: >>> TextMorphForEditView>>keyStroke: >>> TextMorphForEditView(TextMorph)>>handleKeystroke: >>> KeyboardEvent>>sentTo: >>> TextMorphForEditView(Morph)>>handleEvent: >>> TextMorphForEditView(Morph)>>handleFocusEvent: >>> [] in HandMorph>>sendFocusEvent:to:clear: >>> [] in PasteUpMorph>>becomeActiveDuring: >>> BlockClosure>>on:do: >>> PasteUpMorph>>becomeActiveDuring: >>> HandMorph>>sendFocusEvent:to:clear: >>> HandMorph>>sendEvent:focus:clear: >>> HandMorph>>sendKeyboardEvent: >>> HandMorph>>handleEvent: >>> HandMorph>>processEvents >>> [] in WorldState>>doOneCycleNowFor: >>> Array(SequenceableCollection)>>do: >>> WorldState>>handsDo: >>> WorldState>>doOneCycleNowFor: >>> WorldState>>doOneCycleFor: >>> PasteUpMorph>>doOneCycle >>> [] in Project class>>spawnNewProcess >>> [] in BlockClosure>>newProcess >>> ----------------------------------------------------------- >>> >>> >>> _______________________________________________ >>> Pharo-project mailing list >>> [hidden email] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> >> _______________________________________________ >> Pharo-project mailing list >> [hidden email] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > > > -- > imagination is more important than knowledge - Albert Einstein > Logic will get you from A to B. Imagination will take you everywhere - > Albert Einstein > Learn from yesterday, live for today, hope for tomorrow. The important thing > is not to stop questioning. - Albert Einstein > The true sign of intelligence is not knowledge but imagination. - Albert > Einstein > Gravitation is not responsible for people falling in love. - Albert Einstein > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
In reply to this post by Bart Gauquie
This results in an MNU instead of a warning about too many literals because Encoder>>notify: does not report notifications if there is no requestor (if compilation is non-interactive). A fix would be to integrate with Colin's compiler error changes, e.g. by having Encoder hold onto its parser and defer to Parser>>notify:. In the interim an adequate fix is
!Encoder methodsFor: 'error handling' stamp: 'eem 12/22/2009 11:57'! notify: string "Put a separate notifier on top of the requestor's window"
| req | requestor == nil ifTrue:
[super notify: string] ifFalse: [req := requestor.
self release. req notify: string]. ^false! !
With this fix a notifier opens stating: "More than 256 literals referenced. You must split or otherwise simplify this method. The 257th literal is: 397 Select Proceed to continue, or close this window to cancel the operation." Find file-in attached. 2009/12/21 Bart Gauquie <[hidden email]>
_______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project Encoder-notify.st (532 bytes) Download Attachment |
tx
http://code.google.com/p/pharo/issues/detail?id=1664 Stef On Dec 23, 2009, at 7:11 PM, Eliot Miranda wrote: > This results in an MNU instead of a warning about too many literals because Encoder>>notify: does not report notifications if there is no requestor (if compilation is non-interactive). A fix would be to integrate with Colin's compiler error changes, e.g. by having Encoder hold onto its parser and defer to Parser>>notify:. In the interim an adequate fix is > > !Encoder methodsFor: 'error handling' stamp: 'eem 12/22/2009 11:57'! > notify: string > "Put a separate notifier on top of the requestor's window" > | req | > requestor == nil > ifTrue: > [super notify: string] > ifFalse: > [req := requestor. > self release. > req notify: string]. > ^false! ! > > With this fix a notifier opens stating: > "More than 256 literals referenced. > You must split or otherwise simplify this method. > The 257th literal is: 397 > > Select Proceed to continue, or close this window to cancel the operation." > > Find file-in attached. > > > 2009/12/21 Bart Gauquie <[hidden email]> > Hi, > > First load the latest http://www.squeaksource.com/MorphicsRecordNPlay package. > > Then for instance following fails if I evaluate it in a workspace: > > MorphicReplayDemoTest compile: > 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 1037@504 to: 979@482. > self addMMEFrom: 979@482 to: 905@464. > self addMMEFrom: 905@464 to: 823@462. > self addMMEFrom: 823@462 to: 745@482. > self addMMEFrom: 745@482 to: 685@520. > self addMMEFrom: 685@520 to: 651@559. > > self addMMEFrom: 651@559 to: 643@579. > self addMMEFrom: 643@579 to: 653@579. > self addMMEFrom: 653@579 to: 675@564. > self addMMEFrom: 675@564 to: 810@452. > self addMMEFrom: 810@452 to: 923@353. > self addMMEFrom: 923@353 to: 1005@287. > self addMMEFrom: 1005@287 to: 1052@257. > self addMMEFrom: 1052@257 to: 1061@252. > self addMMEFrom: 1061@252 to: 1059@259. > self addMMEFrom: 1059@259 to: 998@314. > self addMMEFrom: 998@314 to: 898@414. > self addMMEFrom: 898@414 to: 827@502. > self addMMEFrom: 827@502 to: 789@570. > self addMMEFrom: 789@570 to: 792@610. > self addMMEFrom: 792@610 to: 839@630. > self addMMEFrom: 839@630 to: 929@620. > self addMMEFrom: 929@620 to: 1039@579. > self addMMEFrom: 1039@579 to: 1086@549. > self addMMEFrom: 1086@549 to: 1158@447. > self addMMEFrom: 1158@447 to: 1147@379. > self addMMEFrom: 1147@379 to: 1066@377. > self addMMEFrom: 1066@377 to: 930@416. > self addMMEFrom: 930@416 to: 864@446. > self addMMEFrom: 864@446 to: 734@530. > self addMMEFrom: 734@530 to: 714@548. > self addMMEFrom: 714@548 to: 734@546. > self addMMEFrom: 734@546 to: 815@515. > self addMMEFrom: 815@515 to: 875@491. > self addMMEFrom: 875@491 to: 1065@407. > self addMMEFrom: 1065@407 to: 1128@361. > self addMMEFrom: 1128@361 to: 1142@343. > self addMMEFrom: 1142@343 to: 1112@340. > self addMMEFrom: 1112@340 to: 1064@349. > self addMMEFrom: 1064@349 to: 864@416. > self addMMEFrom: 864@416 to: 757@471. > self addMMEFrom: 757@471 to: 705@511. > self addMMEFrom: 705@511 to: 701@524. > self addMMEFrom: 701@524 to: 743@528. > self addMMEFrom: 743@528 to: 845@509. > self addMMEFrom: 845@509 to: 914@493. > self addMMEFrom: 914@493 to: 1101@446. > self addMMEFrom: 1101@446 to: 1154@427. > self addMMEFrom: 1154@427 to: 1163@423. > self addMMEFrom: 1163@423 to: 1156@422. > self addMMEFrom: 1156@422 to: 1129@424. > self addMMEFrom: 1129@424 to: 923@449. > self addMMEFrom: 923@449 to: 785@479. > self addMMEFrom: 785@479 to: 689@503. > self addMMEFrom: 689@503 to: 651@512. > self addMMEFrom: 651@512 to: 650@512. > self addMMEFrom: 650@512 to: 672@508. > self addMMEFrom: 672@508 to: 773@492. > self addMMEFrom: 773@492 to: 916@486. > self addMMEFrom: 916@486 to: 1066@494. > self addMMEFrom: 1066@494 to: 1175@508. > self addMMEFrom: 1175@508 to: 1229@514. > self addMMEFrom: 1229@514 to: 1232@514. > self addMMEFrom: 1232@514 to: 1142@492. > self addMMEFrom: 1142@492 to: 986@483. > self addMMEFrom: 986@483 to: 810@498. > self addMMEFrom: 810@498 to: 678@519. > self addMMEFrom: 678@519 to: 637@523. > self addMMEFrom: 637@523 to: 606@502. > self addMMEFrom: 606@502 to: 659@442. > self addMMEFrom: 659@442 to: 769@365. > self addMMEFrom: 769@365 to: 911@316. > self addMMEFrom: 911@316 to: 1052@318. > self addMMEFrom: 1052@318 to: 1129@360. > self addMMEFrom: 1129@360 to: 1153@403. > self addMMEFrom: 1153@403 to: 1127@443. > self addMMEFrom: 1127@443 to: 1015@491. > self addMMEFrom: 1015@491 to: 850@536. > self addMMEFrom: 850@536 to: 697@571. > self addMMEFrom: 697@571 to: 642@578. > self addMMEFrom: 642@578 to: 571@545. > self addMMEFrom: 571@545 to: 604@485. > self addMMEFrom: 604@485 to: 701@419. > self addMMEFrom: 701@419 to: 843@383. > self addMMEFrom: 843@383 to: 919@383. > self addMMEFrom: 919@383 to: 1095@425. > self addMMEFrom: 1095@425 to: 1126@443. > self addMMEFrom: 1126@443 to: 1102@449. > self addMMEFrom: 1102@449 to: 984@468. > self addMMEFrom: 984@468 to: 829@509. > self addMMEFrom: 829@509 to: 703@547. > self addMMEFrom: 703@547 to: 637@555. > self addMMEFrom: 637@555 to: 633@531. > self addMMEFrom: 633@531 to: 694@468. > self addMMEFrom: 694@468 to: 809@407. > self addMMEFrom: 809@407 to: 946@380. > self addMMEFrom: 946@380 to: 1011@378. > self addMMEFrom: 1011@378 to: 1119@393. > self addMMEFrom: 1119@393 to: 1110@393. > self addMMEFrom: 1110@393 to: 1010@388. > self addMMEFrom: 1010@388 to: 859@402. > self addMMEFrom: 859@402 to: 727@433. > self addMMEFrom: 727@433 to: 665@454. > self addMMEFrom: 665@454 to: 663@461. > self addMMEFrom: 663@461 to: 683@469. > self addMMEFrom: 683@469 to: 837@492. > self addMMEFrom: 837@492 to: 989@495. > self addMMEFrom: 989@495 to: 1103@476. > self addMMEFrom: 1103@476 to: 1153@433. > self addMMEFrom: 1153@433 to: 1163@404. > self addMMEFrom: 1163@404 to: 1147@307. > self addMMEFrom: 1147@307 to: 1086@294. > self addMMEFrom: 1086@294 to: 995@324. > self addMMEFrom: 995@324 to: 935@357. > self addMMEFrom: 935@357 to: 922@366. > self addMMEFrom: 922@366 to: 925@370. > self addMMEFrom: 925@370 to: 941@379. > self addMMEFrom: 941@379 to: 974@389. > self addMMEFrom: 974@389 to: 1010@399. > self addMMEFrom: 1010@399 to: 1036@408. > self addMMEFrom: 1036@408 to: 1052@414. > self addMMEFrom: 1052@414 to: 1056@416. > self addMMEFrom: 1056@416 to: 1061@418. > self addMMEFrom: 1061@418 to: 1068@419. > self addMMEFrom: 1068@419 to: 1078@418. > self addMMEFrom: 1078@418 to: 1086@414. > self addMMEFrom: 1086@414 to: 1089@411. > self addMMEFrom: 1089@411 to: 1095@404. > self addMMEFrom: 1095@404 to: 1097@404. > self addMMEFrom: 1097@404 to: 1099@406. > self addMMEFrom: 1099@406 to: 1100@407. > self addMMEFrom: 1100@407 to: 1101@408. > self addMMEFrom: 1101@408 to: 1101@409. > self addMMEFrom: 1101@409 to: 1101@410. > self addMMEFrom: 1101@410 to: 1102@411. > self addMMEFrom: 1102@411 to: 1104@412. > self addMMEFrom: 1104@412 to: 1106@411. > self addMMEFrom: 1106@411 to: 1110@409. > self addMMEFrom: 1110@409 to: 1112@408. > self addMMEFrom: 1112@408 to: 1114@407. > self addMMEFrom: 1114@407 to: 1115@408. > self addMMEFrom: 1115@408 to: 1115@408. > self addMMEFrom: 1115@408 to: 1115@407. > MouseButtonEvent new. > MouseButtonEvent new. > self addMMEFrom: 1131@401 to: 1129@403. > self addMMEFrom: 1129@403 to: 1121@408. > self addMMEFrom: 1121@408 to: 1106@416. > self addMMEFrom: 1106@416 to: 1084@426. > self addMMEFrom: 1084@426 to: 1051@443. > self addMMEFrom: 1051@443 to: 1019@470. > self addMMEFrom: 1019@470 to: 995@504. > self addMMEFrom: 995@504 to: 981@546. > self addMMEFrom: 981@546 to: 980@592. > self addMMEFrom: 980@592 to: 990@634. > self addMMEFrom: 990@634 to: 1012@665. > self addMMEFrom: 1012@665 to: 1043@680. > self addMMEFrom: 1043@680 to: 1076@677. > self addMMEFrom: 1076@677 to: 1132@658. > self addMMEFrom: 1132@658 to: 1189@626. > self addMMEFrom: 1189@626 to: 1205@606. > self addMMEFrom: 1205@606 to: 1222@543. > self addMMEFrom: 1222@543 to: 1219@504. > self addMMEFrom: 1219@504 to: 1207@464. > self addMMEFrom: 1207@464 to: 1190@425. > self addMMEFrom: 1190@425 to: 1180@409. > self addMMEFrom: 1180@409 to: 1140@387. > self addMMEFrom: 1140@387 to: 1092@397. > self addMMEFrom: 1092@397 to: 1044@424. > self addMMEFrom: 1044@424 to: 1004@464. > self addMMEFrom: 1004@464 to: 977@513. > self addMMEFrom: 977@513 to: 965@565. > self addMMEFrom: 965@565 to: 965@614. > self addMMEFrom: 965@614 to: 977@656. > self addMMEFrom: 977@656 to: 1001@689. > self addMMEFrom: 1001@689 to: 1035@709. > self addMMEFrom: 1035@709 to: 1067@714. > self addMMEFrom: 1067@714 to: 1094@710. > self addMMEFrom: 1094@710 to: 1219@673. > self addMMEFrom: 1219@673 to: 1254@635. > self addMMEFrom: 1254@635 to: 1269@594. > self addMMEFrom: 1269@594 to: 1277@552. > self addMMEFrom: 1277@552 to: 1277@530. > self addMMEFrom: 1277@530 to: 1251@459. > self addMMEFrom: 1251@459 to: 1215@418. > self addMMEFrom: 1215@418 to: 1180@389. > self addMMEFrom: 1180@389 to: 1143@377. > self addMMEFrom: 1143@377 to: 1092@379. > self addMMEFrom: 1092@379 to: 1041@397. > self addMMEFrom: 1041@397 to: 1019@410. > self addMMEFrom: 1019@410 to: 972@460. > self addMMEFrom: 972@460 to: 955@499. > self addMMEFrom: 955@499 to: 951@541. > self addMMEFrom: 951@541 to: 954@580. > self addMMEFrom: 954@580 to: 960@597. > self addMMEFrom: 960@597 to: 991@639. > self addMMEFrom: 991@639 to: 1027@657. > self addMMEFrom: 1027@657 to: 1066@666. > self addMMEFrom: 1066@666 to: 1122@665. > self addMMEFrom: 1122@665 to: 1199@651. > self addMMEFrom: 1199@651 to: 1245@625. > self addMMEFrom: 1245@625 to: 1270@596. > self addMMEFrom: 1270@596 to: 1284@565. > self addMMEFrom: 1284@565 to: 1287@528. > self addMMEFrom: 1287@528 to: 1275@486. > self addMMEFrom: 1275@486 to: 1242@445. > self addMMEFrom: 1242@445 to: 1204@412. > self addMMEFrom: 1204@412 to: 1171@390. > self addMMEFrom: 1171@390 to: 1126@383. > self addMMEFrom: 1126@383 to: 1083@394. > self addMMEFrom: 1083@394 to: 1040@420. > self addMMEFrom: 1040@420 to: 1025@438. > self addMMEFrom: 1025@438 to: 996@506. > self addMMEFrom: 996@506 to: 992@555. > self addMMEFrom: 992@555 to: 999@596. > self addMMEFrom: 999@596 to: 1015@629. > self addMMEFrom: 1015@629 to: 1027@641. > self addMMEFrom: 1027@641 to: 1068@658. > self addMMEFrom: 1068@658 to: 1115@655. > self addMMEFrom: 1115@655 to: 1184@640. > self addMMEFrom: 1184@640 to: 1234@616. > self addMMEFrom: 1234@616 to: 1266@589. > self addMMEFrom: 1266@589 to: 1290@555. > self addMMEFrom: 1290@555 to: 1301@518. > self addMMEFrom: 1301@518 to: 1296@474. > self addMMEFrom: 1296@474 to: 1267@430. > self addMMEFrom: 1267@430 to: 1223@392. > self addMMEFrom: 1223@392 to: 1187@370. > self addMMEFrom: 1187@370 to: 1172@366. > self addMMEFrom: 1172@366 to: 1115@375. > self addMMEFrom: 1115@375 to: 1076@397. > self addMMEFrom: 1076@397 to: 1046@429. > self addMMEFrom: 1046@429 to: 1027@468. > self addMMEFrom: 1027@468 to: 1022@489. > self addMMEFrom: 1022@489 to: 1023@545. > self addMMEFrom: 1023@545 to: 1033@567. > self addMMEFrom: 1033@567 to: 1061@590. > self addMMEFrom: 1061@590 to: 1104@603. > self addMMEFrom: 1104@603 to: 1165@605. > self addMMEFrom: 1165@605 to: 1220@593. > self addMMEFrom: 1220@593 to: 1258@571. > self addMMEFrom: 1258@571 to: 1284@543. > self addMMEFrom: 1284@543 to: 1298@509. > self addMMEFrom: 1298@509 to: 1299@466. > self addMMEFrom: 1299@466 to: 1276@414. > self addMMEFrom: 1276@414 to: 1255@390. > self addMMEFrom: 1255@390 to: 1189@340. > self addMMEFrom: 1189@340 to: 1148@334. > self addMMEFrom: 1148@334 to: 1094@346. > self addMMEFrom: 1094@346 to: 1051@373. > self addMMEFrom: 1051@373 to: 1021@412. > self addMMEFrom: 1021@412 to: 1006@457. > self addMMEFrom: 1006@457 to: 1002@506. > self addMMEFrom: 1002@506 to: 1006@557. > self addMMEFrom: 1006@557 to: 1012@581. > self addMMEFrom: 1012@581 to: 1041@637. > self addMMEFrom: 1041@637 to: 1070@657. > self addMMEFrom: 1070@657 to: 1127@660. > self addMMEFrom: 1127@660 to: 1209@644. > self addMMEFrom: 1209@644 to: 1234@630. > self addMMEFrom: 1234@630 to: 1284@569. > self addMMEFrom: 1284@569 to: 1302@521. > self addMMEFrom: 1302@521 to: 1304@466. > self addMMEFrom: 1304@466 to: 1286@410. > self addMMEFrom: 1286@410 to: 1247@369. > self addMMEFrom: 1247@369 to: 1208@347. > self addMMEFrom: 1208@347 to: 1196@342. > self addMMEFrom: 1196@342 to: 1170@346. > self addMMEFrom: 1170@346 to: 1151@356. > self addMMEFrom: 1151@356 to: 1137@363. > self addMMEFrom: 1137@363 to: 1133@366. > self addMMEFrom: 1133@366 to: 1133@366. > self addMMEFrom: 1133@366 to: 1135@372. > self addMMEFrom: 1135@372 to: 1133@381. > self addMMEFrom: 1133@381 to: 1128@393. > self addMMEFrom: 1128@393 to: 1126@399. > self addMMEFrom: 1126@399 to: 1125@401. > self addMMEFrom: 1125@401 to: 1125@401. > self addMMEFrom: 1125@401 to: 1125@400. > self addMMEFrom: 1125@400 to: 1124@401. > self addMMEFrom: 1124@401 to: 1124@403. > self addMMEFrom: 1124@403 to: 1124@404. > self addMMEFrom: 1124@404 to: 1124@405. > self addMMEFrom: 1124@405 to: 1124@404. > MouseButtonEvent new. > MouseButtonEvent new. > ' > > These are autogenerated contents I want to export as a test case. The strange thing is that, if I manually create the testMethod using the system browser, and paste the content in it; it works fine. > > Kind Regards, > > Bart > > 2009/12/21 Eliot Miranda <[hidden email]> > > Hi Bart, > > I still want to take a look at this specific case because the compiler should produce a proper error message, not an internal error. So could you please package it up as a reproducible case, or email me the full string that fails? > > TIA > > > 2009/12/20 Bart Gauquie <[hidden email]> > Dear all, > > I'm developing code which generates a method content, compiles it and adds it to an existing class. > I compile the message using #compile: message: > for instance: > > MorphicReplayDemoTest compile: ' > testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 651@559 to: 643@579. > '. > > This works fine. However if the contents of the method is too long; for instance: > if the self addMMEFrom: 1054@512 to: 1037@504. is repeated around 250 times; I get following error (see stack below) > > The strange thing is that if I manually add that method using the editor and paste it, it works just fine. I even tested up to 5000 lines of code; its slow, but its working. > > Any ideas how to solve this? > > Thanks, > > Bart > > I'm using Pharo 1.0 rc update: 10502; using Ubuntu 9.10, using vm pharo-vm-0.15.2f-linux. > > THERE_BE_DRAGONS_HERE > MessageNotUnderstood: receiver of "<" is nil > 20 December 2009 8:17:14 pm > > VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update: #10074] > Image: PharoCore1.0rc1 [Latest update: #10502] > > SecurityManager state: > Restricted: false > FileAccess: true > SocketAccess: true > Working Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image > Trusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image/secure > Untrusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground Image/My Squeak > > UndefinedObject(Object)>>doesNotUnderstand: #< > Receiver: nil > Arguments and temporary variables: > aMessage: < 0 > exception: MessageNotUnderstood: receiver of "<" is nil > resumeValue: nil > Receiver's instance variables: > nil > > EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: > Receiver: {an EncoderForV3PlusClosures} > Arguments and temporary variables: > literalIndex: nil > Receiver's instance variables: > comment: nil > pc: nil > scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... > nTemps: 0 > supered: false > requestor: nil > class: MorphicReplayDemoTest > selector: #testMethod > literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... > selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... > litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... > litSet: a LiteralDictionary(size 402) > sourceRanges: a Dictionary(size 853) > globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... > addedSelectorAndMethodClassLiterals: false > stream: {an EncoderForV3PlusClosures} > position: 0 > rootNode: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEF...etc... > blockExtentsToLocals: nil > > EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: > Receiver: {an EncoderForV3PlusClosures} > Arguments and temporary variables: > genSelector: #genPushLiteral: > args: #(nil) > Receiver's instance variables: > comment: nil > pc: nil > scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... > nTemps: 0 > supered: false > requestor: nil > class: MorphicReplayDemoTest > selector: #testMethod > literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... > selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... > litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... > litSet: a LiteralDictionary(size 402) > sourceRanges: a Dictionary(size 853) > globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... > addedSelectorAndMethodClassLiterals: false > stream: {an EncoderForV3PlusClosures} > position: 0 > rootNode: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEF...etc... > blockExtentsToLocals: nil > > EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: > Receiver: {an EncoderForV3PlusClosures} > Arguments and temporary variables: > literalIndex: nil > Receiver's instance variables: > comment: nil > pc: nil > scopeTable: a Dictionary('false'->{false} 'nil'->{nil} 'recording'->{recording}...etc... > nTemps: 0 > supered: false > requestor: nil > class: MorphicReplayDemoTest > selector: #testMethod > literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979. 482. ...etc... > selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//} #<->{<} #...etc... > litIndSet: a Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc... > litSet: a LiteralDictionary(size 402) > sourceRanges: a Dictionary(size 853) > globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to: 5778). ...etc... > addedSelectorAndMethodClassLiterals: false > stream: {an EncoderForV3PlusClosures} > position: 0 > rootNode: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEF...etc... > blockExtentsToLocals: nil > > LiteralNode>>sizeCodeForValue: > Receiver: {397} > Arguments and temporary variables: > encoder: {an EncoderForV3PlusClosures} > Receiver's instance variables: > comment: nil > pc: nil > key: 397 > code: -3 > index: nil > > [] in MessageNode>>sizeCodeForValue: > Receiver: {1092 @ 397} > Arguments and temporary variables: > <<error during printing> > Receiver's instance variables: > comment: nil > pc: nil > receiver: {1092} > selector: {@} > precedence: 2 > special: 0 > arguments: #({397}) > sizes: #(nil) > equalNode: nil > caseErrorNode: nil > > Array(SequenceableCollection)>>collect: > Receiver: #({397}) > Arguments and temporary variables: > aBlock: [closure] in MessageNode>>sizeCodeForValue: > newCollection: #(nil) > index: 1 > indexLimiT: 1 > Receiver's instance variables: > #({397}) > > MessageNode>>sizeCodeForValue: > Receiver: {1092 @ 397} > Arguments and temporary variables: > <<error during printing> > Receiver's instance variables: > comment: nil > pc: nil > receiver: {1092} > selector: {@} > precedence: 2 > special: 0 > arguments: #({397}) > sizes: #(nil) > equalNode: nil > caseErrorNode: nil > > [] in MessageNode>>sizeCodeForValue: > Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} > Arguments and temporary variables: > <<error during printing> > Receiver's instance variables: > comment: nil > pc: nil > receiver: {self} > selector: {addMMEFrom:to:} > precedence: 3 > special: 0 > arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) > sizes: #(nil nil) > equalNode: nil > caseErrorNode: nil > > OrderedCollection>>collect: > Receiver: an OrderedCollection({1140 @ 387} {1092 @ 397}) > Arguments and temporary variables: > aBlock: [closure] in MessageNode>>sizeCodeForValue: > newCollection: an OrderedCollection(7) > index: 4 > Receiver's instance variables: > array: an Array(nil nil {1140 @ 387} {1092 @ 397} nil nil nil nil nil nil) > firstIndex: 3 > lastIndex: 4 > > MessageNode>>sizeCodeForValue: > Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} > Arguments and temporary variables: > <<error during printing> > Receiver's instance variables: > comment: nil > pc: nil > receiver: {self} > selector: {addMMEFrom:to:} > precedence: 3 > special: 0 > arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) > sizes: #(nil nil) > equalNode: nil > caseErrorNode: nil > > MessageNode(ParseNode)>>sizeCodeForEffect: > Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} > Arguments and temporary variables: > encoder: {an EncoderForV3PlusClosures} > Receiver's instance variables: > comment: nil > pc: nil > receiver: {self} > selector: {addMMEFrom:to:} > precedence: 3 > special: 0 > arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) > sizes: #(nil nil) > equalNode: nil > caseErrorNode: nil > > MessageNode>>sizeCodeForEffect: > Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} > Arguments and temporary variables: > encoder: {an EncoderForV3PlusClosures} > Receiver's instance variables: > comment: nil > pc: nil > receiver: {self} > selector: {addMMEFrom:to:} > precedence: 3 > special: 0 > arguments: an OrderedCollection({1140 @ 387} {1092 @ 397}) > sizes: #(nil nil) > equalNode: nil > caseErrorNode: nil > > BlockNode>>sizeCodeExceptLast: > Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEFrom: 1037 @ 504 to: 979 @ 482. > ...etc... > Arguments and temporary variables: > encoder: {an EncoderForV3PlusClosures} > codeSize: 2564 > i: 169 > statement: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397} > iLimiT: 287 > Receiver's instance variables: > comment: nil > pc: nil > arguments: #() > statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ 504} {...etc... > returns: true > nArgsNode: nil > size: nil > remoteCopyNode: nil > temporaries: an OrderedCollection() > optimized: false > actualScopeIfOptimized: nil > blockExtent: (0 to: 2) > remoteTempNode: nil > copiedValues: nil > closureCreationNode: nil > startOfLastStatement: 11519 > > BlockNode>>sizeCodeForEvaluatedValue: > Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEFrom: 1037 @ 504 to: 979 @ 482. > ...etc... > Arguments and temporary variables: > encoder: {an EncoderForV3PlusClosures} > Receiver's instance variables: > comment: nil > pc: nil > arguments: #() > statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @ 504} {...etc... > returns: true > nArgsNode: nil > size: nil > remoteCopyNode: nil > temporaries: an OrderedCollection() > optimized: false > actualScopeIfOptimized: nil > blockExtent: (0 to: 2) > remoteTempNode: nil > copiedValues: nil > closureCreationNode: nil > startOfLastStatement: 11519 > > BytecodeAgnosticMethodNode>>generate: > Receiver: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEFrom: 1037 @ 504 to: 9...etc... > Arguments and temporary variables: > trailer: #(0 0 0 0) > primErrNode: nil > blkSize: nil > nLits: nil > literals: nil > stack: nil > method: nil > locals: nil > lit: nil > Receiver's instance variables: > comment: nil > pc: nil > selectorOrFalse: #testMethod > precedence: 1 > arguments: #() > block: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMMEFrom: 1037 @ 5...etc... > primitive: 0 > encoder: {an EncoderForV3PlusClosures} > temporaries: #() > properties: an AdditionalMethodState > sourceText: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFr...etc... > locationCounter: 3 > localsPool: an IdentitySet() > > CompiledMethodWithNode class>>generateMethodFromNode:trailer: > Receiver: CompiledMethodWithNode > Arguments and temporary variables: > aMethodNode: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addM...etc... > bytes: #(0 0 0 0) > Receiver's instance variables: > superclass: Object > methodDict: a MethodDictionary(#method->a CompiledMethod(650: CompiledMethodWit...etc... > format: 134 > instanceVariables: #('node' 'method') > organization: ('accessing' method node selector) > ('private' method: node:) > > subclasses: nil > name: #CompiledMethodWithNode > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'Compiler-Support' > traitComposition: nil > localSelectors: nil > > MorphicReplayDemoTest class(Behavior)>>compile:classified:notifying:trailer:ifFail: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > code: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > category: #'as yet unclassified' > requestor: nil > bytes: #(0 0 0 0) > failBlock: [closure] in MorphicReplayDemoTest class(ClassDescription)>>compile:...etc... > methodNode: testMethod > self addMMEFrom: 1054 @ 512 to: 1037 @ 504. > self addMM...etc... > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > text: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > category: #'as yet unclassified' > changeStamp: 'BartGauquie 12/20/2009 20:17' > requestor: nil > logSource: true > methodAndNode: nil > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > text: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > category: #'as yet unclassified' > changeStamp: 'BartGauquie 12/20/2009 20:17' > requestor: nil > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:notifying: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > text: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > category: #'as yet unclassified' > requestor: nil > stamp: 'BartGauquie 12/20/2009 20:17' > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > code: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > requestor: nil > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > MorphicReplayDemoTest class(Behavior)>>compile: > Receiver: MorphicReplayDemoTest > Arguments and temporary variables: > code: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > Receiver's instance variables: > superclass: AbstractReplayTestCase > methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191: MorphicRepla...etc... > format: 134 > instanceVariables: nil > organization: ('tests' testMethod) > > subclasses: nil > name: #MorphicReplayDemoTest > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'MorphicsRecordNPlay-Model' > traitComposition: nil > localSelectors: nil > history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a Set(#testM...etc... > > ByteString>>DoIt > Receiver: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 1037@504 to: 979@48...etc... > Arguments and temporary variables: > > Receiver's instance variables: > 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 1037@504 to: 979@48...etc... > > Compiler>>evaluate:in:to:notifying:ifFail:logged: > Receiver: a Compiler > Arguments and temporary variables: > textOrStream: a ReadWriteStream 'MorphicReplayDemoTest > compile: self.' > aContext: nil > receiver: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom...etc... > aRequestor: a TextMorphEditor > failBlock: [closure] in [] in TextMorphEditor(ParagraphEditor)>>evaluateSelecti...etc... > logFlag: true > methodNode: DoIt > ^ MorphicReplayDemoTest compile: self > method: a CompiledMethod(2378: ByteString>>DoIt) > value: nil > toLog: nil > itsSelection: nil > itsSelectionString: nil > Receiver's instance variables: > sourceStream: a ReadWriteStream 'MorphicReplayDemoTest > compile: self.' > requestor: a TextMorphEditor > class: ByteString > category: nil > context: nil > parser: a Parser > > [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection > Receiver: a TextMorphEditor > Arguments and temporary variables: > rcvr: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > ctxt: nil > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > BlockClosure>>on:do: > Receiver: [closure] in TextMorphEditor(ParagraphEditor)>>evaluateSelection > Arguments and temporary variables: > exception: OutOfScopeNotification > handlerAction: [closure] in TextMorphEditor(ParagraphEditor)>>evaluateSelection...etc... > handlerActive: true > Receiver's instance variables: > outerContext: TextMorphEditor(ParagraphEditor)>>evaluateSelection > startpc: 116 > numArgs: 0 > > TextMorphEditor(ParagraphEditor)>>evaluateSelection > Receiver: a TextMorphEditor > Arguments and temporary variables: > result: nil > rcvr: 'testMethod > self addMMEFrom: 1054@512 to: 1037@504. > self addMMEFrom: 10...etc... > ctxt: nil > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor(ParagraphEditor)>>doIt > Receiver: a TextMorphEditor > Arguments and temporary variables: > > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > [] in TextMorphEditor(ParagraphEditor)>>doIt: > Receiver: a TextMorphEditor > Arguments and temporary variables: > > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: > Receiver: a TextMorphEditor > Arguments and temporary variables: > aBlock: [closure] in TextMorphEditor(ParagraphEditor)>>doIt: > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor(ParagraphEditor)>>doIt: > Receiver: a TextMorphEditor > Arguments and temporary variables: > characterStream: a WriteStream '' > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: > Receiver: a TextMorphEditor > Arguments and temporary variables: > keyEvent: [keystroke '<Cmd-d>'] > typeAheadStream: a WriteStream '' > honorCommandKeys: true > keyValue: 100 > keyChar: $d > char: $d > action: #doIt: > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor>>dispatchOnKeyEvent:with: > Receiver: a TextMorphEditor > Arguments and temporary variables: > keyEvent: [keystroke '<Cmd-d>'] > typeAheadStream: a WriteStream '' > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor(ParagraphEditor)>>keystroke: > Receiver: a TextMorphEditor > Arguments and temporary variables: > keyEvent: [keystroke '<Cmd-d>'] > typeAhead: a WriteStream '' > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > TextMorphEditor>>keystroke: > Receiver: a TextMorphEditor > Arguments and temporary variables: > keyEvent: [keystroke '<Cmd-d>'] > Receiver's instance variables: > model: a NewInspector > paragraph: a MultiNewParagraph > startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner: 103@32 > ...etc... > stopBlock: a CharacterBlock with index 1 and character $M and rectangle 0@0 cor...etc... > beginTypeInBlock: nil > emphasisHere: an Array(a TextFontChange font: 2) > initialText: a Text for 'MorphicReplayDemoTest > compile: self > ' > selectionShowing: false > otherInterval: (38 to: 38) > lastParentLocation: nil > morph: a TextMorphForEditView(3730) > oldInterval: nil > pivotBlock: nil > > [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: > Receiver: a TextMorphForEditView(3730) > Arguments and temporary variables: > evt: [keystroke '<Cmd-d>'] > Receiver's instance variables: > bounds: 0@0 corner: 358@34 > owner: a TransformMorph(942) > submorphs: #() > fullBounds: 0@0 corner: 358@34 > color: Color black > extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] > borderWidth: 0 > borderColor: Color black > textStyle: a TextStyle Bitmap DejaVu Sans 9 > text: a Text for 'MorphicReplayDemoTest > compile: self.' > wrapFlag: true > paragraph: a MultiNewParagraph > editor: a TextMorphEditor > container: nil > predecessor: nil > successor: nil > backgroundColor: nil > margins: nil > editHistory: a TextMorphCommandHistory > editView: a PluggableTextMorphPlus(2866) > acceptOnCR: false > > TextMorphForEditView(TextMorph)>>handleInteraction: > Receiver: a TextMorphForEditView(3730) > Arguments and temporary variables: > interactionBlock: [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke...etc... > oldEditor: a TextMorphEditor > oldParagraph: a MultiNewParagraph > oldText: a Text for 'MorphicReplayDemoTest > compile: self.' > Receiver's instance variables: > bounds: 0@0 corner: 358@34 > owner: a TransformMorph(942) > submorphs: #() > fullBounds: 0@0 corner: 358@34 > color: Color black > extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] > borderWidth: 0 > borderColor: Color black > textStyle: a TextStyle Bitmap DejaVu Sans 9 > text: a Text for 'MorphicReplayDemoTest > compile: self.' > wrapFlag: true > paragraph: a MultiNewParagraph > editor: a TextMorphEditor > container: nil > predecessor: nil > successor: nil > backgroundColor: nil > margins: nil > editHistory: a TextMorphCommandHistory > editView: a PluggableTextMorphPlus(2866) > acceptOnCR: false > > TextMorphForEditView>>handleInteraction: > Receiver: a TextMorphForEditView(3730) > Arguments and temporary variables: > interActionBlock: [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke...etc... > Receiver's instance variables: > bounds: 0@0 corner: 358@34 > owner: a TransformMorph(942) > submorphs: #() > fullBounds: 0@0 corner: 358@34 > color: Color black > extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)] > borderWidth: 0 > borderColor: Color black > textStyle: a TextStyle Bitmap DejaVu Sans 9 > text: a Text for 'MorphicReplayDemoTest > compile: self.' > wrapFlag: true > paragraph: a MultiNewParagraph > editor: a TextMorphEditor > container: nil > predecessor: nil > successor: nil > backgroundColor: nil > margins: nil > editHistory: a TextMorphCommandHistory > editView: a PluggableTextMorphPlus(2866) > acceptOnCR: false > > > --- The full stack --- > UndefinedObject(Object)>>doesNotUnderstand: #< > EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral: > EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments: > EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral: > LiteralNode>>sizeCodeForValue: > [] in MessageNode>>sizeCodeForValue: > Array(SequenceableCollection)>>collect: > MessageNode>>sizeCodeForValue: > [] in MessageNode>>sizeCodeForValue: > OrderedCollection>>collect: > MessageNode>>sizeCodeForValue: > MessageNode(ParseNode)>>sizeCodeForEffect: > MessageNode>>sizeCodeForEffect: > BlockNode>>sizeCodeExceptLast: > BlockNode>>sizeCodeForEvaluatedValue: > BytecodeAgnosticMethodNode>>generate: > CompiledMethodWithNode class>>generateMethodFromNode:trailer: > MorphicReplayDemoTest class(Behavior)>>compile:classified:notifying:trailer:ifFail: > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying:logSource: > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:withStamp:notifying: > MorphicReplayDemoTest class(ClassDescription)>>compile:classified:notifying: > MorphicReplayDemoTest class(ClassDescription)>>compile:notifying: > MorphicReplayDemoTest class(Behavior)>>compile: > ByteString>>DoIt > Compiler>>evaluate:in:to:notifying:ifFail:logged: > [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection > BlockClosure>>on:do: > TextMorphEditor(ParagraphEditor)>>evaluateSelection > TextMorphEditor(ParagraphEditor)>>doIt > [] in TextMorphEditor(ParagraphEditor)>>doIt: > TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround: > TextMorphEditor(ParagraphEditor)>>doIt: > TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with: > TextMorphEditor>>dispatchOnKeyEvent:with: > TextMorphEditor(ParagraphEditor)>>keystroke: > TextMorphEditor>>keystroke: > [] in [] in TextMorphForEditView(TextMorph)>>keyStroke: > TextMorphForEditView(TextMorph)>>handleInteraction: > TextMorphForEditView>>handleInteraction: > - - - - - - - - - - - - - - - > - - - - - - - - - - - - - - - - - - > [] in TextMorphForEditView(TextMorph)>>keyStroke: > ECToolSet class>>codeCompletionAround:textMorph:keyStroke: > DEVToolSet class>>codeCompletionAround:textMorph:keyStroke: > ToolSet class>>codeCompletionAround:textMorph:keyStroke: > TextMorphForEditView(TextMorph)>>keyStroke: > TextMorphForEditView>>keyStroke: > TextMorphForEditView(TextMorph)>>handleKeystroke: > KeyboardEvent>>sentTo: > TextMorphForEditView(Morph)>>handleEvent: > TextMorphForEditView(Morph)>>handleFocusEvent: > [] in HandMorph>>sendFocusEvent:to:clear: > [] in PasteUpMorph>>becomeActiveDuring: > BlockClosure>>on:do: > PasteUpMorph>>becomeActiveDuring: > HandMorph>>sendFocusEvent:to:clear: > HandMorph>>sendEvent:focus:clear: > HandMorph>>sendKeyboardEvent: > HandMorph>>handleEvent: > HandMorph>>processEvents > [] in WorldState>>doOneCycleNowFor: > Array(SequenceableCollection)>>do: > WorldState>>handsDo: > WorldState>>doOneCycleNowFor: > WorldState>>doOneCycleFor: > PasteUpMorph>>doOneCycle > [] in Project class>>spawnNewProcess > [] in BlockClosure>>newProcess > ----------------------------------------------------------- > > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > > > -- > imagination is more important than knowledge - Albert Einstein > Logic will get you from A to B. Imagination will take you everywhere - Albert Einstein > Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning. - Albert Einstein > The true sign of intelligence is not knowledge but imagination. - Albert Einstein > Gravitation is not responsible for people falling in love. - Albert Einstein > > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > <Encoder-notify.st>_______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [hidden email] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
Free forum by Nabble | Edit this page |