The Trunk: Collections.spur-nice.622.mcz

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

Re: The Trunk: Collections.spur-nice.622.mcz

Eliot Miranda-2
Hi Levente,

On Thu, May 7, 2015 at 9:34 AM, Eliot Miranda <[hidden email]> wrote:
Hi Levente,

On Mon, May 4, 2015 at 1:55 PM, Levente Uzonyi <[hidden email]> wrote:
I tried to update an old Spur image, and somehow Character >> #isAlphaNumeric from Collections.spur-ul.628 (which should be loaded by update.spur-ul.311) appeared in the image, while loading Collections.spur-tfel.623 from update.spur-mt.310.
Assuming that the load order of the packages is untouched, I suspect that the method got merged in from the non-spur branch of Collections somehow.

Yes.  I see this.  The bootstrap is clearly broken.  I'll look at this right away.

Ah, MCMethodDefinition class>>className: classString
classIsMeta: metaBoolean
selector: selectorString
category: catString
timeStamp: timeString
source: sourceString
^ self instanceLike:
(self new initializeWithClassName: classString
classIsMeta: metaBoolean
selector: selectorString
category: catString
timeStamp: timeString
source: sourceString)

this will share definitions, and given that I'm modifying definitions as part of the patch process I guess I could end up modifying a definition that was inadvertently shared.  I'm rewriting to avoid use of shared instances.  i.e. I will use MCMethodDefinition new initializeWithClassName ... instead of MCMethodDefinition className: ...

 


Levente


On Mon, 4 May 2015, Levente Uzonyi wrote:

On Mon, 4 May 2015, Eliot Miranda wrote:

This breaks my image, dumping it into the emergency evaluator, I *think* because the new LetterMask, AlphaNumbericMask and DigitBit variables are not handledf correctly by the Spur bootstrap.  Sigh.  So for
those of you using Spur please *don't* update until I've fixed the bootstrap.
You know, by /not/ releasing, we are delaying because now I am fixing the bootstrap to keep up with development, instead of us having released, and being able to freely commit on Spur.  We are now wasting
cycles.  At least I am.

Multilingual-ul.209 should be loaded before Collections-ul.627, and only then should Collections-ul.628 be loaded.

In the regular Trunk, I added an update map which loads Multilingual-ul.209 and Collections-ul.627 first. (Multilingual was before Collections in the map, so the load order was already guaranteed).

Levente


On Mon, May 4, 2015 at 10:46 AM, <[hidden email]> wrote:
      Eliot Miranda uploaded a new version of Collections to project The Trunk:
      http://source.squeak.org/trunk/Collections.spur-nice.622.mcz

      ==================== Summary ====================

      Name: Collections.spur-nice.622
      Author: eem
      Time: 4 May 2015, 10:45:05.244 am
      UUID: 02450614-82e9-4d33-95fd-3fede06790d2
      Ancestors: Collections-nice.622, Collections.spur-mt.621

      Collections-nice.622 patched for Spur by SpurBootstrapMonticelloPackagePatcher Cog-eem.262

      #toBraceStack: is not used for compiling { } for so long that it's really time to get rid of it.

      Symbol>>numArgs: does not need to copy self into a temp var.

      =============== Diff against Collections-nice.622 ===============

      Item was changed:
        ----- Method: Array>>elementsExchangeIdentityWith: (in category 'converting') -----
        elementsExchangeIdentityWith: otherArray
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        At the same time, all pointers to the elements of otherArray are replaced by
      +        pointers to the corresponding elements of this array.  The identityHashes remain
      +        with the pointers rather than with the objects so that objects in hashed structures
      +        should still be properly indexed after the mutation."
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  At the same time, all
      pointers to the elements of otherArray are replaced by pointers to the corresponding elements of this array.  The identityHashes remain with the pointers rather than with the objects so that
      objects in hashed structures should still be properly indexed after the mutation."

      +       <primitive: 128 error: ec>
      +       ec == #'bad receiver' ifTrue:
      +               [^self error: 'receiver must be of class Array'].
      +       ec == #'bad argument' ifTrue:
      +               [^self error: (otherArray class == Array
      +                                               ifTrue: ['arg must be of class Array']
      +                                               ifFalse: ['receiver and argument must have the same size'])].
      +       ec == #'inappropriate operation' ifTrue:
      +               [^self error: 'can''t become immediates such as SmallIntegers or Characters'].
      +       ec == #'no modification' ifTrue:
      +               [^self error: 'can''t become immutable objects'].
      +       ec == #'object is pinned' ifTrue:
      +               [^self error: 'can''t become pinned objects'].
      +       ec == #'insufficient object memory' ifTrue:
      +               [Smalltalk garbageCollect < 1048576 ifTrue:
      +                       [Smalltalk growMemoryByAtLeast: 1048576].
      +                ^self elementsExchangeIdentityWith: otherArray].
      +       self primitiveFailed!
      -       <primitive: 128>
      -       otherArray class == Array ifFalse: [^ self error: 'arg must be array'].
      -       self size = otherArray size ifFalse: [^ self error: 'arrays must be same size'].
      -       (self anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
      -       (otherArray anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
      -       self with: otherArray do:[:a :b| a == b ifTrue:[^self error:'can''t become yourself']].
      -
      -       "Must have failed because not enough space in forwarding table (see ObjectMemory-prepareForwardingTableForBecoming:with:twoWay:).  Do GC and try again only once"
      -       (Smalltalk bytesLeft: true) = Smalltalk primitiveGarbageCollect
      -               ifTrue: [^ self primitiveFailed].
      -       ^ self elementsExchangeIdentityWith: otherArray!

      Item was changed:
        ----- Method: Array>>elementsForwardIdentityTo: (in category 'converting') -----
        elementsForwardIdentityTo: otherArray
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        The identityHashes remain with the pointers rather than with the objects so that
      +        the objects in this array should still be properly indexed in any existing hashed
      +        structures after the mutation."
      +       <primitive: 72 error: ec>
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes
      remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
      -       <primitive: 72>
              self primitiveFailed!

      Item was changed:
        ----- Method: Array>>elementsForwardIdentityTo:copyHash: (in category 'converting') -----
        elementsForwardIdentityTo: otherArray copyHash: copyHash
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        If copyHash is true, the identityHashes remain with the pointers rather than with the
      +        objects so that the objects in the receiver should still be properly indexed in any
      +        existing hashed structures after the mutation.  If copyHash is false, then the hashes
      +        of the objects in otherArray remain unchanged.  If you know what you're doing this
      +        may indeed be what you want."
      +       <primitive: 249 error: ec>
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes
      remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
      -       <primitive: 249>
              self primitiveFailed!

      Item was changed:
      ==== ERROR ===

      Error: Unrecognized class type

      4 May 2015 5:47:40.493 pm

      VM: unix - a SmalltalkImage
      Image: Squeak3.11alpha [latest update: #8824]

      SecurityManager state:
      Restricted: false
      FileAccess: true
      SocketAccess: true
      Working Dir /home/squeaksource
      Trusted Dir /home/squeaksource/secure
      Untrusted Dir /home/squeaksource/My Squeak

      MCClassDefinition(Object)>>error:
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:
                      aString:        'Unrecognized class type'
              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      MCClassDefinition>>kindOfSubclass
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:

              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      MCClassDefinition>>printDefinitionOn:
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:
                      stream:         a WriteStream
              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      [] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
              Receiver: a MCDiffyTextWriter
              Arguments and temporary variables:
                      definition:     a WriteStream
                      s:      a MCClassDefinition(Character)
              Receiver's instance variables:
                      stream:         a WriteStream
                      initStream:     nil


      --- The full stack ---
      MCClassDefinition(Object)>>error:
      MCClassDefinition>>kindOfSubclass
      MCClassDefinition>>printDefinitionOn:
      [] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      String class(SequenceableCollection class)>>new:streamContents:
      String class(SequenceableCollection class)>>streamContents:
      MCDiffyTextWriter(MCTextWriter)>>chunkContents:
      MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
      MCDiffyTextWriter(MCStWriter)>>visitClassDefinition:
      MCClassDefinition>>accept:
      [] in MCDiffyTextWriter(MCTextWriter)>>visitInFork:
      String class(SequenceableCollection class)>>new:streamContents:
      String class(SequenceableCollection class)>>streamContents:
      MCDiffyTextWriter(MCTextWriter)>>visitInFork:
      MCDiffyTextWriter>>writePatchFrom:to:
      MCDiffyTextWriter>>writeModification:
      [] in MCDiffyTextWriter>>writePatch:
      SortedCollection(OrderedCollection)>>do:
      MCDiffyTextWriter>>writePatch:
      SSDiffyTextWriter>>writePatch:
      [] in SSDiffyTextWriter>>writeVersion:for:
      BlockClosure>>on:do:
      SSDiffyTextWriter>>writeVersion:for:
      [] in SSEMailSubscription>>versionAdded:to:
      BlockClosure>>on:do:
      SSEMailSubscription>>versionAdded:to:
      [] in [] in SSProject>>versionAdded:
      [] in BlockClosure>>newProcess




--
best,Eliot







--
best,
Eliot



--
best,
Eliot


Reply | Threaded
Open this post in threaded view
|

Re: Spur Bootstrap (was: Re: [squeak-dev] The Trunk: Collections.spur-nice.622.mcz)

Karl Ramberg
In reply to this post by Levente Uzonyi-2
Ok,
I did not know this.
I naively tried filing in the trunk changes you posted and ran into this issue.

Karl
 

On Thu, May 7, 2015 at 3:56 PM, Levente Uzonyi <[hidden email]> wrote:
Before Spur Character has always had an instance variable named value. Characters are immediate in Spur, so the Character class has no instance variables there. If you browse Collections.spur-ul.584.mcz, you'll find the following definition:

Magnitude immediateSubclass: #Character
        instanceVariableNames: ''
        classVariableNames: 'CharacterTable ClassificationTable DigitValues LetterBits LowercaseBit UppercaseBit'
        poolDictionaries: ''
        category: 'Collections-Strings'


Levente

On Thu, 7 May 2015, karl ramberg wrote:

Then the Character changes must be changedInstance variable value was added in Collections.spur-ul.584.mcz it seems like


On Thu, May 7, 2015 at 2:03 PM, Tobias Pape <[hidden email]> wrote:

      On 07.05.2015, at 14:01, karl ramberg <[hidden email]> wrote:

      > I tried loading these changes manually but my image just crashes hard.
      >
      > If I try to add instance variable 'value' to Character I just get a debugger and no option to continue.
      >
      >

      This may be because Character cannot have instance variables in Spur, IIRC…









Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Collections.spur-nice.622.mcz

Eliot Miranda-2
In reply to this post by Eliot Miranda-2


On Thu, May 7, 2015 at 10:10 AM, Eliot Miranda <[hidden email]> wrote:
Hi Levente,

On Thu, May 7, 2015 at 9:34 AM, Eliot Miranda <[hidden email]> wrote:
Hi Levente,

On Mon, May 4, 2015 at 1:55 PM, Levente Uzonyi <[hidden email]> wrote:
I tried to update an old Spur image, and somehow Character >> #isAlphaNumeric from Collections.spur-ul.628 (which should be loaded by update.spur-ul.311) appeared in the image, while loading Collections.spur-tfel.623 from update.spur-mt.310.
Assuming that the load order of the packages is untouched, I suspect that the method got merged in from the non-spur branch of Collections somehow.

Yes.  I see this.  The bootstrap is clearly broken.  I'll look at this right away.

Ah, MCMethodDefinition class>>className: classString
classIsMeta: metaBoolean
selector: selectorString
category: catString
timeStamp: timeString
source: sourceString
^ self instanceLike:
(self new initializeWithClassName: classString
classIsMeta: metaBoolean
selector: selectorString
category: catString
timeStamp: timeString
source: sourceString)

this will share definitions, and given that I'm modifying definitions as part of the patch process I guess I could end up modifying a definition that was inadvertently shared.  I'm rewriting to avoid use of shared instances.  i.e. I will use MCMethodDefinition new initializeWithClassName ... instead of MCMethodDefinition className: ...

Ah, the issue is only that the bootstrap is confused by two packages with the same version number, i.e. Collections.spur-ul.624 and Collections.spur-tfel.624.  Stupidly I didn't check before uploading new versions of the Spur packages.  Forgive the noise.  But at least I know what to fix now.


 

 


Levente


On Mon, 4 May 2015, Levente Uzonyi wrote:

On Mon, 4 May 2015, Eliot Miranda wrote:

This breaks my image, dumping it into the emergency evaluator, I *think* because the new LetterMask, AlphaNumbericMask and DigitBit variables are not handledf correctly by the Spur bootstrap.  Sigh.  So for
those of you using Spur please *don't* update until I've fixed the bootstrap.
You know, by /not/ releasing, we are delaying because now I am fixing the bootstrap to keep up with development, instead of us having released, and being able to freely commit on Spur.  We are now wasting
cycles.  At least I am.

Multilingual-ul.209 should be loaded before Collections-ul.627, and only then should Collections-ul.628 be loaded.

In the regular Trunk, I added an update map which loads Multilingual-ul.209 and Collections-ul.627 first. (Multilingual was before Collections in the map, so the load order was already guaranteed).

Levente


On Mon, May 4, 2015 at 10:46 AM, <[hidden email]> wrote:
      Eliot Miranda uploaded a new version of Collections to project The Trunk:
      http://source.squeak.org/trunk/Collections.spur-nice.622.mcz

      ==================== Summary ====================

      Name: Collections.spur-nice.622
      Author: eem
      Time: 4 May 2015, 10:45:05.244 am
      UUID: 02450614-82e9-4d33-95fd-3fede06790d2
      Ancestors: Collections-nice.622, Collections.spur-mt.621

      Collections-nice.622 patched for Spur by SpurBootstrapMonticelloPackagePatcher Cog-eem.262

      #toBraceStack: is not used for compiling { } for so long that it's really time to get rid of it.

      Symbol>>numArgs: does not need to copy self into a temp var.

      =============== Diff against Collections-nice.622 ===============

      Item was changed:
        ----- Method: Array>>elementsExchangeIdentityWith: (in category 'converting') -----
        elementsExchangeIdentityWith: otherArray
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        At the same time, all pointers to the elements of otherArray are replaced by
      +        pointers to the corresponding elements of this array.  The identityHashes remain
      +        with the pointers rather than with the objects so that objects in hashed structures
      +        should still be properly indexed after the mutation."
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  At the same time, all
      pointers to the elements of otherArray are replaced by pointers to the corresponding elements of this array.  The identityHashes remain with the pointers rather than with the objects so that
      objects in hashed structures should still be properly indexed after the mutation."

      +       <primitive: 128 error: ec>
      +       ec == #'bad receiver' ifTrue:
      +               [^self error: 'receiver must be of class Array'].
      +       ec == #'bad argument' ifTrue:
      +               [^self error: (otherArray class == Array
      +                                               ifTrue: ['arg must be of class Array']
      +                                               ifFalse: ['receiver and argument must have the same size'])].
      +       ec == #'inappropriate operation' ifTrue:
      +               [^self error: 'can''t become immediates such as SmallIntegers or Characters'].
      +       ec == #'no modification' ifTrue:
      +               [^self error: 'can''t become immutable objects'].
      +       ec == #'object is pinned' ifTrue:
      +               [^self error: 'can''t become pinned objects'].
      +       ec == #'insufficient object memory' ifTrue:
      +               [Smalltalk garbageCollect < 1048576 ifTrue:
      +                       [Smalltalk growMemoryByAtLeast: 1048576].
      +                ^self elementsExchangeIdentityWith: otherArray].
      +       self primitiveFailed!
      -       <primitive: 128>
      -       otherArray class == Array ifFalse: [^ self error: 'arg must be array'].
      -       self size = otherArray size ifFalse: [^ self error: 'arrays must be same size'].
      -       (self anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
      -       (otherArray anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
      -       self with: otherArray do:[:a :b| a == b ifTrue:[^self error:'can''t become yourself']].
      -
      -       "Must have failed because not enough space in forwarding table (see ObjectMemory-prepareForwardingTableForBecoming:with:twoWay:).  Do GC and try again only once"
      -       (Smalltalk bytesLeft: true) = Smalltalk primitiveGarbageCollect
      -               ifTrue: [^ self primitiveFailed].
      -       ^ self elementsExchangeIdentityWith: otherArray!

      Item was changed:
        ----- Method: Array>>elementsForwardIdentityTo: (in category 'converting') -----
        elementsForwardIdentityTo: otherArray
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        The identityHashes remain with the pointers rather than with the objects so that
      +        the objects in this array should still be properly indexed in any existing hashed
      +        structures after the mutation."
      +       <primitive: 72 error: ec>
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes
      remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
      -       <primitive: 72>
              self primitiveFailed!

      Item was changed:
        ----- Method: Array>>elementsForwardIdentityTo:copyHash: (in category 'converting') -----
        elementsForwardIdentityTo: otherArray copyHash: copyHash
      +       "This primitive performs a bulk mutation, causing all pointers to the elements of the
      +        receiver to be replaced by pointers to the corresponding elements of otherArray.
      +        If copyHash is true, the identityHashes remain with the pointers rather than with the
      +        objects so that the objects in the receiver should still be properly indexed in any
      +        existing hashed structures after the mutation.  If copyHash is false, then the hashes
      +        of the objects in otherArray remain unchanged.  If you know what you're doing this
      +        may indeed be what you want."
      +       <primitive: 249 error: ec>
      -       "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes
      remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
      -       <primitive: 249>
              self primitiveFailed!

      Item was changed:
      ==== ERROR ===

      Error: Unrecognized class type

      4 May 2015 5:47:40.493 pm

      VM: unix - a SmalltalkImage
      Image: Squeak3.11alpha [latest update: #8824]

      SecurityManager state:
      Restricted: false
      FileAccess: true
      SocketAccess: true
      Working Dir /home/squeaksource
      Trusted Dir /home/squeaksource/secure
      Untrusted Dir /home/squeaksource/My Squeak

      MCClassDefinition(Object)>>error:
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:
                      aString:        'Unrecognized class type'
              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      MCClassDefinition>>kindOfSubclass
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:

              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      MCClassDefinition>>printDefinitionOn:
              Receiver: a MCClassDefinition(Character)
              Arguments and temporary variables:
                      stream:         a WriteStream
              Receiver's instance variables:
                      name:   #Character
                      superclassName:         #Magnitude
                      variables:      an OrderedCollection(a MCClassVariableDefinition(CharacterTable) a M...etc...
                      category:       'Collections-Strings'
                      type:   #immediate
                      comment:        'I represent a character by storing its associated Unicode as an unsig...etc...
                      commentStamp:   'eem 8/12/2014 14:53'
                      traitComposition:       nil
                      classTraitComposition:  nil

      [] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
              Receiver: a MCDiffyTextWriter
              Arguments and temporary variables:
                      definition:     a WriteStream
                      s:      a MCClassDefinition(Character)
              Receiver's instance variables:
                      stream:         a WriteStream
                      initStream:     nil


      --- The full stack ---
      MCClassDefinition(Object)>>error:
      MCClassDefinition>>kindOfSubclass
      MCClassDefinition>>printDefinitionOn:
      [] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      String class(SequenceableCollection class)>>new:streamContents:
      String class(SequenceableCollection class)>>streamContents:
      MCDiffyTextWriter(MCTextWriter)>>chunkContents:
      MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
      MCDiffyTextWriter(MCStWriter)>>visitClassDefinition:
      MCClassDefinition>>accept:
      [] in MCDiffyTextWriter(MCTextWriter)>>visitInFork:
      String class(SequenceableCollection class)>>new:streamContents:
      String class(SequenceableCollection class)>>streamContents:
      MCDiffyTextWriter(MCTextWriter)>>visitInFork:
      MCDiffyTextWriter>>writePatchFrom:to:
      MCDiffyTextWriter>>writeModification:
      [] in MCDiffyTextWriter>>writePatch:
      SortedCollection(OrderedCollection)>>do:
      MCDiffyTextWriter>>writePatch:
      SSDiffyTextWriter>>writePatch:
      [] in SSDiffyTextWriter>>writeVersion:for:
      BlockClosure>>on:do:
      SSDiffyTextWriter>>writeVersion:for:
      [] in SSEMailSubscription>>versionAdded:to:
      BlockClosure>>on:do:
      SSEMailSubscription>>versionAdded:to:
      [] in [] in SSProject>>versionAdded:
      [] in BlockClosure>>newProcess




--
best,Eliot







--
best,
Eliot



--
best,
Eliot



--
best,
Eliot


12