Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
December 2009
- 96 participants
- 2069 messages
Re: [Pharo-project] Issue 1634: Object allSubInstances slooooow
by Eliot Miranda
On Mon, Dec 21, 2009 at 7:18 AM, Stan Shepherd
<stan.shepherd414(a)gmail.com>wrote:
>
>
> Eliot Miranda-2 wrote:
> >
> >
> > Sorry Sam :) I had to be blunt. I knew you'd understand :)
> >
> >
>
> No worries, it made me laugh.
>
> I do have a question out of it though. Is there a conceivable situation
> where you would want Object class to have specific behaviour? If so, as
> Object class carries the role of backstop case where other classes don't
> define a method, is there any acceptable way to treat Object class
> differently?
>
In general I don't think so. I think it is wrong to assume Object is the
root. Squeak currently assumes ProtoObject is the root. In VisualWorks
there is a special method rootsOfTheWorld which answers the roots.
Smalltalk allows one to create classes that don't inherit form anything
else and that is very useful for creating encapsulators. Special casing
Object or ProtoObject will break these uses.
However, if you were to package up some application in which you knew there
would never exist subclasses other than Object, and the performance of
allSubInstances was important you would go right ahead and apply that patch.
So not in the base, but in a specific app, sure.
best
Eliot
> ...Stan
> --
> View this message in context:
> http://n2.nabble.com/Issue-1634-Object-allSubInstances-slooooow-tp4189848p4…
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 21, 2009
Re: [Pharo-project] Long method can not be compiled using #compile: aString
by Eliot Miranda
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 <bart.gauquie(a)gmail.com>
> 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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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@0cor...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
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 21, 2009
[Pharo-project] Update to current in one go?
by Stan Shepherd
--
View this message in context: http://n2.nabble.com/Update-to-current-in-one-go-tp4199609p4199609.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Dec. 21, 2009
Re: [Pharo-project] SUnit
by Stéphane Ducasse
Thanks julian. I think that this is nice way to look at it.
Defining another one would be good - the only important point is that we could load it and
it can transparently replace SUnit.
BTW I do not know what is the status of the recent SUnit changes made by Nial
I know that at ESUG they published a squeak version so it would be good to start there.
Stef
> On Mon, Dec 21, 2009 at 8:06 AM, Adrian Kuhn <akuhn(a)iam.unibe.ch> wrote:
>> One thing we do not know is how many folks are out there that depend on
>> internal representation of SUnit. I talked to some folks and identified two
>> requirements, first that legacy tests should keep running and second that
>> contributions to other sunit forks should keep being mergeable. The first
>> seems feasible, the second sounds like it boils down to not cleaning
>> anything :)
>
> Well, the second may require working *with* SUnit maintainers on other
> platforms. :) I guess I don't know exactly what you define as
> "internal representation" but from Seaside's point of view it is
> absolutely essential that unit tests be runnable the same way on all
> platforms - it's the cornerstone of portability. The fact that we
> can't write lint rules that work on all platforms is already sad
> enough.
>
> So if you're going to do anything that breaks compatibility between
> platforms, please rename it and make sure both are loadable in the
> same system (and we, at least, won't be able to use it).
>
> It would be really nice to have *one* SUnit that worked everywhere
> with only minor platform-dependent pieces (like Seaside) where
> necessary. This would be much more sustainable than the forked
> situation we have currently, but that's a whole different battle.
> Although now I've said it, why not just start from scratch? There's
> not a lot of code there... implement something that works the way you
> want, build it using Grease/Slime so we can port it easily to
> everywhere else, and that's something Seaside could use (assuming it
> was compellingly better). And suddenly we'd have a test framework that
> *did* run everywhere with a common code base.
>
> my 2c,
>
> Julian
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 21, 2009
Re: [Pharo-project] SUnit
by Stéphane Ducasse
Yeap
this is what I called a strong core :)
Stef
>> identified two requirements
>
> I would add another one: if necessary keep your additions simple.
> As of today SUnit is a simple framework everybody is able to understand
> and therefore able to use.
>
> Thx
> T.
>
>
>
>
> --
> GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
> Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 21, 2009
Re: [Pharo-project] SUnit
by Julian Fitzell
On Mon, Dec 21, 2009 at 8:06 AM, Adrian Kuhn <akuhn(a)iam.unibe.ch> wrote:
> One thing we do not know is how many folks are out there that depend on
> Â internal representation of SUnit. I talked to some folks and identified two
> Â requirements, first that legacy tests should keep running and second that
> Â contributions to other sunit forks should keep being mergeable. The first
> Â seems feasible, the second sounds like it boils down to not cleaning
> Â anything :)
Well, the second may require working *with* SUnit maintainers on other
platforms. :) I guess I don't know exactly what you define as
"internal representation" but from Seaside's point of view it is
absolutely essential that unit tests be runnable the same way on all
platforms - it's the cornerstone of portability. The fact that we
can't write lint rules that work on all platforms is already sad
enough.
So if you're going to do anything that breaks compatibility between
platforms, please rename it and make sure both are loadable in the
same system (and we, at least, won't be able to use it).
It would be really nice to have *one* SUnit that worked everywhere
with only minor platform-dependent pieces (like Seaside) where
necessary. This would be much more sustainable than the forked
situation we have currently, but that's a whole different battle.
Although now I've said it, why not just start from scratch? There's
not a lot of code there... implement something that works the way you
want, build it using Grease/Slime so we can port it easily to
everywhere else, and that's something Seaside could use (assuming it
was compellingly better). And suddenly we'd have a test framework that
*did* run everywhere with a common code base.
my 2c,
Julian
Dec. 21, 2009
[Pharo-project] SUnit
by Torsten Bergmann
>identified two requirements
I would add another one: if necessary keep your additions simple.
As of today SUnit is a simple framework everybody is able to understand
and therefore able to use.
Thx
T.
--
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
Dec. 21, 2009
Re: [Pharo-project] SUnit
by Stéphane Ducasse
Hi adrian
I like the idea of cleaning. Now here is what I would like
- get the same API (I think that sharing code amongst smalltalk is a too large constraint but
having the same API is important)
- integrate key features of extensions so that SUNIT and SUNITExtended is cooler.
> Niko and me are thinking about doing some work on SUnit.
>
> Background is that we are working on Phexample, which extends SUnit with test
> that expand on one another [1]. We got test dependencies working with the
> current SUnit, but had to do some quick ugly hacks. So we thought about
> cleaning the internals SUnit up, and then include test dependencies in the
> core.
>
> Things we would possible change (we will certainly identify more as we clean
> up SUnit...)
>
> - store test resources in a dynamic variable rather than a static one
for this one I would not rely on dynamic variables. Keep it for later.
And you will have to really argue. Static scoping is nice.
> - refactor the assert: protocol to a trait, such that they can be used in
> setup and teardown of test resources as well (actually I already did that,
> you can find a version on my squeaksource account)
:) Easy I'm biaised :)
> - apply the fixes to test resources in Niall's slide deck that Lukas showed us
Pleaseeeeeeeee.
I would really like to also
- check what keith did on his Sunit extensions
- have expected failures
- have the possibility to know whether a test was red or green when it was saved and
now when I run it, is it my fault or what is just before like that
> - add expectations matchers as used in behavior-driven testing
Please not keep this separated or in another package.
I do not like this
"bla be something" kind of violation of law of demeter
> - break testcase into two classes, and to run the test and one to store the
> result (no more #cleanUpInstanceVariables hack to avoid memory leaks)
what would be the impact on existing subclasses?
> - add test dependencies to test results, such that one test can extend on the
> return value of another test
I originally did not like the idea but I can be convinced easily :)
I think that if it can help other without getting in our way then this is cool.
> - fix expected failures such that they are a first-class result (no more
> #shouldPass with O(n^2) or worse behavior)
>
> So you see, the idea is twofold: first to clean up what is there, and second
> to add test dependencies as a new feature. For those that dont know test
> dependencies. They had first been proposed by Markus Gälli based on an
> analysis of all Squeak tests years ago. He found that most tests cover a
> superset of another test's coverage set. A prototype in Java as been
> implemented later by Lea Hänsenberger and me. We published a case study at
> XP 2008, which lead to PHP folks to include test dependencies in the latest
> PHPUnit. The idea of explicit test dependencies is to shift the burden of
> isolating test cases from the developers to the framework. You avoid
> duplicate test code and you get less red test cases per failure. Please
> refer to Niko's blog post for more details [2].
>
> We got some more ideas (such as API baseline testing, search in test results,
> etc...) but they will not likely make it into a first clean up.
Yes clean up first!
> One thing we do not know is how many folks are out there that depend on
> internal representation of SUnit. I talked to some folks and identified two
> requirements, first that legacy tests should keep running and second that
> contributions to other sunit forks should keep being mergeable. The first
> seems feasible, the second sounds like it boils down to not cleaning
> anything :)
Merging does not mean that this is done automatically.
I think that having a good testing framework is important.
Now good does not mean that it has a lot of not that useful features.
I suggest the following
- clean and get a strong core
- make sure that all the tests still run
- get a set of extensions that people can load
> What do you think?
I'm interested :) but people will have to discuss your proposal :)
Stef
>
> cheers,
> AA
>
> [1]: http://www.squeaksource.com/phexample.html
> [2]: http://smalltalkthoughts.blogspot.com/2009/11/phexample-because-examples-ex…
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 21, 2009
Re: [Pharo-project] was "Re: About projects with Metacello"
by Stéphane Ducasse
On Dec 21, 2009, at 3:12 PM, Damien Cassou wrote:
> On Sun, Dec 20, 2009 at 8:32 PM, <csrabak(a)bol.com.br> wrote:
>> Is there a reason we keep both O2 and OB in parallel? Can't we
>> just get the best parts of one of the solutions and consider the
>> other as the "trunk" or mainstream for Pharo?
>
> Pharo must have the notion of Packages.
I'm working on it
have a look at RPackage in PharoTaskForces
I took into account the feedback I got from lukas and now the tests are green again
so I should be able to continue and start to work on the integration inside the system
but if someone wants to help or read the code....
> This is a prerequisite of a
> good package browser. Unless we have that, O2 will be slow and won't
> be the default.
>
> --
> Damien Cassou
> http://damiencassou.seasidehosting.st
>
> "Lambdas are relegated to relative obscurity until Java makes them
> popular by not having them." James Iry
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 21, 2009
Re: [Pharo-project] did you check in 1.1 how the old browser now support the creation of new method cat
by Stéphane Ducasse
sure no problem. Lukas.
I sent the mail because this is an important point.
I think that we should also understand what is a good amount of time between two releases.
On Dec 21, 2009, at 12:20 PM, Lukas Renggli wrote:
>> Lukas, is there a particular reason why you want/need your stuff to
>> work also with 1.1?
>
> The initial trigger for this discussion was Stef asking me to use
> #chooseOrRequestFrom: for creating protocols in OB. This method was a
> recently added to morphic in Pharo 1.1 and is used in the old ST-80
> browser to create new method protocols with one click. I would love to
> add it to OB, but since this requires Pharo 1.1 I cannot.
>
>> I don't think it makes sense to adapt and fix the external packages
>> that are in Pharo (of which you maintain a few) as long as PharoCore
>> is in alpha state.
>
> I do not complain, I completely agree with the Pharo development
> process. It is great what you are doing.
>
> I was telling Stef that I cannot take advantage of the cool new
> dialogs right now, but only when there is a release candidate for
> Pharo 1.1. Also I was hoping that I could use Helvetia directly in
> Pharo 1.1, maybe together with a proposal for making the compiler
> tool-chain easier to plug-in. However since Helvetia depends on RB and
> OB that would mean that I had to fork these two projects. Something I
> cannot do right now.
>
> Lukas
>
> --
> Lukas Renggli
> http://www.lukas-renggli.ch
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 21, 2009