PrimitiveFailed: primitive #elementsForwardIdentityTo: in Array failed

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

PrimitiveFailed: primitive #elementsForwardIdentityTo: in Array failed

hernanmd
Hi

I don't know if this was reported. Apparently there is a problem when migrating a large number of instances, I have aprox. 270,000 instances from which I simply pulled up an ivar in their class to a higher superclass, and a PrimitiveFailed raised.

It can be reproduced by installing Territorial in Pharo 5.0 with Spur VM 5.0 from 4 May 2016 in Windows 8.1 (this is the standard image installed using wget command line in msys).

Gofer it
    smalltalkhubUser: 'hernan' project: 'Territorial';
    configuration;
    loadDevelopment.
TCityOrganization addOpenGeoCode

Then manually install Territorial-HernanMoralesDurand.163 from Monticello. Backwards (installing .163, populating, then .166) also reproduces the issue.

Is there a fix for this?

--- The full stack ---
Array(Object)>>primitiveFailed:
Array(Object)>>primitiveFailed
Array>>elementsForwardIdentityTo:
TerritorialCity class(ClassDescription)>>updateInstances:from:isMeta:
TerritorialCity class(ClassDescription)>>updateInstancesFrom:
PharoClassInstaller>>updateClass:to:
[ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ].
old elementsForwardIdentityTo: new.
" Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: "
" If we don't clean up this garbage, a second update would revive them with a wrong layout! "
" (newClass rather than oldClass, since they are now both newClass) "
Smalltalk garbageCollect ] in PharoClassInstaller>>migrateClasses:to:using:
BlockClosure>>ensure:
BlockClosure>>valueUnpreemptively
PharoClassInstaller>>migrateClasses:to:using:
SlotClassBuilder>>migrateClasses:
SlotClassBuilder>>apply:
SlotClassBuilder>>build
PharoClassInstaller class(AbstractClassInstaller class)>>make:
[ PharoClassInstaller
    make: [ :builder |
        builder
            superclass: superClass;
            name: name;
            layoutClass: (ObjectLayout layoutForType: type);
            slots: self instanceVariables;
            sharedVariables: self classVariables;
            sharedPools: self sharedPoolsString;
            classSlots: self classInstanceVariables;
            traitComposition: self traitCompositionCompiled;
            classTraitComposition: self classTraitCompositionCompiled;
            comment: comment stamp: commentStamp;
            category: category;
            environment: superClass environment ] ] in MCClassDefinition>>createClass
BlockClosure>>on:do:
MCClassDefinition>>createClass
MCClassDefinition>>load
MCClassDefinition(MCDefinition)>>addMethodAdditionTo:
[ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>>basicLoadDefinitions
[ :each |
| newLabel |
"Special handling for first and last element"
(count = 0
    or: [ count + 1 = size
            or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
    ifTrue: [ bar current: count.
        oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
            ifFalse: [ bar label: newLabel.
                oldLabel := newLabel ].
        lastUpdate := Time millisecondClockValue ].
aBlock value: each.
count := count + 1 ] in [ :bar |
labelBlock := aStringOrBlock isString
    ifTrue: [ bar label: aStringOrBlock.
        [ :dummyItem | aStringOrBlock ] ]
    ifFalse: [ aStringOrBlock ].
self
    do: [ :each |
        | newLabel |
        "Special handling for first and last element"
        (count = 0
            or: [ count + 1 = size
                    or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
            ifTrue: [ bar current: count.
                oldLabel
                    = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
                    ifFalse: [ bar label: newLabel.
                        oldLabel := newLabel ].
                lastUpdate := Time millisecondClockValue ].
        aBlock value: each.
        count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection>>do:
[ :bar |
labelBlock := aStringOrBlock isString
    ifTrue: [ bar label: aStringOrBlock.
        [ :dummyItem | aStringOrBlock ] ]
    ifFalse: [ aStringOrBlock ].
self
    do: [ :each |
        | newLabel |
        "Special handling for first and last element"
        (count = 0
            or: [ count + 1 = size
                    or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
            ifTrue: [ bar current: count.
                oldLabel
                    = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
                    ifFalse: [ bar label: newLabel.
                        oldLabel := newLabel ].
                lastUpdate := Time millisecondClockValue ].
        aBlock value: each.
        count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
BlockClosure>>cull:
[ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
[ p psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during:
BlockClosure>>ensure:
CurrentJob(DynamicVariable)>>value:during:
CurrentJob class(DynamicVariable class)>>value:during:
[ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
BlockClosure>>ensure:
Job>>run
MorphicUIManager(UIManager)>>displayProgress:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection(Collection)>>do:displayingProgress:
MCPackageLoader>>basicLoadDefinitions
[ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
BlockClosure>>on:do:
 - - - - - - - - - - - - - - - 
            - - - - - - - - - - - - - - - - - -
[ aBlock
    on: InMidstOfFileinNotification
    do: [ :notification | notification resume: true ] ] in MCPackageLoader>>handleLoadErrorsDuring:
BlockClosure>>on:do:
MCPackageLoader>>handleLoadErrorsDuring:
[ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
BlockClosure>>ensure:
MCPackageLoader>>basicLoad
[ self basicLoad ] in MCPackageLoader>>loadWithNameLike:
BlockClosure>>ensure:
MCPackageLoader>>useChangeSetNamed:during:
MCPackageLoader>>useNewChangeSetNamedLike:during:
MCPackageLoader>>loadWithNameLike:
MCThreeWayMerger(MCMerger)>>loadWithNameLike:
MCVersionMerger>>mergeWithNameLike:
MCVersionMerger class>>mergeVersion:
MCVersion>>merge
MCFileRepositoryInspector(MCVersionInspector)>>merge
MCFileRepositoryInspector>>merge
MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled:
PluggableButtonMorph>>performAction:
[ :m |
(m containsPoint: evt cursorPoint)
    ifTrue: [ m enabled
            ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph>>mouseUp:
Array(SequenceableCollection)>>do:
PluggableButtonMorph>>mouseUp:
PluggableButtonMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableButtonMorph(Morph)>>handleEvent:
PluggableButtonMorph(Morph)>>handleFocusEvent:
[ ActiveHand := self.
ActiveEvent := anEvent.
result := focusHolder
    handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
BlockClosure>>on:do:
WorldMorph(PasteUpMorph)>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[ :h |
ActiveHand := h.
h processEvents.
ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycle
[ [ World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
[ self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------



Hernán

Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] PrimitiveFailed: primitive #elementsForwardIdentityTo: in Array failed

Henrik Sperre Johansen
Yes, you need a new VM built from Cog sources after June, hopefully a newer can be promoted to stable soon...

https://pharo.fogbugz.com/f/cases/18711/Cannot-commit-a-special-character-into-Monticello

Cheers,
Henry



> On 21 Sep 2016, at 7:19 , Hernán Morales Durand <[hidden email]> wrote:
>
> Hi
>
> I don't know if this was reported. Apparently there is a problem when migrating a large number of instances, I have aprox. 270,000 instances from which I simply pulled up an ivar in their class to a higher superclass, and a PrimitiveFailed raised.
>
> It can be reproduced by installing Territorial in Pharo 5.0 with Spur VM 5.0 from 4 May 2016 in Windows 8.1 (this is the standard image installed using wget command line in msys).
>
> Gofer it
>     smalltalkhubUser: 'hernan' project: 'Territorial';
>     configuration;
>     loadDevelopment.
> TCityOrganization addOpenGeoCode
>
> Then manually install Territorial-HernanMoralesDurand.163 from Monticello. Backwards (installing .163, populating, then .166) also reproduces the issue.
>
> Is there a fix for this?
>
> --- The full stack ---
> Array(Object)>>primitiveFailed:
> Array(Object)>>primitiveFailed
> Array>>elementsForwardIdentityTo:
> TerritorialCity class(ClassDescription)>>updateInstances:from:isMeta:
> TerritorialCity class(ClassDescription)>>updateInstancesFrom:
> PharoClassInstaller>>updateClass:to:
> [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ].
> old elementsForwardIdentityTo: new.
> " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: "
> " If we don't clean up this garbage, a second update would revive them with a wrong layout! "
> " (newClass rather than oldClass, since they are now both newClass) "
> Smalltalk garbageCollect ] in PharoClassInstaller>>migrateClasses:to:using:
> BlockClosure>>ensure:
> BlockClosure>>valueUnpreemptively
> PharoClassInstaller>>migrateClasses:to:using:
> SlotClassBuilder>>migrateClasses:
> SlotClassBuilder>>apply:
> SlotClassBuilder>>build
> PharoClassInstaller class(AbstractClassInstaller class)>>make:
> [ PharoClassInstaller
>     make: [ :builder |
>         builder
>             superclass: superClass;
>             name: name;
>             layoutClass: (ObjectLayout layoutForType: type);
>             slots: self instanceVariables;
>             sharedVariables: self classVariables;
>             sharedPools: self sharedPoolsString;
>             classSlots: self classInstanceVariables;
>             traitComposition: self traitCompositionCompiled;
>             classTraitComposition: self classTraitCompositionCompiled;
>             comment: comment stamp: commentStamp;
>             category: category;
>             environment: superClass environment ] ] in MCClassDefinition>>createClass
> BlockClosure>>on:do:
> MCClassDefinition>>createClass
> MCClassDefinition>>load
> MCClassDefinition(MCDefinition)>>addMethodAdditionTo:
> [ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>>basicLoadDefinitions
> [ :each |
> | newLabel |
> "Special handling for first and last element"
> (count = 0
>     or: [ count + 1 = size
>             or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>     ifTrue: [ bar current: count.
>         oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>             ifFalse: [ bar label: newLabel.
>                 oldLabel := newLabel ].
>         lastUpdate := Time millisecondClockValue ].
> aBlock value: each.
> count := count + 1 ] in [ :bar |
> labelBlock := aStringOrBlock isString
>     ifTrue: [ bar label: aStringOrBlock.
>         [ :dummyItem | aStringOrBlock ] ]
>     ifFalse: [ aStringOrBlock ].
> self
>     do: [ :each |
>         | newLabel |
>         "Special handling for first and last element"
>         (count = 0
>             or: [ count + 1 = size
>                     or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>             ifTrue: [ bar current: count.
>                 oldLabel
>                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>                     ifFalse: [ bar label: newLabel.
>                         oldLabel := newLabel ].
>                 lastUpdate := Time millisecondClockValue ].
>         aBlock value: each.
>         count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
> OrderedCollection>>do:
> [ :bar |
> labelBlock := aStringOrBlock isString
>     ifTrue: [ bar label: aStringOrBlock.
>         [ :dummyItem | aStringOrBlock ] ]
>     ifFalse: [ aStringOrBlock ].
> self
>     do: [ :each |
>         | newLabel |
>         "Special handling for first and last element"
>         (count = 0
>             or: [ count + 1 = size
>                     or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>             ifTrue: [ bar current: count.
>                 oldLabel
>                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>                     ifFalse: [ bar label: newLabel.
>                         oldLabel := newLabel ].
>                 lastUpdate := Time millisecondClockValue ].
>         aBlock value: each.
>         count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
> BlockClosure>>cull:
> [ ^ block cull: self ] in [ self prepareForRunning.
> CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> [ p psValueAt: index put: anObject.
> aBlock value ] in CurrentJob(DynamicVariable)>>value:during:
> BlockClosure>>ensure:
> CurrentJob(DynamicVariable)>>value:during:
> CurrentJob class(DynamicVariable class)>>value:during:
> [ self prepareForRunning.
> CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> BlockClosure>>ensure:
> Job>>run
> MorphicUIManager(UIManager)>>displayProgress:from:to:during:
> ByteString(String)>>displayProgressFrom:to:during:
> OrderedCollection(Collection)>>do:displayingProgress:every:
> OrderedCollection(Collection)>>do:displayingProgress:
> MCPackageLoader>>basicLoadDefinitions
> [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
> BlockClosure>>on:do:
>  - - - - - - - - - - - - - - -
>             - - - - - - - - - - - - - - - - - -
> [ aBlock
>     on: InMidstOfFileinNotification
>     do: [ :notification | notification resume: true ] ] in MCPackageLoader>>handleLoadErrorsDuring:
> BlockClosure>>on:do:
> MCPackageLoader>>handleLoadErrorsDuring:
> [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
> BlockClosure>>ensure:
> MCPackageLoader>>basicLoad
> [ self basicLoad ] in MCPackageLoader>>loadWithNameLike:
> BlockClosure>>ensure:
> MCPackageLoader>>useChangeSetNamed:during:
> MCPackageLoader>>useNewChangeSetNamedLike:during:
> MCPackageLoader>>loadWithNameLike:
> MCThreeWayMerger(MCMerger)>>loadWithNameLike:
> MCVersionMerger>>mergeWithNameLike:
> MCVersionMerger class>>mergeVersion:
> MCVersion>>merge
> MCFileRepositoryInspector(MCVersionInspector)>>merge
> MCFileRepositoryInspector>>merge
> MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled:
> PluggableButtonMorph>>performAction:
> [ :m |
> (m containsPoint: evt cursorPoint)
>     ifTrue: [ m enabled
>             ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph>>mouseUp:
> Array(SequenceableCollection)>>do:
> PluggableButtonMorph>>mouseUp:
> PluggableButtonMorph(Morph)>>handleMouseUp:
> MouseButtonEvent>>sentTo:
> PluggableButtonMorph(Morph)>>handleEvent:
> PluggableButtonMorph(Morph)>>handleFocusEvent:
> [ ActiveHand := self.
> ActiveEvent := anEvent.
> result := focusHolder
>     handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
> BlockClosure>>on:do:
> WorldMorph(PasteUpMorph)>>becomeActiveDuring:
> HandMorph>>sendFocusEvent:to:clear:
> HandMorph>>sendEvent:focus:clear:
> HandMorph>>sendMouseEvent:
> HandMorph>>handleEvent:
> HandMorph>>processEvents
> [ :h |
> ActiveHand := h.
> h processEvents.
> ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
> Array(SequenceableCollection)>>do:
> WorldState>>handsDo:
> WorldState>>doOneCycleNowFor:
> WorldState>>doOneCycleFor:
> WorldMorph>>doOneCycle
> [ [ World doOneCycle.
> Processor yield.
> false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
> [ self value.
> Processor terminateActive ] in BlockClosure>>newProcess
> -------------------------------------------------------------------------------
>
>
>
> Hernán
>


signature.asc (859 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] PrimitiveFailed: primitive #elementsForwardIdentityTo: in Array failed

hernanmd
Thank you Henrik,
I will wait to a new stable version as the problem does not affect too much my workflow.
Cheers,

Hernán


2016-09-21 6:03 GMT-03:00 Henrik Johansen <[hidden email]>:
 
Yes, you need a new VM built from Cog sources after June, hopefully a newer can be promoted to stable soon...

https://pharo.fogbugz.com/f/cases/18711/Cannot-commit-a-special-character-into-Monticello

Cheers,
Henry



> On 21 Sep 2016, at 7:19 , Hernán Morales Durand <[hidden email]> wrote:
>
> Hi
>
> I don't know if this was reported. Apparently there is a problem when migrating a large number of instances, I have aprox. 270,000 instances from which I simply pulled up an ivar in their class to a higher superclass, and a PrimitiveFailed raised.
>
> It can be reproduced by installing Territorial in Pharo 5.0 with Spur VM 5.0 from 4 May 2016 in Windows 8.1 (this is the standard image installed using wget command line in msys).
>
> Gofer it
>     smalltalkhubUser: 'hernan' project: 'Territorial';
>     configuration;
>     loadDevelopment.
> TCityOrganization addOpenGeoCode
>
> Then manually install Territorial-HernanMoralesDurand.163 from Monticello. Backwards (installing .163, populating, then .166) also reproduces the issue.
>
> Is there a fix for this?
>
> --- The full stack ---
> Array(Object)>>primitiveFailed:
> Array(Object)>>primitiveFailed
> Array>>elementsForwardIdentityTo:
> TerritorialCity class(ClassDescription)>>updateInstances:from:isMeta:
> TerritorialCity class(ClassDescription)>>updateInstancesFrom:
> PharoClassInstaller>>updateClass:to:
> [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ].
> old elementsForwardIdentityTo: new.
> " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: "
> " If we don't clean up this garbage, a second update would revive them with a wrong layout! "
> " (newClass rather than oldClass, since they are now both newClass) "
> Smalltalk garbageCollect ] in PharoClassInstaller>>migrateClasses:to:using:
> BlockClosure>>ensure:
> BlockClosure>>valueUnpreemptively
> PharoClassInstaller>>migrateClasses:to:using:
> SlotClassBuilder>>migrateClasses:
> SlotClassBuilder>>apply:
> SlotClassBuilder>>build
> PharoClassInstaller class(AbstractClassInstaller class)>>make:
> [ PharoClassInstaller
>     make: [ :builder |
>         builder
>             superclass: superClass;
>             name: name;
>             layoutClass: (ObjectLayout layoutForType: type);
>             slots: self instanceVariables;
>             sharedVariables: self classVariables;
>             sharedPools: self sharedPoolsString;
>             classSlots: self classInstanceVariables;
>             traitComposition: self traitCompositionCompiled;
>             classTraitComposition: self classTraitCompositionCompiled;
>             comment: comment stamp: commentStamp;
>             category: category;
>             environment: superClass environment ] ] in MCClassDefinition>>createClass
> BlockClosure>>on:do:
> MCClassDefinition>>createClass
> MCClassDefinition>>load
> MCClassDefinition(MCDefinition)>>addMethodAdditionTo:
> [ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>>basicLoadDefinitions
> [ :each |
> | newLabel |
> "Special handling for first and last element"
> (count = 0
>     or: [ count + 1 = size
>             or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>     ifTrue: [ bar current: count.
>         oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>             ifFalse: [ bar label: newLabel.
>                 oldLabel := newLabel ].
>         lastUpdate := Time millisecondClockValue ].
> aBlock value: each.
> count := count + 1 ] in [ :bar |
> labelBlock := aStringOrBlock isString
>     ifTrue: [ bar label: aStringOrBlock.
>         [ :dummyItem | aStringOrBlock ] ]
>     ifFalse: [ aStringOrBlock ].
> self
>     do: [ :each |
>         | newLabel |
>         "Special handling for first and last element"
>         (count = 0
>             or: [ count + 1 = size
>                     or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>             ifTrue: [ bar current: count.
>                 oldLabel
>                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>                     ifFalse: [ bar label: newLabel.
>                         oldLabel := newLabel ].
>                 lastUpdate := Time millisecondClockValue ].
>         aBlock value: each.
>         count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
> OrderedCollection>>do:
> [ :bar |
> labelBlock := aStringOrBlock isString
>     ifTrue: [ bar label: aStringOrBlock.
>         [ :dummyItem | aStringOrBlock ] ]
>     ifFalse: [ aStringOrBlock ].
> self
>     do: [ :each |
>         | newLabel |
>         "Special handling for first and last element"
>         (count = 0
>             or: [ count + 1 = size
>                     or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
>             ifTrue: [ bar current: count.
>                 oldLabel
>                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
>                     ifFalse: [ bar label: newLabel.
>                         oldLabel := newLabel ].
>                 lastUpdate := Time millisecondClockValue ].
>         aBlock value: each.
>         count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
> BlockClosure>>cull:
> [ ^ block cull: self ] in [ self prepareForRunning.
> CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> [ p psValueAt: index put: anObject.
> aBlock value ] in CurrentJob(DynamicVariable)>>value:during:
> BlockClosure>>ensure:
> CurrentJob(DynamicVariable)>>value:during:
> CurrentJob class(DynamicVariable class)>>value:during:
> [ self prepareForRunning.
> CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> BlockClosure>>ensure:
> Job>>run
> MorphicUIManager(UIManager)>>displayProgress:from:to:during:
> ByteString(String)>>displayProgressFrom:to:during:
> OrderedCollection(Collection)>>do:displayingProgress:every:
> OrderedCollection(Collection)>>do:displayingProgress:
> MCPackageLoader>>basicLoadDefinitions
> [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
> BlockClosure>>on:do:
>  - - - - - - - - - - - - - - -
>             - - - - - - - - - - - - - - - - - -
> [ aBlock
>     on: InMidstOfFileinNotification
>     do: [ :notification | notification resume: true ] ] in MCPackageLoader>>handleLoadErrorsDuring:
> BlockClosure>>on:do:
> MCPackageLoader>>handleLoadErrorsDuring:
> [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
> BlockClosure>>ensure:
> MCPackageLoader>>basicLoad
> [ self basicLoad ] in MCPackageLoader>>loadWithNameLike:
> BlockClosure>>ensure:
> MCPackageLoader>>useChangeSetNamed:during:
> MCPackageLoader>>useNewChangeSetNamedLike:during:
> MCPackageLoader>>loadWithNameLike:
> MCThreeWayMerger(MCMerger)>>loadWithNameLike:
> MCVersionMerger>>mergeWithNameLike:
> MCVersionMerger class>>mergeVersion:
> MCVersion>>merge
> MCFileRepositoryInspector(MCVersionInspector)>>merge
> MCFileRepositoryInspector>>merge
> MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled:
> PluggableButtonMorph>>performAction:
> [ :m |
> (m containsPoint: evt cursorPoint)
>     ifTrue: [ m enabled
>             ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph>>mouseUp:
> Array(SequenceableCollection)>>do:
> PluggableButtonMorph>>mouseUp:
> PluggableButtonMorph(Morph)>>handleMouseUp:
> MouseButtonEvent>>sentTo:
> PluggableButtonMorph(Morph)>>handleEvent:
> PluggableButtonMorph(Morph)>>handleFocusEvent:
> [ ActiveHand := self.
> ActiveEvent := anEvent.
> result := focusHolder
>     handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
> BlockClosure>>on:do:
> WorldMorph(PasteUpMorph)>>becomeActiveDuring:
> HandMorph>>sendFocusEvent:to:clear:
> HandMorph>>sendEvent:focus:clear:
> HandMorph>>sendMouseEvent:
> HandMorph>>handleEvent:
> HandMorph>>processEvents
> [ :h |
> ActiveHand := h.
> h processEvents.
> ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
> Array(SequenceableCollection)>>do:
> WorldState>>handsDo:
> WorldState>>doOneCycleNowFor:
> WorldState>>doOneCycleFor:
> WorldMorph>>doOneCycle
> [ [ World doOneCycle.
> Processor yield.
> false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
> [ self value.
> Processor terminateActive ] in BlockClosure>>newProcess
> -------------------------------------------------------------------------------
>
>
>
> Hernán
>