Hi Damien:
This is because the class to patch, SMInstallationRegistry isn't in the image.
Seems that SMInstallationRegistry is downloaded by the SM update process (from 2.0 to 2.1) but I don't know very well this process of update (I meant I don't know were is SMInstallationRegistry and from were is downloaded).
Then, the easy way to patch is:
1) Start the SM upgrading. 2) When you get the DNU error, start the debugger and go to the wrong method and replace Smalltalk logChange by SmalltalkImage current logChange. 3) Hit Proceed and is done.
HTH gsa.
2006/3/23, Damien Cassou damien.cassou@laposte.net:
Germán Arduino a écrit :
As neither responded, I'm attaching a .cs that solves the problem.
I can't file-in your .cs. I'm running a 3.9a-7015, opened the 'file list' tool and try to filein the file. I get the following :
UndefinedObject(Object)>>doesNotUnderstand: #methodsFor:stamp: Receiver: nil Arguments and temporary variables: aMessage: methodsFor: 'installation' stamp: 'gsa 3/15/2006 11:20' Receiver's instance variables: nil
UndefinedObject>>DoIt Receiver: nil Arguments and temporary variables:
Receiver's instance variables:
nil
Compiler>>evaluate:in:to:notifying:ifFail:logged: Receiver: a Compiler Arguments and temporary variables: textOrStream: 'SMInstallationRegistry methodsFor: ''installation'' stamp: ''gsa...etc... aContext: nil receiver: nil aRequestor: nil failBlock: [] in Compiler class>>evaluate:for:notifying:logged: {[^ nil]} logFlag: false methodNode: DoIt ^ SMInstallationRegistry methodsFor: 'installation' stamp: 'g...etc... method: a CompiledMethod (2342) value: nil Receiver's instance variables: sourceStream: a ReadStream 'SMInstallationRegistry methodsFor: ''installation''...etc... requestor: nil class: UndefinedObject category: nil context: nil parserClass: Parser
Compiler class>>evaluate:for:notifying:logged: Receiver: Compiler Arguments and temporary variables: textOrString: 'SMInstallationRegistry methodsFor: ''installation'' stamp: ''gsa...etc... anObject: nil aController: nil logFlag: false Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#compileNoPattern:in:context:notifying:ifFail:->...etc... format: 142 traitComposition: {} localSelectors: nil instanceVariables: #('sourceStream' 'requestor' 'class' 'category' 'context' 'p...etc... organization: ('error handling' notify: notify:at:) ('public access' compile:in...etc... subclasses: nil name: #Compiler classPool: a Dictionary() sharedPools: nil environment: a SystemDictionary(lots of globals) category: nil
--- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #methodsFor:stamp: UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: Compiler class>>evaluate:for:notifying:logged:
Compiler class>>evaluate:for:logged: Compiler class>>evaluate:logged: [] in MultiByteFileStream(PositionableStream)>>fileInAnnouncing: {[val := (self peekFor: $!) ifTrue: [(Compiler evaluate: self nextChunk l...]} BlockContext>>on:do: [] in MultiByteFileStream(PositionableStream)>>fileInAnnouncing: {[:bar | [self atEnd] whileFalse: [bar value: self position. self skipS...]} [] in ProgressInitiationException>>defaultMorphicAction {[result := workBlock value: progress]} BlockContext>>ensure: ProgressInitiationException>>defaultMorphicAction ProgressInitiationException>>defaultAction UndefinedObject>>handleSignal: MethodContext(ContextPart)>>handleSignal: ProgressInitiationException(Exception)>>signal ProgressInitiationException>>display:at:from:to:during: ProgressInitiationException class>>display:at:from:to:during: ByteString(String)>>displayProgressAt:from:to:during: MultiByteFileStream(PositionableStream)>>fileInAnnouncing: MultiByteFileStream(FileStream)>>fileIn MultiByteFileStream>>fileIn FileStream class>>fileIn: SimpleServiceEntry>>performServiceFor: PluggableButtonMorph>>performAction [] in PluggableButtonMorph>>mouseUp: {[:m | (m containsPoint: evt cursorPoint) ifTrue: [m performAction]]} Array(SequenceableCollection)>>do: PluggableButtonMorph>>mouseUp: PluggableButtonMorph(Morph)>>handleMouseUp: MouseButtonEvent>>sentTo: PluggableButtonMorph(Morph)>>handleEvent: PluggableButtonMorph(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. ActiveEvent := anEvent. result := focusHolder han...]} [] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]} BlockContext>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} ...etc...
-- Damien Cassou