ChangeSet.st
changeset 2892 0a8a369149e9
parent 2881 ddbb874c0ce2
child 2893 5dfcb7f9f0da
--- a/ChangeSet.st	Tue Jul 31 15:30:56 2012 +0200
+++ b/ChangeSet.st	Tue Jul 31 16:24:36 2012 +0200
@@ -542,7 +542,6 @@
     "Created: / 27.10.1997 / 13:52:54 / cg"
 ! !
 
-
 !ChangeSet class methodsFor:'Compatibility-VW'!
 
 component: component definition: anObject change: changeSymbol
@@ -695,7 +694,7 @@
 !ChangeSet class methodsFor:'others'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.193 2012-07-31 12:41:14 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.194 2012-07-31 14:24:36 vrany Exp $'
 ! !
 
 !ChangeSet class methodsFor:'queries'!
@@ -1093,7 +1092,6 @@
     "Created: / 05-12-2009 / 12:32:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-
 !ChangeSet methodsFor:'misc'!
 
 addPatch:nameOfPatch
@@ -1102,7 +1100,6 @@
     ^ self
 ! !
 
-
 !ChangeSet methodsFor:'private-accessing'!
 
 addChange:aChange
@@ -2075,6 +2072,29 @@
     "Modified: / 24-01-2012 / 17:07:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+extractMethodsClassAndSelectorFromReceiver
+    "helper for all changes which are of the form:
+        (className compiledMethodAt:#methodSelector) something: ...
+    "
+
+    (receiver isMessage
+    and:[receiverSelector == #'compiledMethodAt:']) ifFalse:[
+        self error:'unexpected change' mayProceed:true.
+        ^ false.
+    ].
+    className := self classNameOf:receiverReceiver.
+    self assert:className notNil.
+
+"/  nameSpace ~~ Smalltalk ifTrue:[
+"/      className := nameSpace name , '::' , className
+"/  ].
+    methodSelector := (receiver arguments at:1) evaluate.
+    self assert:methodSelector notNil.
+    ^ true.
+
+    "Created: / 27-07-2012 / 21:33:47 / cg"
+!
+
 receiversClassName
     ^ self classNameOf:receiver
 !
@@ -2382,6 +2402,25 @@
     "Created: / 24-01-2012 / 16:52:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+handleMethodPackageChange
+    |change|
+
+    self extractMethodsClassAndSelectorFromReceiver ifFalse:[
+        ^ false.
+    ].
+
+    change := MethodPackageChange new.
+    change 
+        className:className
+        selector:methodSelector
+        package:(arguments at:1) evaluate.
+
+    self addChange:change.
+    ^ true
+
+    "Created: / 27-07-2012 / 21:31:25 / cg"
+!
+
 handleMethodPrivacyChange
     |change|
 
@@ -2444,6 +2483,39 @@
     ^ true
 !
 
+handlePrimitiveChange: sourceOrNil
+    "if sourceOrNil is nil, the def has not been read and must be read from
+     the next chunk. Otherwise, it has been already read as argument."
+
+    |change primSource|
+
+    className := self receiversClassName.
+"/        nameSpace ~~ Smalltalk ifTrue:[
+"/            className := nameSpace name , '::' , className
+"/        ].
+    sourceOrNil notNil ifTrue:[
+        primSource := sourceOrNil
+    ] ifFalse:[
+        inputStream skipSeparators.
+        primSource := inputStream nextChunk.
+    ].
+
+    (selector == #'primitiveDefinitions' or:[ selector == #'primitiveDefinitions:' ]) ifTrue:[
+        change := ClassPrimitiveDefinitionsChange new
+    ] ifFalse:[
+        (selector == #'primitiveFunctions' or:[ selector == #'primitiveFunctions:' ]) ifTrue:[
+            change := ClassPrimitiveFunctionsChange new
+        ] ifFalse:[
+            change := ClassPrimitiveVariablesChange new
+        ]
+    ].
+    change className:className source:primSource.
+    self addChange:change.
+    ^ true
+
+    "Created: / 27-07-2012 / 21:39:55 / cg"
+!
+
 handleRemoveClassChange
     |change|
 
@@ -2674,6 +2746,14 @@
     ^ self handleNameSpaceCreationChange.
 !
 
+process_package_
+    "'package:' chunk (ST/X)"
+
+    ^ self handleMethodPackageChange.
+
+    "Created: / 27-07-2012 / 21:36:30 / cg"
+!
+
 process_primitiveDefinitions
     "'primitiveDefinitions' chunk (ST/X)"
 
@@ -2682,6 +2762,14 @@
     "Modified: / 27-07-2012 / 21:40:33 / cg"
 !
 
+process_primitiveDefinitions_
+    "'primitiveDefinitions:' chunk (ST/X)"
+
+    ^ self handlePrimitiveChange: (arguments at:1) evaluate.
+
+    "Created: / 27-07-2012 / 21:42:03 / cg"
+!
+
 process_primitiveFunctions
     "'primitiveFunctions' chunk (ST/X)"
 
@@ -2690,6 +2778,14 @@
     "Modified: / 27-07-2012 / 21:40:23 / cg"
 !
 
+process_primitiveFunctions_
+    "'primitiveFunctions:' chunk (ST/X)"
+
+    ^ self handlePrimitiveChange: (arguments at:1) evaluate.
+
+    "Created: / 27-07-2012 / 21:37:21 / cg"
+!
+
 process_primitiveVariables
     "'primitiveVariables' chunk (ST/X)"
 
@@ -2698,6 +2794,14 @@
     "Modified: / 27-07-2012 / 21:40:35 / cg"
 !
 
+process_primitiveVariables_
+    "'primitiveVariables:' chunk (ST/X)"
+
+    ^ self handlePrimitiveChange: (arguments at:1) evaluate.
+
+    "Created: / 27-07-2012 / 21:41:49 / cg"
+!
+
 process_privacy_
     "'privacy:' chunk (ST/X)"
 
@@ -3937,7 +4041,7 @@
 !ChangeSet class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.193 2012-07-31 12:41:14 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.194 2012-07-31 14:24:36 vrany Exp $'
 !
 
 version_SVN