[Q] Instance-Specific Behavior (Possible bug)
stephane ducasse (home)
ducasse at iam.unibe.ch
Tue May 14 06:16:31 UTC 2002
I did not tried in Squeak but you can be interested by the following
article
Evaluating Message Passing Control in Smalltalk
http://www.iam.unibe.ch/~ducasse/WebPages/Publications.html#RefereedArticleinInternationalJournal
On Tuesday, May 14, 2002, at 04:45 AM, Blaine Buxton wrote:
> Hello all,
> I was reading Kent Beck's "Guide To Better Smalltalk" and he has an
> article on Instance-specific behavior in it. In my endivors to get
> re-acquinted with Smalltalk, I remember doing similiar stuff while
> debugging windows. Anyway, it looked like a fun little thing to do. SO, I
> typed in the following in a workspace:
>
> | class |
> class:=Behavior new.
> class superclass: Object methodDictionary: MethodDictionary new format:
> Object format.
> class compile: 'dodo ^''ya ya'''.
> inst:=class new.
> inst perform: #dodo
>
> If I inspect this, I get the following walkback:
> MessageNotUnderstood:
> compile:notifying:trailer:ifFail:elseSetSelectorAndNode:
> 13 May 2002 9:25:45 pm
>
> VM: Win32 - Squeak3.2gamma of 12 January 2002 [latest update: #4858]
> Image: Squeak3.2gamma [latest update: #4857]
>
> Behavior(Object)>>doesNotUnderstand:
> Receiver: a descendent of Object
> Arguments and temporary variables:
> aMessage: a Message with selector:
> #compile:notifying:trailer:ifFail:elseSetSel...etc...
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary()
> format: 2
>
> Behavior>>compile:notifying:
> Receiver: a descendent of Object
> Arguments and temporary variables:
> code: 'dodo ^''ya ya'''
> requestor: nil
> method: nil
> selector: nil
> methodNode: nil
> sel: nil
> parseNode: nil
> f: nil
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary()
> format: 2
>
> Behavior>>compile:
> Receiver: a descendent of Object
> Arguments and temporary variables:
> code: 'dodo ^''ya ya'''
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary()
> format: 2
>
> UndefinedObject>>DoIt
> Receiver: nil
> Arguments and temporary variables:
> class: a descendent of Object
> Receiver's instance variables:
> nil
> --- The rest of the stack ---
> Compiler>>evaluate:in:to:notifying:ifFail:
>
> Is this the correct behavior? (no pun intended). Anyway, so I looked for
> implementors of: #compile:notifying:trailer:ifFail:elseSetSelectorAndNode:
> . And I got a sole implementor at ClassDescription. So, I replaced
> Behavior with ClassDescription and voila it works! But, wait...take out
> the #perform: and do inspect-it on the code so it returns the inst
> variable. Now, in the inspector, type in the code: 'self perform: #dodo'
> and print-It. Now, I get a walkback with the following details:
>
> MessageNotUnderstood: classPool
> 13 May 2002 9:32:56 pm
>
> VM: Win32 - Squeak3.2gamma of 12 January 2002 [latest update: #4858]
> Image: Squeak3.2gamma [latest update: #4857]
>
> ClassDescription(Object)>>doesNotUnderstand:
> Receiver: a subclass of Object
> Arguments and temporary variables:
> aMessage: a Message with selector: #classPool and arguments: #()
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary(#dodo->a CompiledMethod (2207) )
> format: 2
> instanceVariables: nil
> organization: ('as yet unclassified' dodo)
>
>
> FakeClassPool class>>adopt:
> Receiver: FakeClassPool
> Arguments and temporary variables:
> classOrNil: a subclass of Object
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary()
> format: 2
> instanceVariables: nil
> organization: ('as yet unclassified')
>
> subclasses: nil
> name: #FakeClassPool
> classPool: nil
> sharedPools: nil
> environment: nil
> category: nil
>
> TextMorphEditor(ParagraphEditor)>>evaluateSelection
> Receiver: a TextMorphEditor
> Arguments and temporary variables:
> result: nil
> rcvr: nil
> ctxt: nil
> ex: nil
> Receiver's instance variables:
> model: an Inspector
> view: nil
> sensor: an EventSensor
> lastActivityTime: nil
> redButtonMenu: nil
> redButtonMessages: nil
> scrollBar: 0 at 0 corner: 0 at 0
> marker: 0 at 0 corner: 0 at 0
> savedArea: nil
> menuBar: 0 at 0 corner: 0 at 0
> savedMenuBarArea: nil
> paragraph: a NewParagraph
> startBlock: a CharacterBlock with index 1 and character $s
> and rectangle 0 at 0 co...etc...
> stopBlock: a CharacterBlock with index 20 and rectangle 114 at 0
> corner: 114 at 14
> i...etc...
> beginTypeInBlock: nil
> emphasisHere: #(a TextFontChange font: 1)
> initialText: a Text for 'self perform: #dodo'
> selectionShowing: false
> otherInterval: (1 to: 0)
> morph: a TextMorphForEditView(2968)
> oldInterval: nil
> pivotBlock: nil
>
> [] in PluggableTextMorph>>printIt
> Arguments and temporary variables:
> result: nil
> oldEditor: a TextMorphEditor
>
> --- The rest of the stack ---
> TextMorphForEditView(TextMorph)>>handleEdit:
>
> Now, I do implementors on the classPool method and I get Class and some
> other classes to be implementors. I change my example from
> ClassDescription to Class and everything works beautifully! Now, I hate
> to be long winded to get to my question, but is this the way it is
> supposed to work? I thought behavior handles the format, methods,
> compiling, and superclasses. Very minimal. Anyway, it seems
> ClassDescription and Class are more than I want. Did I just find some
> bugs? I created a TempBehavior class and implemented classPool (simply
> returned nil) and compile:etc method (I actually used the
> ClassDescription implmentation and removed the code that added it to the
> changes file). This seemed to make the inst work in the inspector and
> everything seemed to work. Do we need to put these methods up in Behavior
> or at least abstract implementations?
>
> It seems to me that at any rate, we would want the inspector to be able
> handle any instances of Behavior and not just Class instances. I'm just
> asking to make sure I'm not doing something wrong.
>
> FYI, The code was taken pretty much from Kent's book and modified to fit
> Squeak.
>
> I tried the example in Dolphin too and got a different set of errors.
>
>
> Thanks for your time,
> Blaine Buxton
>
>
> _________________________________________________________________
> MSN Photos is the easiest way to share and print your photos:
> http://photos.msn.com/support/worldwide.aspx
>
>
More information about the Squeak-dev
mailing list
|