Metaclass.st
author Claus Gittinger <cg@exept.de>
Tue, 28 Dec 1999 15:03:48 +0100
changeset 5150 d7f854b5ede8
parent 5027 6a497c16e342
child 5191 3da2c7f61745
permissions -rw-r--r--
keep track of changed classes (even if current project has no changeSet)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
    13
ClassDescription subclass:#Metaclass
1047
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
    14
	instanceVariableNames:'myClass'
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    15
	classVariableNames:'ConfirmationQuerySignal'
1047
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
    16
	poolDictionaries:''
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
    17
	category:'Kernel-Classes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    20
!Metaclass class methodsFor:'documentation'!
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
    21
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    22
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    23
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    24
 COPYRIGHT (c) 1988 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
    25
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    27
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    28
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    30
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    31
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    32
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    33
"
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    34
!
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    35
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    36
documentation
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    37
"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    38
    every classes class is a subclass of Metaclass.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    39
    (i.e. every class is the sole instance of its Metaclass)
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    40
    Metaclass provides support for creating new (sub)classes and/or 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    41
    changing the definition of an already existing class.
1292
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    42
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    43
    [author:]
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
    44
	Claus Gittinger
1669
4951596746f7 comments & code cleanup
Claus Gittinger <cg@exept.de>
parents: 1655
diff changeset
    45
4951596746f7 comments & code cleanup
Claus Gittinger <cg@exept.de>
parents: 1655
diff changeset
    46
    [see also:]
4951596746f7 comments & code cleanup
Claus Gittinger <cg@exept.de>
parents: 1655
diff changeset
    47
	Behavior ClassDescription Class
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
    48
"
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    49
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    51
!Metaclass class methodsFor:'Signal constants'!
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    52
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    53
confirmationQuerySignal
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    54
    "return the query signal which is raised to ask if user
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    55
     confirmation dialogs should be opened.
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    56
     If unhandled, they are."
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    57
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    58
    ^ ConfirmationQuerySignal
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    59
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    60
    "Created: 31.7.1997 / 21:55:39 / cg"
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    61
! !
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    62
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    63
!Metaclass class methodsFor:'class initialization'!
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    64
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    65
initialize
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    66
    ConfirmationQuerySignal := QuerySignal new defaultAnswer:true
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    67
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    68
    "Modified: 31.7.1997 / 21:54:44 / cg"
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    69
! !
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
    70
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    71
!Metaclass class methodsFor:'creating metaclasses'!
356
claus
parents: 328
diff changeset
    72
claus
parents: 328
diff changeset
    73
new
claus
parents: 328
diff changeset
    74
    "creating a new metaclass - have to set the new classes
claus
parents: 328
diff changeset
    75
     flags correctly to have it behave like a metaclass ...
claus
parents: 328
diff changeset
    76
     Not for normal applications - creating new metaclasses is a very
claus
parents: 328
diff changeset
    77
     tricky thing; should be left to the gurus ;-)"
claus
parents: 328
diff changeset
    78
claus
parents: 328
diff changeset
    79
    |newMetaclass|
claus
parents: 328
diff changeset
    80
claus
parents: 328
diff changeset
    81
    newMetaclass := super new.
claus
parents: 328
diff changeset
    82
    newMetaclass instSize:(Class instSize).
claus
parents: 328
diff changeset
    83
    newMetaclass setSuperclass:Class.
claus
parents: 328
diff changeset
    84
claus
parents: 328
diff changeset
    85
    ^ newMetaclass
claus
parents: 328
diff changeset
    86
claus
parents: 328
diff changeset
    87
    "
claus
parents: 328
diff changeset
    88
     Metaclass new           <- new metaclass
claus
parents: 328
diff changeset
    89
     Metaclass new new       <- new class
claus
parents: 328
diff changeset
    90
     Metaclass new new new   <- new instance
claus
parents: 328
diff changeset
    91
    "
claus
parents: 328
diff changeset
    92
! !
claus
parents: 328
diff changeset
    93
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
    94
!Metaclass class methodsFor:'queries'!
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
    95
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
    96
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    97
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    98
     Here, true is returned for myself, false for subclasses."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    99
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   100
    ^ self == Metaclass class or:[self == Metaclass]
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   101
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   102
    "Modified: 23.4.1996 / 15:59:44 / cg"
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   103
! !
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   104
3012
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   105
!Metaclass methodsFor:'ST80 compatibility'!
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   106
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   107
comment:aString
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   108
    "ignored - sometimes found in ST-80 fileOut files.
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   109
     Comments are supposed to be defined via class messages."
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   110
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   111
    "Created: 9.10.1997 / 18:14:34 / cg"
3079
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   112
!
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   113
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   114
sourceCodeTemplate
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   115
    "ST80 compatibility - return a definition message for myself.
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   116
     Same as #definition"
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   117
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   118
    ^ self soleInstance definition
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   119
f177f98675c2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3049
diff changeset
   120
    "Created: / 1.11.1997 / 13:16:45 / cg"
3012
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   121
! !
25d64e4f2a4d added #comment:
Claus Gittinger <cg@exept.de>
parents: 2822
diff changeset
   122
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   123
!Metaclass methodsFor:'class instance variables'!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   124
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   125
instanceVariableNames:aString
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   126
    "changing / adding class-inst vars -
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   127
     this actually creates a new metaclass and class, leaving the original
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   128
     classes around as obsolete classes. This may also be true for all subclasses,
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   129
     if class instance variables are added/removed.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   130
     Existing instances continue to be defined by their original classes.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   131
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   132
     Time will show, if this is an acceptable behavior or if we should migrate
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   133
     instances to become insts. of the new classes."
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   134
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   135
    |newClass newMetaclass nClassInstVars oldClass 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   136
     allSubclasses oldVars
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   137
     oldNames newNames addedNames
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   138
     oldOffsets newOffsets offset changeSet delta
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   139
     oldToNew newSubMeta newSub oldSubMeta oldSuper
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 943
diff changeset
   140
     commonClassInstVars t|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   141
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   142
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   143
     cleanup needed here: extract common things with name:inEnvironment:...
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   144
     and restructure things ... currently way too complex.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   145
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   146
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   147
    oldVars := self instanceVariableString.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   148
    aString = oldVars ifTrue:[
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   149
"
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   150
        Transcript showCR:'no change (', oldVars , ') -> (', aString , ')'.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   151
"
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   152
        ^ self
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   153
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   154
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   155
    oldNames := oldVars asCollectionOfWords.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   156
    newNames := aString asCollectionOfWords.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   157
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   158
    oldNames = newNames ifTrue:[
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   159
"
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   160
        Transcript showCR:'no real change'.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   161
"
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   162
        "no real change (just formatting)"
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   163
        self setInstanceVariableString:aString.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   164
        ^ self
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   165
    ]. 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   166
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   167
"/    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   168
"/     let user confirm, if any name is no good (and was good before)
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   169
"/    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   170
"/    (oldNames inject:true
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   171
"/                into:[:okSoFar :word |
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   172
"/                         okSoFar and:[word first isUppercase]
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   173
"/                     ])
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   174
"/    ifTrue:[
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   175
"/        "was ok before"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   176
"/        (newNames inject:true
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   177
"/                    into:[:okSoFar :word |
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   178
"/                             okSoFar and:[word first isUppercase]
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   179
"/                         ])
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   180
"/        ifFalse:[
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   181
"/            (self confirm:'class instance variable names should start with an uppercase letter
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   182
"/(by convention only)
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   183
"/
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   184
"/install anyway ?' withCRs)
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   185
"/            ifFalse:[
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   186
"/                ^ nil
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   187
"/            ]
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   188
"/        ]
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   189
"/    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   190
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   191
    nClassInstVars := newNames size.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   192
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   193
"
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   194
    Transcript showCR:'create new class/metaclass'.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   195
"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   196
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   197
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   198
     create the new metaclass
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   199
    "
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   200
    self isPrivate ifTrue:[
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   201
        newMetaclass := PrivateMetaclass new.
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   202
        newMetaclass setOwningClass:(self owningClass).
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   203
    ] ifFalse:[
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   204
        newMetaclass := Metaclass new.
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   205
    ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   206
    newMetaclass setSuperclass:superclass.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   207
    newMetaclass instSize:(superclass instSize + nClassInstVars).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   208
    (nClassInstVars ~~ 0) ifTrue:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   209
        newMetaclass setInstanceVariableString:aString
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   210
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   211
"/    newMetaclass flags:(Behavior flagBehavior "flagNotIndexed").
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   212
"/    newMetaclass setName:name.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   213
"/    newMetaclass classVariableString:classvars.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   214
"/    newMetaclass setComment:(self comment).
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   215
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   216
    "find the class which is my sole instance"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   217
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   218
    oldClass := myClass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   219
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   220
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   221
     create the new class
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   222
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   223
    newClass := newMetaclass new.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   224
    newClass setSuperclass:(oldClass superclass).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   225
    newClass instSize:(oldClass instSize).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   226
    newClass flags:(oldClass flags).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   227
    newClass setName:(oldClass name).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   228
    newClass setInstanceVariableString:(oldClass instanceVariableString).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   229
    newClass classVariableString:(oldClass classVariableString).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   230
    newClass setComment:(oldClass comment).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   231
    newClass category:(oldClass category).
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   232
    (t := oldClass primitiveSpec) notNil ifTrue:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   233
        newClass primitiveSpec:t.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   234
    ].        
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   235
    newClass setClassFilename:(oldClass classFilename).
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   236
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   237
    "/ set the new classes package
566
3d2527a9e96d preserve package when class definition changes - its required for the SourceCodeManager
Claus Gittinger <cg@exept.de>
parents: 544
diff changeset
   238
    "/ from the old package
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   239
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   240
    newClass package:(oldClass package).
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   241
723
ebc969b4678d preserve binaryRevision when adding instVars
Claus Gittinger <cg@exept.de>
parents: 682
diff changeset
   242
    "/ and keep the binary revision
2415
7bf60d51a383 Keep binary revision when adding class instvars.
Stefan Vogel <sv@exept.de>
parents: 2340
diff changeset
   243
    newClass setBinaryRevision:(oldClass binaryRevision).
723
ebc969b4678d preserve binaryRevision when adding instVars
Claus Gittinger <cg@exept.de>
parents: 682
diff changeset
   244
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   245
    changeSet := Set new.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   246
    ((oldNames size == 0) 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   247
    or:[newNames startsWith:oldNames]) ifTrue:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   248
        "new variable(s) has/have been added - old methods still work"
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   249
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   250
"/        Transcript showCR:'copying methods ...'.
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   251
"/        Transcript endEntry.
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   252
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   253
        self copyMethodsFrom:self for:newMetaclass.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   254
        self copyMethodsFrom:oldClass for:newClass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   255
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   256
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   257
         but have to recompile methods accessing stuff now defined
3686
13a16c077970 comments only
Claus Gittinger <cg@exept.de>
parents: 3640
diff changeset
   258
         (it might have been a global/undeclared before ...)
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   259
        "
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   260
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   261
        addedNames := newNames select:[:nm | (oldNames includes:nm) not].
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   262
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   263
"/        Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   264
"/            Transcript showCR:'recompiling class methods of ' , newMetaclass name ,
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   265
"/                              ' accessing any of ' , addedNames printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   266
"/        ].
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   267
3278
bbc08c1a165d do not longer remove all class methods after defining instance class vars
tz
parents: 3079
diff changeset
   268
        "recompile class-methods"    
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   269
        newMetaclass recompileMethodsAccessingAny:addedNames.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   270
    ] ifFalse:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   271
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   272
         create the changeSet; thats the set of class instvar names
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   273
         which have changed their position or are new
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   274
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   275
        offset := 0. oldOffsets := Dictionary new.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   276
        oldNames do:[:nm | offset := offset + 1. oldOffsets at:nm put:offset].
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   277
        offset := 0. newOffsets := Dictionary new.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   278
        newNames do:[:nm | offset := offset + 1. newOffsets at:nm put:offset].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   279
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   280
        oldOffsets associationsDo:[:a |
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   281
            |k|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   282
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   283
            k := a key.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   284
            (newOffsets includesKey:k) ifFalse:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   285
                changeSet add:k
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   286
            ] ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   287
                (a value ~~ (newOffsets at:k)) ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   288
                    changeSet add:k
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   289
                ]
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   290
            ]
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   291
        ].
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   292
        newOffsets associationsDo:[:a |
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   293
            |k|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   294
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   295
            k := a key.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   296
            (oldOffsets includesKey:k) ifFalse:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   297
                changeSet add:k
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   298
            ] ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   299
                (a value ~~ (oldOffsets at:k)) ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   300
                    changeSet add:k
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   301
                ]
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   302
            ]
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   303
        ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   304
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   305
"/        Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   306
"/            Transcript showCR:'recompiling class methods of ' , newMetaclass name ,
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   307
"/                              ' accessing any of ' , changeSet printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   308
"/        ].
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   309
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   310
        "
3686
13a16c077970 comments only
Claus Gittinger <cg@exept.de>
parents: 3640
diff changeset
   311
         recompile class-methods accessing any c-instvar with a changed position
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   312
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   313
        self copyInvalidatedMethodsFrom:self for:newMetaclass accessingAny:changeSet.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
   314
        newMetaclass recompileInvalidatedMethods.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   315
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   316
        self copyMethodsFrom:oldClass for:newClass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   317
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   318
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   319
    delta := newNames size - oldNames size.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   320
3379
422c91c556c5 must care for subclass owners when changing class-instVars
Claus Gittinger <cg@exept.de>
parents: 3282
diff changeset
   321
    "/ preserve existing classInstVar values (but not those from Class)
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   322
    newMetaclass allInstVarNames do:[:nm |
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   323
        |v|
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   324
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   325
        (Class class allInstVarNames includes:nm) ifFalse:[
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   326
            v := oldClass instVarNamed:nm ifAbsent:nil.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   327
            v notNil ifTrue:[
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   328
                newClass instVarNamed:nm put:v.    
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   329
            ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   330
        ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   331
    ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   332
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   333
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   334
     get list of all subclasses - do before superclass is changed
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   335
    "
3703
9ef3fd9febd3 need topological sort, when changing subclasses
Claus Gittinger <cg@exept.de>
parents: 3686
diff changeset
   336
    allSubclasses := oldClass allSubclasses asOrderedCollection.
9ef3fd9febd3 need topological sort, when changing subclasses
Claus Gittinger <cg@exept.de>
parents: 3686
diff changeset
   337
    "/ cg: wrong: allSubclasses := allSubclasses asSortedCollection:[:a :b | b isSubclassOf:a].
9ef3fd9febd3 need topological sort, when changing subclasses
Claus Gittinger <cg@exept.de>
parents: 3686
diff changeset
   338
    allSubclasses := allSubclasses topologicalSort:[:a :b | b isSubclassOf:a]. 
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   339
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   340
    oldToNew := IdentityDictionary new.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   341
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   342
    "
3703
9ef3fd9febd3 need topological sort, when changing subclasses
Claus Gittinger <cg@exept.de>
parents: 3686
diff changeset
   343
     create a new class tree, based on the new version
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   344
    "
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   345
    allSubclasses do:[:aSubclass |
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   346
        oldSuper := aSubclass superclass.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   347
        oldSubMeta := aSubclass class.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   348
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   349
        newSubMeta := Metaclass new.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   350
        oldSuper == oldClass ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   351
            newSubMeta setSuperclass:newMetaclass.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   352
        ] ifFalse:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   353
            newSubMeta setSuperclass:(oldToNew at:oldSuper) class.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   354
        ].
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   355
        newSubMeta instSize:(oldSubMeta instSize + delta).
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   356
        newSubMeta flags:(oldSubMeta flags).
2687
2c2d15429457 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   357
"/        newSubMeta setName:(oldSubMeta name).
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   358
        newSubMeta setInstanceVariableString:(oldSubMeta instanceVariableString).
2687
2c2d15429457 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2684
diff changeset
   359
"/        newSubMeta setComment:(oldSubMeta comment).
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   360
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   361
        newSub := newSubMeta new.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   362
        oldSuper == oldClass ifTrue:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   363
            newSub setSuperclass:newClass.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   364
        ] ifFalse:[
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   365
            newSub setSuperclass:(oldToNew at:oldSuper).
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   366
        ].
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   367
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   368
"/        newSub setMethodDictionary:(aSubclass methodDictionary copy).
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   369
"/        newSub class setMethodDictionary:(aSubclass class methodDictionary copy).
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   370
        newSub setName:(aSubclass name).
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   371
        newSub classVariableString:(aSubclass classVariableString).
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   372
        newSub setInstanceVariableString:(aSubclass instanceVariableString).
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   373
        (t := aSubclass primitiveSpec) notNil ifTrue:[
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   374
            newSub primitiveSpec:t.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   375
        ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   376
        newSub package:(aSubclass package).
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   377
        newSub setClassFilename:(oldClass classFilename).
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   378
        newSub setComment:(aSubclass comment).
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   379
        newSub category:(aSubclass category).
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   380
        newSub instSize:(aSubclass instSize).
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   381
        newSub setBinaryRevision:(aSubclass binaryRevision).
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   382
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   383
        oldToNew at:aSubclass put:newSub.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   384
1655
fb6ee1b55ec4 use *-categories
Claus Gittinger <cg@exept.de>
parents: 1515
diff changeset
   385
        aSubclass category:#'* obsolete *'.
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   386
3686
13a16c077970 comments only
Claus Gittinger <cg@exept.de>
parents: 3640
diff changeset
   387
        "/ preserve existing classInstVar values (but not those from Class)
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   388
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   389
        newSubMeta allInstVarNames do:[:nm |
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   390
            |v|
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   391
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   392
            (Class class allInstVarNames includes:nm) ifFalse:[
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   393
                v := aSubclass instVarNamed:nm ifAbsent:nil.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   394
                v notNil ifTrue:[
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   395
                    newSub instVarNamed:nm put:v.    
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   396
                ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   397
            ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   398
        ].
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   399
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   400
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   401
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   402
    "recompile what needs to be"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   403
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   404
    delta == 0 ifTrue:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   405
        "only have to recompile class methods accessing 
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   406
         class instvars from changeset
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   407
        "
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   408
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   409
        allSubclasses do:[:oldSubclass |
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   410
            |newSubclass|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   411
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   412
            newSubclass := oldToNew at:oldSubclass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   413
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   414
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   415
"/                Transcript showCR:'recompiling class methods of ' , newSubclass class name ,
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   416
"/                                  ' accessing any of ' , changeSet printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   417
"/            ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   418
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   419
            self 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   420
                copyInvalidatedMethodsFrom:oldSubclass class for:newSubclass class 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   421
                accessingAny:changeSet orSuper:true.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   422
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   423
            self 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   424
                copyInvalidatedMethodsFrom:oldSubclass for:newSubclass 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   425
                accessingAny:#() orSuper:true.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   426
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   427
            newSubclass class recompileInvalidatedMethods.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   428
            newSubclass recompileInvalidatedMethods.
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   429
        ]
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   430
    ] ifFalse:[
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   431
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   432
         have to recompile all class methods accessing class instvars
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   433
        "
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   434
        commonClassInstVars := oldClass class allInstVarNames.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   435
        changeSet do:[:v |
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   436
            commonClassInstVars remove:v ifAbsent:[]
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   437
        ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   438
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   439
        allSubclasses do:[:oldSubclass |
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   440
            |newSubclass classInstVars|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   441
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   442
            newSubclass := oldToNew at:oldSubclass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   443
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   444
            classInstVars := newSubclass class allInstVarNames asSet.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   445
            classInstVars removeAll:commonClassInstVars.
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   446
            classInstVars addAll:changeSet.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   447
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   448
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   449
"/                Transcript showCR:'recompiling class methods of ' , newSubclass class name ,
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   450
"/                                  ' accessing any of ' , classInstVars printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
   451
"/            ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   452
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   453
            self 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   454
                copyInvalidatedMethodsFrom:oldSubclass class for:newSubclass class 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   455
                accessingAny:classInstVars orSuper:true.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   456
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   457
            self 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   458
                copyInvalidatedMethodsFrom:oldSubclass for:newSubclass 
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   459
                accessingAny:#() orSuper:true.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   460
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   461
            newSubclass class recompileInvalidatedMethods.
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   462
            newSubclass recompileInvalidatedMethods.
1416
48631b5d2017 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1392
diff changeset
   463
        ]
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   464
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   465
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   466
    newClass addChangeRecordForClassInstvars:newClass.
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   467
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   468
    "install all new classes"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   469
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   470
    (Smalltalk at:(oldClass name asSymbol) ifAbsent:nil) == oldClass ifTrue:[
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   471
        Smalltalk at:(oldClass name asSymbol) put:newClass.
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   472
        self checkForAliasesOf:oldClass with:newClass.
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   473
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   474
        "
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   475
         change any private subclasses' owners
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   476
        "
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   477
        oldClass privateClassesDo:[:aClass |
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   478
            aClass class setOwningClass:newClass
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   479
        ].
1821
0ef23966c67b move privateClasses when changing classInstVars
Claus Gittinger <cg@exept.de>
parents: 1819
diff changeset
   480
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   481
    ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   482
    ObjectMemory flushCachesFor:oldClass.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   483
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   484
    allSubclasses do:[:oldSubClass |
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   485
        |newSubClass|
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   486
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   487
        newSubClass := oldToNew at:oldSubClass.
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   488
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   489
"/        Transcript showCR:'install ' , newSubClass name , '(' , newSubClass category , ')' ,
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   490
"/                          ' as ' , newSubClass name.
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   491
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   492
        (Smalltalk at:(oldSubClass name asSymbol) ifAbsent:nil) == oldSubClass ifTrue:[
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   493
            Smalltalk at:oldSubClass name asSymbol put:newSubClass.
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   494
            self checkForAliasesOf:oldSubClass with:newSubClass.
1671
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   495
        ].
cceee8a44757 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   496
        ObjectMemory flushCachesFor:oldSubClass.
3379
422c91c556c5 must care for subclass owners when changing class-instVars
Claus Gittinger <cg@exept.de>
parents: 3282
diff changeset
   497
422c91c556c5 must care for subclass owners when changing class-instVars
Claus Gittinger <cg@exept.de>
parents: 3282
diff changeset
   498
        oldSubClass privateClassesDo:[:aClass |
422c91c556c5 must care for subclass owners when changing class-instVars
Claus Gittinger <cg@exept.de>
parents: 3282
diff changeset
   499
            aClass class setOwningClass:newSubClass
422c91c556c5 must care for subclass owners when changing class-instVars
Claus Gittinger <cg@exept.de>
parents: 3282
diff changeset
   500
        ].
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   501
    ].
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   502
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   503
    "tell dependents ..."
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   504
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   505
    oldClass changed:#definition.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   506
    self changed:#definition.
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   507
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   508
    ^ newMetaclass
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   509
3282
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   510
    "Created: / 29.10.1995 / 19:57:08 / cg"
9cb867744e4c I hope this does the class-instVar change ...
Claus Gittinger <cg@exept.de>
parents: 3278
diff changeset
   511
    "Modified: / 1.4.1997 / 15:44:09 / stefan"
3703
9ef3fd9febd3 need topological sort, when changing subclasses
Claus Gittinger <cg@exept.de>
parents: 3686
diff changeset
   512
    "Modified: / 31.7.1998 / 18:02:00 / cg"
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   513
! !
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   514
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   515
!Metaclass methodsFor:'copying'!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   516
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   517
postCopy
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   518
    "redefined - a copy may have a new instance"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   519
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   520
    myClass := nil
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   521
! !
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
   522
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
!Metaclass methodsFor:'creating classes'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   525
name:newName in:aSystemDictionaryOrClass
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   526
             subclassOf:aClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   527
             instanceVariableNames:stringOfInstVarNames
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   528
             variable:variableBoolean
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   529
             words:wordsBoolean
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   530
             pointers:pointersBoolean
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   531
             classVariableNames:stringOfClassVarNames
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   532
             poolDictionaries:stringOfPoolNames
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   533
             category:categoryString
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   534
             comment:commentString
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   535
             changed:changed
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   536
             classInstanceVariableNames:stringOfClassInstVarNamesOrNil
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   537
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   538
    "this is the main workhorse for installing new classes - special care
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   539
     has to be taken, when changing an existing classes definition. In this
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   540
     case, some or all of the methods and subclasses methods have to be
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   541
     recompiled.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   542
     Also, the old class(es) are still kept (but not accessable as a global),
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   543
     to allow existing instances some life. 
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   544
     This might change in the future.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   545
    "
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   546
1910
65a41a013d9c more care fore namespaces
Claus Gittinger <cg@exept.de>
parents: 1904
diff changeset
   547
    |newClass newMetaclass nInstVars nameString classSymbol nameKey oldClass 
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   548
     classVarChange instVarChange superClassChange newComment
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   549
     changeSet1 changeSet2 addedNames
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   550
     anyChange oldInstVars newInstVars oldClassVars newClassVars superFlags newFlags
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   551
     pkg oldPkg idx spec nClassInstVars 
2564
0259b286c09a removed unused vars
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
   552
     realNewName thisIsPrivate oldCIVNames newCIVNames nsName namespace
0259b286c09a removed unused vars
Claus Gittinger <cg@exept.de>
parents: 2440
diff changeset
   553
     oldSuperClass newSuperClass oldCategory
4774
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   554
     recompileGlobalAccessTo stringOfClassInstVarNames answer
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   555
     oldClassToBecomeNew|
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   556
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   557
    "NOTICE:
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   558
     this method is too complex and should be splitted into managable pieces ...
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   559
     I dont like it anymore :-) 
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   560
     (well, at least, its a good test for the compilers ability 
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   561
      to handle big, complex methods ;-)
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   562
     take it as an example of bad coding style ...
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   563
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   564
     ST-80 uses a ClassBuilder object to collect the work and perform all updates;
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   565
     this method may be changed to do something similar in the future ...
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   566
    "
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   567
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   568
    (newName isSymbol not
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   569
    or:[newName size == 0]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   570
        self error:'invalid class name (must be a nonEmpty symbol)'.
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   571
    ].
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   572
    newName first isLetter ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   573
        self error:'invalid class name (must start with a letter)'.
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   574
    ].
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   575
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   576
    "check for invalid subclassing of UndefinedObject and SmallInteger"
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   577
    aClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   578
        aClass canBeSubclassed ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   579
            self error:('it is not possible to subclass ' , aClass name).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   580
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   581
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   582
3049
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   583
    "/ owner must be loaded
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   584
    (aSystemDictionaryOrClass notNil and:[aSystemDictionaryOrClass isLoaded not]) ifTrue:[
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   585
        aSystemDictionaryOrClass autoload
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   586
    ].
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   587
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   588
    (stringOfInstVarNames size > 0
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   589
    or:[stringOfClassVarNames size > 0]) ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   590
        "
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   591
         Check for invalid variable names (duplicates)
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   592
        "
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   593
        (self 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   594
            checkValidVarNamesFor:newName
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   595
            subClassOf:aClass
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   596
            instVarNames:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   597
            classVarNames:stringOfClassVarNames) 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   598
        ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   599
            ^ nil
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   600
        ].
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   601
        nInstVars := stringOfInstVarNames countWords.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   602
    ] ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   603
        nInstVars := 0.
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   604
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   605
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   606
    nameString := newName asString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   607
    classSymbol := newName asSymbol.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   608
    newComment := commentString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   609
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   610
    namespace := aSystemDictionaryOrClass.
1910
65a41a013d9c more care fore namespaces
Claus Gittinger <cg@exept.de>
parents: 1904
diff changeset
   611
    nameKey := classSymbol.
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   612
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   613
    (namespace notNil
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   614
    and:[namespace isNamespace not]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   615
        thisIsPrivate := true.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   616
        realNewName := (namespace name , '::' , classSymbol) asSymbol.
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   617
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   618
        thisIsPrivate := false.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   619
        realNewName := classSymbol.
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   620
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   621
        "/ does the name imply a nameSpace ?
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   622
        ((idx := realNewName indexOf:$:)) ~~ 0 ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   623
            "/ check for this namespace to exist
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   624
            nsName := realNewName copyTo:(idx - 1).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   625
            nsName := nsName asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   626
            (realNewName indexOf:$: startingAt:(idx+2)) ~~ 0 ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   627
                self warn:('nested namespaces are not (yet) implemented.') withCRs.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   628
                ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   629
            ].
1830
1f4118554dae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1829
diff changeset
   630
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   631
            namespace := Smalltalk at:nsName ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   632
            namespace isNamespace ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   633
                namespace isNil ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   634
                    (Class createNameSpaceQuerySignal query
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   635
                    or:[(self 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   636
                            confirm:('nonexistent namespace: `' , nsName , '''.\\Create ?') withCRs)])
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   637
                    ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   638
                    namespace := Namespace name:nsName.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   639
                ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   640
                    self warn:('a global named ' , nsName , ' exists, but is no namespace.') withCRs.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   641
                    ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   642
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   643
            ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   644
            namespace isNamespace ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   645
                nameKey := (classSymbol copyFrom:(nsName size + 3)) asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   646
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   647
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   648
            (namespace notNil and:[namespace ~~ Smalltalk]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   649
                realNewName := (namespace name , '::' , classSymbol) asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   650
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   651
        ]
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   652
    ].
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   653
2233
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   654
    (aClass notNil and:[realNewName = aClass name]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   655
        self error:'trying to create circular class definition'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   656
        ^ nil
2233
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   657
    ].
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   658
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   659
    "look, if it already exists as a class"
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   660
    namespace notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   661
        thisIsPrivate ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   662
            oldClass := namespace at:nameKey ifAbsent:[nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   663
        ] ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   664
            oldClass := namespace privateClassesAt:classSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   665
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   666
    ].
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   667
4774
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   668
    (oldClass isBehavior and:[oldClass isLoaded not]) ifTrue:[
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   669
        oldClassToBecomeNew := oldClass
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   670
    ].
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   671
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   672
    (oldClass isBehavior and:[oldClass isLoaded]) ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   673
        oldClass := nil.
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   674
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   675
        thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   676
            Compiler warnSTXSpecials ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   677
                (self confirm:('support for private classes is an ST/X extension.\\continue ?') withCRs)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   678
                ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   679
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   680
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   681
    ] ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   682
        oldClass name ~= realNewName ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   683
            (self confirm:(classSymbol , ' is an alias for ' , oldClass name , '\\continue ?') withCRs)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   684
            ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   685
            oldClass := nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   686
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   687
            "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   688
            "/ some consisteny checks
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   689
            "/
4451
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   690
            oldClass allSuperclasses do:[:cls |
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   691
                cls name = realNewName ifTrue:[
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   692
                    self error:'trying to create circular class definition'.
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   693
                    ^ nil
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   694
                ]
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   695
            ].
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   696
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   697
            aClass notNil ifTrue:[
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   698
                aClass allSuperclasses do:[:cls |
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   699
                    cls name = realNewName ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   700
                        self error:'trying to create circular class definition'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   701
                        ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   702
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   703
                ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   704
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   705
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   706
            newComment isNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   707
                newComment := oldClass comment
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   708
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   709
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   710
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   711
             warn, if it exists with different category and different instvars,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   712
             and the existing is not an autoload class.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   713
             Usually, this indicates that someone wants to create a new class with
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   714
             a name, which already exists (it happened a few times to myself, while 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   715
             I wanted to create a new class called ReturnNode ...).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   716
             This will be much less of a problem, once multiple name spaces are
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   717
             implemented and classes can be put into separate packages.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   718
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   719
            oldClass isLoaded ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   720
                oldClass category ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   721
                    oldClass instanceVariableString asCollectionOfWords 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   722
                    ~= stringOfInstVarNames asCollectionOfWords ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   723
                        (self confirm:'a class named ' , oldClass name , 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   724
                                      ' already exists -\\create (i.e. change) anyway ?' withCRs)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   725
                        ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   726
                            ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   727
                        ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   728
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   729
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   730
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   731
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   732
            "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   733
            "/ hints - warn, if creating a variableSubclass of a Set
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   734
            "/ (common error - containers in ST/X do not use variable-slots)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   735
            "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   736
            ((variableBoolean == true) and:[pointersBoolean]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   737
                (oldClass isKindOf:Set class) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   738
                    (self confirm:'ST/X Set & Dictionary are not variable-classes\create anyway ?' withCRs)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   739
                    ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   740
                        ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   741
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   742
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   743
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   744
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   745
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   746
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   747
    "/ Check for some 'considered bad-style' things, like lower case names.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   748
    "/ But only do these checks for new classes - 
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   749
    "/ - thus, once confirmed, the warnings will not come again and again.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   750
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   751
    "/ NOTICE:
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   752
    "/ I dont like the confirmers there - we need a notifying: argument, to give
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   753
    "/ the outer codeview a chance to highlight the error.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   754
    "/ (but thats how its defined in the book - maybe I will change anyway).
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   755
    "/ - or use upQueries in future versions.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   756
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   757
    oldClass isNil ifTrue:[
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   758
        (stringOfInstVarNames size > 0
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   759
        or:[stringOfClassVarNames size > 0]) ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   760
            (self 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   761
                checkConventionsFor:newName
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   762
                subClassOf:aClass
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   763
                instVarNames:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   764
                classVarNames:stringOfClassVarNames) 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   765
            ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   766
                ^ nil
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   767
            ]
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   768
        ].
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   769
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   770
        (self
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   771
            checkInstvarRedefsWith:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   772
            subclassOf:aClass 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   773
            old:oldClass 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   774
            name:newName) ifFalse:[^ nil].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   775
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   776
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   777
    stringOfClassInstVarNamesOrNil isNil ifTrue:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   778
        oldClass isNil ifTrue:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   779
            stringOfClassInstVarNames := ''
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   780
        ] ifFalse:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   781
            stringOfClassInstVarNames := oldClass class instanceVariableString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   782
        ]
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   783
    ] ifFalse:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   784
        stringOfClassInstVarNames := stringOfClassInstVarNamesOrNil
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   785
    ].
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   786
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   787
    nClassInstVars := stringOfClassInstVarNames countWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   788
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   789
    "create the metaclass first"
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   790
    thisIsPrivate ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   791
        newMetaclass := PrivateMetaclass new
1725
eaa45019ad44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1724
diff changeset
   792
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   793
        newMetaclass := Metaclass new.
1725
eaa45019ad44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1724
diff changeset
   794
    ].
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   795
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   796
        newMetaclass setSuperclass:Class.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   797
        newMetaclass instSize:(Class instSize + nClassInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   798
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   799
        newMetaclass setSuperclass:(aClass class).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   800
        newMetaclass instSize:(aClass class instSize + nClassInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   801
    ].
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   802
"/    newMetaclass classVariableString:''.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   803
    newMetaclass setInstanceVariableString:stringOfClassInstVarNames.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   804
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   805
    "then let the new meta create the class"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   806
    newClass := newMetaclass new.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   807
    newClass setSuperclass:aClass.
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   808
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   809
        newClass instSize:nInstVars.
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   810
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   811
        newClass instSize:(aClass instSize + nInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   812
    ].
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   813
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   814
    thisIsPrivate ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   815
        "/ some private class
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   816
        newMetaclass setOwningClass:namespace.
1921
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   817
    ].
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   818
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   819
    (namespace notNil 
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   820
    and:[namespace ~~ Smalltalk]) ifTrue:[
4399
b2ef9e2347bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4398
diff changeset
   821
        newClass setName:realNewName.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   822
        "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   823
        "/ if that key exists in smalltalk,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   824
        "/ must recompile everything in that nameSpace,
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   825
        "/ which refers to the unprefixed global.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   826
        "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   827
        recompileGlobalAccessTo := nameKey.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   828
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   829
        newClass setName:classSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   830
        recompileGlobalAccessTo := nil.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   831
    ].
4029
eb75f8295dfe recompilation when new classes arrive (fixed for private classes)
Claus Gittinger <cg@exept.de>
parents: 4027
diff changeset
   832
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   833
    newClass setComment:newComment category:categoryString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   834
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   835
    oldClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   836
        "/ copy over classInstanceVariables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   837
        "/ but not those inherited from class
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   838
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   839
        oldCIVNames := oldClass class allInstVarNames asSet.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   840
        newCIVNames := newClass class allInstVarNames asSet.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   841
        Class class allInstVarNames do:[:n |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   842
             oldCIVNames remove:n ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   843
             newCIVNames remove:n ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   844
        ].
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   845
            
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   846
        newCIVNames size > 0 ifTrue:[
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   847
"/            Smalltalk silentLoading ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   848
"/                Transcript show:'preserving classInstVar values: '; showCR:newCIVNames.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   849
"/            ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   850
            newCIVNames do:[:n |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   851
                (oldCIVNames includes:n) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   852
                    newClass instVarNamed:n put:(oldClass instVarNamed:n)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   853
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   854
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   855
        ].
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   856
    ].
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   857
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   858
    "/ set the new classes package
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   859
    "/ but be careful here ...
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   860
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   861
    oldClass isNil ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   862
        "/ new classes get the current package ...
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   863
        pkg := Class packageQuerySignal query.
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   864
    ] ifFalse:[
4804
531640dcad3e preserve classFilename when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
   865
        newClass setClassFilename:(oldClass classFilename).
531640dcad3e preserve classFilename when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 4780
diff changeset
   866
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   867
        oldPkg := oldClass package.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   868
        oldClass isLoaded ifFalse:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   869
            "/ autoloaded classes get the package of the autoload stub ...
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   870
            pkg := oldPkg
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   871
        ] ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   872
            "/ not autoloading, check for packageRedef ...
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   873
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   874
            pkg := Class packageQuerySignal query.
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   875
            oldPkg ~= pkg ifTrue:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   876
                newClass package:pkg.
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   877
                answer := Class classRedefinitionSignal
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   878
                              raiseRequestWith:(oldClass -> newClass)
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   879
                              errorString:('redefinition of class: ' , oldClass name).
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   880
                answer == #keep ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   881
                    "/ keep old package
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   882
                    pkg := oldPkg.
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   883
                ] ifFalse:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   884
                    answer ~~ #continue ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   885
                        "/ cancel
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   886
                        ^ nil
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   887
                    ].
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   888
                    "/ take new package
3596
d19a2f605da3 also allow catching of class redefinitions.
Claus Gittinger <cg@exept.de>
parents: 3589
diff changeset
   889
                ].
d19a2f605da3 also allow catching of class redefinitions.
Claus Gittinger <cg@exept.de>
parents: 3589
diff changeset
   890
            ].
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   891
            newClass setBinaryRevision:(oldClass binaryRevision).
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   892
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   893
    ].
1835
e90fe211cdf1 oops - corrupted the package on autolaod
Claus Gittinger <cg@exept.de>
parents: 1830
diff changeset
   894
    pkg notNil ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
   895
"/ Transcript showCR:('set package of class: ' , newClass name , ' to ' , pkg printString).
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   896
        newClass package:pkg.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   897
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   898
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   899
    "/ Allowing non-booleans as variableBoolean
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   900
    "/ is a hack for backward (ST-80) compatibility:
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   901
    "/ ST-80 code will pass true or false as variableBoolean,
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   902
    "/ while ST/X also calls it with symbols such as #float, #double etc.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   903
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   904
    (variableBoolean == true) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   905
        pointersBoolean ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   906
            newFlags := Behavior flagPointers
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   907
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   908
            wordsBoolean ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   909
                newFlags := Behavior flagWords
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   910
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   911
                newFlags := Behavior flagBytes
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   912
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   913
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   914
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   915
        "/ false or symbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   916
        newFlags := Behavior flagForSymbolic:variableBoolean.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   917
    ].
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   918
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   919
        superFlags := 0
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   920
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   921
        superFlags := aClass flags bitAnd:(Behavior maskIndexType bitInvert). "preserve other bits"
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   922
    ].
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   923
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   924
    oldClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   925
        oldClass isBuiltInClass ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   926
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   927
             special care when redefining Method, Block and other built-in classes,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   928
             which might have other flag bits ...
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   929
            "
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   930
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   931
            newFlags := newFlags bitOr:(oldClass flags bitAnd:(Behavior maskIndexType bitInvert))
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   932
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   933
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   934
    newClass flags:(newFlags bitOr:superFlags). "preserve  inherited special bits"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   935
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   936
    (nInstVars ~~ 0) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   937
        newClass setInstanceVariableString:stringOfInstVarNames
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   938
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   939
    oldClass notNil ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   940
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   941
        "/ setting first will make new class clear obsolete classvars
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   942
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   943
        newClass setClassVariableString:(oldClass classVariableString).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   944
        (spec := oldClass primitiveSpec) notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   945
            newClass primitiveSpec:spec.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   946
            newClass setClassFilename:(oldClass classFilename).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   947
        ]        
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   948
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   949
    newClass classVariableString:stringOfClassVarNames.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   950
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   951
    "/ for new classes, we are almost done here
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   952
    "/ (also for autoloaded classes)
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   953
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   954
    (oldClass isNil or:[oldClass isLoaded not]) ifTrue:[
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   955
        (oldClass isNil and:[changed]) ifTrue:[
2584
d8449ccdc4a8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2564
diff changeset
   956
            aClass ~~ Autoload ifTrue:[
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   957
                newClass addChangeRecordForClass:newClass.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   958
            ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   959
        ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   960
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   961
        commentString notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   962
            newClass comment:commentString
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   963
        ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   964
        namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   965
            thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   966
                namespace privateClassesAt:classSymbol put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   967
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   968
                namespace at:nameKey put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   969
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   970
        ].
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   971
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   972
"/        oldClass isNil ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   973
"/            newClass package:(Class packageQuerySignal query)
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   974
"/        ].
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   975
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   976
        oldClass notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   977
            "/ since we changed the classes inheritance (from Autoloaded)
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   978
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   979
            "/ actually, could optimize to:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   980
            "/  Behavior updateSuperclassInfoFor:oldClass superclass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   981
            "/  Behavior updateSuperclassInfoFor:newClass superclass.
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   982
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   983
            Behavior flushSubclassInfo.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   984
        ].
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   985
4774
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   986
        oldClassToBecomeNew notNil ifTrue:[
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   987
            "/ old was an autoloaded class - make it the new one
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   988
            "/ and flush ...
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   989
            oldClassToBecomeNew class becomeSameAs:newClass class.
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   990
            oldClassToBecomeNew becomeSameAs:newClass.
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   991
            ObjectMemory flushCaches.
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   992
        ].
963f2e5d1f24 when manually loading an autoloaded class,
Claus Gittinger <cg@exept.de>
parents: 4749
diff changeset
   993
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   994
        namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   995
            thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   996
                namespace changed.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   997
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   998
                namespace changed:#newClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   999
                namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1000
                    Smalltalk changed:#newClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1001
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1002
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1003
        ].
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1004
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1005
        "/ be very careful, when adding classes
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1006
        "/ to a namespace or adding a privateClass. 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1007
        "/ When adding, all methods within that namespace/owning class
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1008
        "/ which access the unprefixed-global,
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1009
        "/ must be recompiled (so they access the new class)
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1010
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1011
        recompileGlobalAccessTo notNil ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1012
            self recompileGlobalAccessorsTo:recompileGlobalAccessTo
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1013
                 in:namespace
4725
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1014
                 except:newClass.
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1015
        ].
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1016
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1017
        (thisIsPrivate 
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1018
        and:[newClass owningClass nameSpace notNil]) ifTrue:[
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1019
            "/ namespace is a class; 
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1020
            "/ if this owner is itself in a namespace,
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1021
            "/ must recompile all from owners namespace
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1022
            "/ accessing the new class (without namespace prefix)
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1023
            self recompileGlobalAccessorsTo:(newClass nameWithoutNameSpacePrefix asSymbol)
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1024
                 in:(newClass owningClass nameSpace)
98e0fa189aba recompile ns classes accessing private class name
Claus Gittinger <cg@exept.de>
parents: 4638
diff changeset
  1025
                 except:newClass.
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1026
        ].
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1027
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1028
        ^ newClass
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1029
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1030
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1031
    "/ here comes the hard part - we are actually changing the
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1032
    "/ definition of an existing class ....
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1033
    "/ Try hard to get away WITHOUT recompiling, since it makes all
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1034
    "/ compiled code into interpreted ...
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1035
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1036
    oldInstVars := oldClass instanceVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1037
    newInstVars := newClass instanceVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1038
    oldClassVars := oldClass classVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1039
    newClassVars := newClass classVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1040
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1041
    oldSuperClass := oldClass superclass.
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1042
    newSuperClass := newClass superclass.
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1043
    superClassChange := oldSuperClass ~~ newSuperClass.
2002
6af05dcbebf8 no need to recompile class methods, if
Claus Gittinger <cg@exept.de>
parents: 1937
diff changeset
  1044
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1045
    "/ we are on the bright side of life, if the instance layout and
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1046
    "/ inheritance do not change.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1047
    "/ In this case, we can go ahead and patch the class object.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1048
    "/ (only comment and/or classVars have changed)
2002
6af05dcbebf8 no need to recompile class methods, if
Claus Gittinger <cg@exept.de>
parents: 1937
diff changeset
  1049
6af05dcbebf8 no need to recompile class methods, if
Claus Gittinger <cg@exept.de>
parents: 1937
diff changeset
  1050
    superClassChange ifFalse:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1051
      (oldClass instSize == newClass instSize) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1052
        (oldClass flags == newClass flags) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1053
          (oldClass name = newClass name) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1054
            (oldInstVars = newInstVars) ifTrue:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1055
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1056
              (newComment ~= oldClass comment) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1057
                  oldClass setComment:newComment.        "writes a change-chunk"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1058
                  oldClass changed:#comment with:oldClass comment.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1059
                  changed ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1060
                      oldClass addChangeRecordForClassComment:oldClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1061
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1062
              ]. 
5027
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1063
              "/ mhmh - dont do this here ...
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1064
              "/ ... otherwise, we have to change all methods package info
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1065
              "/ to belong to the old package.
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1066
"/              oldClass package:pkg.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1067
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1068
              (oldClassVars = newClassVars) ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1069
                  "/ really no change (just comment and/or category)
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1070
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1071
                  anyChange := false.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1072
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1073
                  oldClass setInstanceVariableString:(newClass instanceVariableString).
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1074
                  oldClass setClassVariableString:(newClass classVariableString).
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1075
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1076
                  oldClass category ~= categoryString ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1077
                      oldClass category:categoryString. 
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1078
                      changed ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1079
                          newClass addChangeRecordForClass:newClass.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1080
                      ].    
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1081
                      namespace notNil ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1082
                          thisIsPrivate ifFalse:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1083
                              "notify change of category"
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1084
                              namespace changed:#organization.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1085
                              namespace ~~ Smalltalk ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1086
                                  Smalltalk changed:#organization.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1087
                              ]
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1088
                          ]
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1089
                      ]
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1090
                  ].
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1091
                  "notify change of class"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1092
"/                oldClass changed.
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1093
                  ^ oldClass
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1094
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1095
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1096
              "/ when we arrive here, class variables have changed
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1097
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1098
              oldClass category ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1099
                  "notify change of organization"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1100
                  oldClass category:categoryString. 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1101
                  namespace notNil ifTrue:[
4638
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1102
                      thisIsPrivate ifFalse:[ 
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1103
                          "notify change of organization"
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1104
                          namespace changed:#organization.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1105
                          namespace ~~ Smalltalk ifTrue:[
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1106
                              Smalltalk changed:#organization.
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1107
                          ]
c0984e7647a7 fixed package setting
Claus Gittinger <cg@exept.de>
parents: 4585
diff changeset
  1108
                      ]
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1109
                  ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1110
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1111
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1112
              "/ set class variable string; 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1113
              "/ this also updates the set of class variables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1114
              "/ by creating new / deleting obsolete ones.
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1115
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1116
              oldClass classVariableString:stringOfClassVarNames.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1117
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1118
              "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1119
               get the set of changed class variables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1120
              "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1121
              changeSet1 := Set new.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1122
              oldClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1123
                  (newClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1124
                      "/ a removed classVar;
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1125
                      "/ must recompile methods accessing that one:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1126
                      "/ access was: classVar; now: global.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1127
                      changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1128
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1129
              ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1130
              newClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1131
                  (oldClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1132
                      "/ an added classVar;
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1133
                      "/ must recompile methods accessing that one:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1134
                      "/ access was: global; now: classVar.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1135
                      "/ but only, if such a global existed in the first
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1136
                      "/ place. (otherwise, it is a brand-new name)
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1137
"/ cg: no, this is not a good check.
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1138
"/                      (Smalltalk includesKey:nm asSymbol) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1139
                          changeSet1 add:nm
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1140
"/                      ]  
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1141
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1142
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1143
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1144
              changeSet1 notEmpty ifTrue:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1145
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1146
                  "/ recompile all methods accessing set of changed classvars
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1147
                  "/ here and also in all subclasses ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1148
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1149
                  "/ dont update change file for the recompilation
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1150
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1151
                  Class withoutUpdatingChangesDo:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1152
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1153
"/                      Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1154
"/                          Transcript showCR:'recompiling class & inst methods accessing ' , changeSet1 printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1155
"/                          Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1156
"/                      ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1157
                      oldClass withAllSubclasses do:[:aClass |
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1158
                          aClass class recompileMethodsAccessingAnyClassvarOrGlobal:changeSet1.
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1159
                          aClass recompileMethodsAccessingAnyClassvarOrGlobal:changeSet1.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1160
                      ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1161
                  ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1162
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1163
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1164
              "notify change of class"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1165
              changed ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1166
                  oldClass addChangeRecordForClass:oldClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1167
              ].  
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1168
              oldClass changed:#definition.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1169
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1170
              ^ oldClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1171
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1172
          ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1173
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1174
      ]
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1175
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1176
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1177
    "/ here we enter the darkness of mordor ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1178
    "/ since instance variable layout and/or inheritance has changed.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1179
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1180
    (newComment ~= oldClass comment) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1181
        newClass comment:newComment
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1182
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1183
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1184
    "/ dont allow built-in classes to be modified this way
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1185
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1186
    (oldClass notNil and:[oldClass isBuiltInClass and:[superClassChange]]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1187
        self error:'the inheritance of this class is fixed - you cannot change it'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1188
        ^ oldClass
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1189
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1190
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1191
    "/ since we will change the inheritance of some class(es)
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1192
    Behavior flushSubclassInfo.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1193
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1194
    "/ catch special case, where superclass changed its layout and thus
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1195
    "/ forced redefinition of this class; 
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1196
    "/ only log if this is not the case.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1197
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1198
    changed ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1199
        (superClassChange 
3614
51d01f893c63 care for nil superclass when comparing names.
Claus Gittinger <cg@exept.de>
parents: 3596
diff changeset
  1200
         and:[(oldSuperClass isNil or:[newSuperClass notNil and:[oldSuperClass name = newSuperClass name]])
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1201
         and:[(oldClassVars = newClassVars) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1202
         and:[(oldInstVars = newInstVars)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1203
         and:[newComment = oldClass comment]]]]) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1204
            newClass addChangeRecordForClass:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1205
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1206
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1207
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1208
    "/ care for class methods ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1209
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1210
    changeSet1 := Set new.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1211
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1212
    classVarChange := false.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1213
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1214
    superClassChange ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1215
        (oldSuperClass notNil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1216
        and:[newSuperClass notNil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1217
        and:[oldSuperClass allClassVarNames = newSuperClass allClassVarNames
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1218
        and:[oldSuperClass name = newSuperClass name
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1219
        and:[oldClassVars = newClassVars]]]])
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1220
        ifTrue:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1221
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1222
"/            Transcript showCR:'keep class methods (same classvars)'.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1223
"/            Transcript endEntry.
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1224
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1225
            "/ class methods still work
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1226
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1227
            self copyMethodsFrom:(oldClass class) for:newMetaclass.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1228
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1229
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1230
"/                Transcript showCR:'recompiling class methods accessing super ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1231
"/                Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1232
"/            ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1233
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1234
            "/ however, those accessing super must be recompiled
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1235
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1236
            self copyInvalidatedMethodsFrom:(oldClass class) 
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1237
                                        for:newMetaclass 
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1238
                               accessingAny:#()
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1239
                                    orSuper:true.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1240
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1241
            "/ superclass changed:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1242
            "/  must recompile all class methods accessing ANY classvar
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1243
            "/  (actually, we could be less strict and handle the case where
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1244
            "/   both the old and the new superclass have a common ancestor,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1245
            "/   and both have no new classvariables in between.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1246
            "/   This would speedup the case when a class is inserted into
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1247
            "/   the inheritance chain.)
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1248
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1249
            oldClass allClassVarNames do:[:nm | changeSet1 add:nm].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1250
            newClass allClassVarNames do:[:nm | changeSet1 add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1251
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1252
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1253
"/                Transcript showCR:'recompiling class methods accessing any classvar or super ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1254
"/                Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1255
"/            ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1256
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1257
            self copyInvalidatedMethodsFrom:(oldClass class) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1258
                                        for:newMetaclass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1259
                               accessingAny:changeSet1
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1260
                                    orSuper:true.
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1261
        ].
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1262
        newMetaclass recompileInvalidatedMethods.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1263
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1264
        "/ same superclass, find out which classvars have changed
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1265
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1266
        classVarChange := oldClassVars ~= newClassVars.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1267
        classVarChange ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1268
            oldClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1269
                (newClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1270
                    changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1271
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1272
            ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1273
            newClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1274
                (oldClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1275
                    changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1276
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1277
            ].
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1278
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1279
            "/ must recompile some class-methods
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1280
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1281
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1282
"/                Transcript showCR:'recompiling class methods accessing ' , changeSet1 printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1283
"/                Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1284
"/            ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1285
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1286
            self copyInvalidatedMethodsFrom:(oldClass class) for:newMetaclass accessingAny:changeSet1.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1287
            newMetaclass recompileInvalidatedMethods.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1288
        ] ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1289
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1290
            "/ class methods still work
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1291
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1292
            self copyMethodsFrom:(oldClass class) for:newMetaclass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1293
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1294
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1295
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1296
    "/ care for instance methods ...
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1297
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1298
    superClassChange ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1299
        "/ superclass changed,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1300
        "/  must recompile all methods accessing any class or instvar.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1301
        "/  If number of instvars (i.e. the instances instSize) is the same,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1302
        "/  we can limit the set of recompiled instance methods to those methods,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1303
        "/  which refer to an instvar with a different inst-index
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1304
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1305
        "/ the changeset consists of instance variables, 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1306
        "/ with a different position
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1307
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1308
        changeSet2 := self differentInstanceVariableOffsetsIn:oldClass and:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1309
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1310
        "/ merge in the changed class variables
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1311
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1312
        changeSet1 do:[:nm | changeSet2 add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1313
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1314
"/        Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1315
"/             Transcript showCR:'recompiling instance methods accessing ' , changeSet2 printString , ' [superclass change]...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1316
"/             Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1317
"/        ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1318
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1319
        self copyInvalidatedMethodsFrom:oldClass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1320
                                    for:newClass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1321
                           accessingAny:changeSet2
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1322
                                orSuper:true.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1323
        newClass recompileInvalidatedMethods.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1324
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1325
    ] ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1326
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1327
        "/ same inheritance ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1328
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1329
        instVarChange := oldInstVars ~= newInstVars.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1330
        instVarChange ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1331
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1332
            "/ same instance variables ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1333
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1334
            classVarChange ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1335
                "recompile all inst methods accessing changed classvars"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1336
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1337
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1338
"/                    Transcript showCR:'recompiling instance methods accessing classvars ' , changeSet1 printString , ' ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1339
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1340
"/                ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1341
                self copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:changeSet1.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1342
                newClass recompileInvalidatedMethods.
4585
e0271fc3a2fd oops - changing the flags only lost inst-methods
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
  1343
            ] ifFalse:[
e0271fc3a2fd oops - changing the flags only lost inst-methods
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
  1344
                "/ instance methods still work
e0271fc3a2fd oops - changing the flags only lost inst-methods
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
  1345
e0271fc3a2fd oops - changing the flags only lost inst-methods
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
  1346
                self copyMethodsFrom:oldClass for:newClass
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1347
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1348
        ] ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1349
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1350
            "/ dont allow built-in classes to be modified
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1351
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1352
            (oldClass notNil and:[oldClass isBuiltInClass and:[instVarChange]]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1353
                self error:'the layout of this class is fixed - you cannot change it'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1354
                ^ oldClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1355
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1356
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1357
            ((oldInstVars size == 0) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1358
            or:[newInstVars startsWith:oldInstVars]) ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1359
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1360
                "/ only new inst variable(s) has/have been added - 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1361
                "/ old methods still work (the existing inst-indices are still valid)
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1362
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1363
"/                Transcript showCR:'copying methods ...'.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1364
"/                Transcript endEntry.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1365
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1366
                self copyMethodsFrom:oldClass for:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1367
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1368
                "/ but: we have to recompile all methods accessing new instars
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1369
                "/ (it might have been a classVar/global before ...)
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1370
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1371
                addedNames := newInstVars select:[:nm | (oldInstVars includes:nm) not].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1372
                "merge in class variables"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1373
                changeSet1 do:[:nm | addedNames add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1374
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1375
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1376
"/                    Transcript showCR:'recompiling instance methods accessing ' , addedNames printString ,  '... [added instvars]'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1377
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1378
"/                ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1379
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1380
                newClass recompileMethodsAccessingAny:addedNames.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1381
            ] ifFalse:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1382
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1383
                "/ the changeset consists of instance variables, 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1384
                "/ with a different position
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1385
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1386
                changeSet2 := self differentInstanceVariableOffsetsIn:oldClass and:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1387
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1388
                "merge in the class variables"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1389
                changeSet1 do:[:nm | changeSet2 add:nm].
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1390
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1391
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1392
"/                    Transcript showCR:'recompiling instance methods accessing ' , changeSet2 printString , ' ... [changed instvars]'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1393
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1394
"/                ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1395
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1396
                self copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:changeSet2.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1397
                newClass recompileInvalidatedMethods.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1398
            ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1399
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1400
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1401
4749
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1402
    "/ finally, if the oldClass came from a dynamically loaded
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1403
    "/ classLibrary, we must recompile the methods in the newClass.
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1404
    "/ otherwise, the methods code will vanish when the old (obsolete)
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1405
    "/ class eventually vanishes ...
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1406
    self recompileMachineCodeMethodsIn:newClass.
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1407
5027
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1408
    (oldPkg notNil and:[oldPkg ~= pkg]) ifTrue:[
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1409
        "/ we have to change all methods package info
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1410
        "/ to belong to the old package.
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1411
        newClass methodDictionary keysAndValuesDo:[:sel :mthd |
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1412
            mthd package:oldPkg
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1413
        ].
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1414
        newClass class methodDictionary keysAndValuesDo:[:sel :mthd |
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1415
            mthd package:oldPkg
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1416
        ].
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  1417
    ].
4749
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1418
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1419
    "/ WOW, everything done for this class
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1420
    "/ what about subclasses ?
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1421
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1422
    "/ update superclass of immediate subclasses - 
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1423
    "/ this forces recompilation (recursively) if needed
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1424
    "/ (dont update change file for the subclass changes)
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1425
3629
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1426
    Class classRedefinitionSignal answer:#keep do:[
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1427
        Class withoutUpdatingChangesDo:[
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1428
            oldClass subclasses copy do:[:aClass |
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1429
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1430
"/                Transcript showCR:'changing superclass of:' , aClass name.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1431
"/                Transcript endEntry.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1432
3629
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1433
                aClass superclass:newClass
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1434
            ]
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1435
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1436
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1437
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1438
    "/ change any private subclasses' owners
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1439
1819
e53f745ed80b when changing a class, do not forget to move the privateClasses
Claus Gittinger <cg@exept.de>
parents: 1809
diff changeset
  1440
    oldClass privateClassesDo:[:aClass |
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1441
        aClass class setOwningClass:newClass
1819
e53f745ed80b when changing a class, do not forget to move the privateClasses
Claus Gittinger <cg@exept.de>
parents: 1809
diff changeset
  1442
    ].
e53f745ed80b when changing a class, do not forget to move the privateClasses
Claus Gittinger <cg@exept.de>
parents: 1809
diff changeset
  1443
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1444
    "/ change category in oldClass - so we see immediately what it is ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1445
2108
09db34dc073f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2106
diff changeset
  1446
    oldCategory := oldClass category.
1655
fb6ee1b55ec4 use *-categories
Claus Gittinger <cg@exept.de>
parents: 1515
diff changeset
  1447
    oldClass category:#'* obsolete *'.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1448
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1449
    "/ and make the new class globally known
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1450
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
  1451
    namespace notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1452
        thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1453
            namespace privateClassesAt:classSymbol put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1454
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1455
            namespace at:nameKey put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1456
            namespace == Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1457
                self checkForAliasesOf:oldClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1458
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1459
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1460
            oldCategory ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1461
                "notify change of organization"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1462
                namespace changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1463
                namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1464
                    Smalltalk changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1465
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1466
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1467
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1468
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1469
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1470
    "/ Not becoming the old class creates some update problems;
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1471
    "/ the browsers must check carefully - a simple identity compare is
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1472
    "/ not enough ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1473
    "/ QUESTION: is this a good idea ?
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1474
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1475
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1476
    newClass dependents:(oldClass dependents).
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1477
    newClass changed:#definition.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1478
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1479
    "just to make certain ... - tell dependents of oldClass, that something changed
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1480
     (systemBrowsers will react on this, and update their views)"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1481
    oldClass changed:#definition with:newClass.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1482
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1483
    ObjectMemory flushCaches.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1484
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1485
    ^ newClass
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1486
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
  1487
    "Created: / 26.5.1996 / 11:55:26 / cg"
3629
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1488
    "Modified: / 20.6.1998 / 18:08:25 / cg"
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1489
    "Modified: / 18.3.1999 / 18:23:31 / stefan"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1490
!
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1491
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1492
name:newName inEnvironment:aSystemDictionary
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1493
             subclassOf:aClass
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1494
             instanceVariableNames:stringOfInstVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1495
             variable:variableBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1496
             words:wordsBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1497
             pointers:pointersBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1498
             classVariableNames:stringOfClassVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1499
             poolDictionaries:stringOfPoolNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1500
             category:categoryString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1501
             comment:commentString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1502
             changed:changed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1503
885
ca805f0f4984 changed class creation to allow create including classInstVars (may be used to avoid recompilation)
Claus Gittinger <cg@exept.de>
parents: 870
diff changeset
  1504
    ^ self
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1505
        name:newName 
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1506
        in:aSystemDictionary
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1507
        subclassOf:aClass
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1508
        instanceVariableNames:stringOfInstVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1509
        variable:variableBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1510
        words:wordsBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1511
        pointers:pointersBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1512
        classVariableNames:stringOfClassVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1513
        poolDictionaries:stringOfPoolNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1514
        category:categoryString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1515
        comment:commentString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1516
        changed:changed
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1517
        classInstanceVariableNames:nil
885
ca805f0f4984 changed class creation to allow create including classInstVars (may be used to avoid recompilation)
Claus Gittinger <cg@exept.de>
parents: 870
diff changeset
  1518
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1519
    "Modified: 16.6.1997 / 11:53:58 / cg"
885
ca805f0f4984 changed class creation to allow create including classInstVars (may be used to avoid recompilation)
Claus Gittinger <cg@exept.de>
parents: 870
diff changeset
  1520
!
ca805f0f4984 changed class creation to allow create including classInstVars (may be used to avoid recompilation)
Claus Gittinger <cg@exept.de>
parents: 870
diff changeset
  1521
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1522
new
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1523
    "create & return a new metaclass (a classes class).
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1524
     Since metaclasses only have one instance (the class),
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1525
     complain if there is already one.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1526
     You get a new class by sending #new to the returned metaclass
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1527
     (confusing - isn't it ?)"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1528
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1529
    |newClass|
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1530
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1531
    myClass notNil ifTrue:[
4522
29a6625dc7b1 error: vs. error:mayProceed:
Claus Gittinger <cg@exept.de>
parents: 4497
diff changeset
  1532
        self error:'Each metaclass may only have one instance'.
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1533
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1534
    newClass := self basicNew.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1535
    newClass setSuperclass:Object
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1536
          methodDictionary:MethodDictionary new
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1537
                instSize:0 
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1538
                   flags:(Behavior flagBehavior).
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1539
    myClass := newClass.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1540
    ^ newClass
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1541
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1542
    "Modified: 1.4.1997 / 15:44:50 / stefan"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1543
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1544
3640
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1545
!Metaclass methodsFor:'fileOut'!
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1546
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1547
fileOutDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1548
    myClass fileOutClassInstVarDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1549
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1550
    "Modified: / 21.6.1998 / 04:10:02 / cg"
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1551
! !
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1552
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1553
!Metaclass methodsFor:'private'!
68
59faa75185ba *** empty log message ***
claus
parents: 49
diff changeset
  1554
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1555
checkConventionsFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1556
    "Check for some 'considered bad-style' things, like lower case names.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1557
     NOTICE:
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1558
     I dont like the confirmers below - we need a notifying: argument, to give
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1559
     the outer codeview a chance to highlight the error.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1560
     (but thats how its defined in the book - maybe I will change it anyway).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1561
    "
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1562
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1563
    |names idx what doChecks answ|
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1564
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1565
    doChecks := ConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1566
    doChecks == false ifTrue:[^ true].
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1567
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1568
    "let user confirm, if the classname is no good"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1569
    className first isUppercase ifFalse:[
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1570
        aClass == Namespace ifTrue:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1571
            what := 'namespace'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1572
        ] ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1573
            what := 'class'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1574
        ].
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1575
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1576
        answ := Class classConventionViolationConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1577
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1578
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1579
        (self confirm:(what , ' name ''' , className , 
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1580
                             ''' should start with an uppercase letter
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1581
(by convention only)
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1582
2008
381a5160be9a only a nicer warning message
Claus Gittinger <cg@exept.de>
parents: 2002
diff changeset
  1583
install anyway ?') withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1584
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1585
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1586
        ]
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1587
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1588
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1589
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1590
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1591
    "let user confirm, if any instvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
  1592
    (idx := names findFirst:[:word | word first isUppercase]) ~~ 0 ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1593
        answ := Class classConventionViolationConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1594
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1595
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1596
        (self confirm:className , ': instance variable named ''' , (names at:idx) asText allBold , ''' 
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1597
should start with a lowercase letter (by convention only).
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1598
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1599
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1600
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1601
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1602
        ]
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1603
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1604
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1605
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1606
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1607
    "let user confirm, if any classvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
  1608
    (idx := names findFirst:[:word | word first isLowercase]) ~~ 0 ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1609
        answ := Class classConventionViolationConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1610
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1611
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1612
        (self confirm:className , ': class variable named ''' , (names at:idx) asText allBold  , ''' 
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1613
should start with an uppercase letter (by convention only).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1614
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1615
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1616
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1617
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1618
        ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1619
    ].
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1620
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1621
    ^ true
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1622
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1623
    "Created: / 15.10.1996 / 11:56:38 / cg"
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1624
    "Modified: / 3.2.1999 / 11:24:52 / cg"
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1625
    "Modified: / 18.3.1999 / 18:22:47 / stefan"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1626
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1627
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1628
checkForAliasesOf:oldClass with:newClass
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1629
    "oldClass changed its identity (now use newClass).
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1630
     check if there are any global aliases, which should also be changed"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1631
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1632
    Smalltalk keysAndValuesDo:[:nm :o |
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1633
	o == oldClass ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1634
	    nm ~~ oldClass name ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1635
		(self confirm:('The global `' , nm , ''' is an alias for ' , oldClass name , '.\\Change it to the new class ?') withCRs)
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1636
		ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1637
		    Smalltalk at:nm put:newClass
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1638
		]
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1639
	    ]
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1640
	]
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1641
    ].
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1642
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1643
    "Created: 22.10.1996 / 15:20:59 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1644
    "Modified: 22.10.1996 / 15:25:50 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1645
!
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1646
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1647
checkInstvarRedefsWith:stringOfInstVarNames subclassOf:aClass old:oldClass name:newName
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1648
    |superInstVars msg|
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1649
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1650
    aClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1651
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1652
         check for instVar redef of superClass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1653
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1654
        superInstVars := aClass allInstVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1655
        stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1656
            (superInstVars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1657
                (oldClass notNil 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1658
                and:[stringOfInstVarNames = oldClass instanceVariableString])
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1659
                ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1660
                    Transcript showCR:('instVar conflict in `' , newName , ''' for `' , nm , ''' due to superclass change.').
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1661
                    msg := 'instVar conflict in `' , newName , ''' for `' , nm , ''' due to superclass change.\You now have two different instVar slots with the same name.\\Dont forget to fix this later.'.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1662
                    self warn:msg withCRs.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1663
                ] ifFalse:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1664
                    Transcript showCR:('instVar `' , nm , ''' is already defined in a superclass of `' , newName , '''.').
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1665
                    msg := 'instVar `' , nm , ''' is already defined in a superclass.\Change the definition of `' , newName , ''' anyway ?\\Notice: you must fix the superclass later.'.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1666
                    ^ self confirm:msg withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1667
                ].
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1668
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1669
        ].
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1670
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1671
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1672
    oldClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1673
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1674
         check for instVar redefs in subclass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1675
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1676
        oldClass allSubclassesDo:[:sub |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1677
            |vars|
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1678
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1679
            vars := sub instVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1680
            stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1681
                (vars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1682
                    ^ self confirm:('subclass ' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1683
                                    , sub name 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1684
                                    , ' already defines an instVar named `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1685
                                    , nm 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1686
                                    , '''.\\Change the definition of `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1687
                                    , newName 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1688
                                    , ''' anyway ?\Notice: you must fix the subclass later.'
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1689
                                   ) withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1690
                ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1691
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1692
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1693
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1694
    ^ true
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1695
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1696
    "Created: 29.1.1997 / 17:42:11 / cg"
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1697
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1698
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1699
checkValidVarNamesFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1700
    "Check for some 'considered bad-style' things, like lower case names.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1701
     NOTICE:
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1702
     I dont like the confirmers below - we need a notifying: argument, to give
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1703
     the outer codeview a chance to highlight the error.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1704
     (but thats how its defined in the book - maybe I will change it anyway).
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1705
    "
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1706
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1707
    |names|
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1708
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1709
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1710
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1711
    "check for instvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1712
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1713
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1714
            self warn:'instance variable ''' , aName , '''\occurs multiple times in instVarString.\\Class not installed.' withCRs.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1715
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1716
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1717
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1718
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1719
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1720
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1721
    "check for classvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1722
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1723
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1724
            self warn:'class variable ''' , aName , '''\occurs multiple times in classVarString.\\Class not installed.' withCRs.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1725
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1726
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1727
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1728
    ^ true
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1729
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1730
    "Created: 8.1.1997 / 21:09:14 / cg"
2106
f9d613a66493 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2103
diff changeset
  1731
    "Modified: 9.1.1997 / 02:10:02 / cg"
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1732
!
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1733
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1734
copyInvalidatedMethodsFrom:oldClass for:newClass
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1735
    "copy all methods from oldClass to newClass and change their code
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1736
     to a trap method reporting an error.
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1737
     This is done when a class has changed its layout or inheritance,
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1738
     before recompilation is attempted.
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1739
     This allows us to keep the source while trapping uncompilable (due to
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1740
     now undefined instvars) methods. Later compilation of these methods will show
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1741
     an error on the transcript and lead to the debugger once called."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1742
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 943
diff changeset
  1743
    |trap trapCode trapByteCode oldMethod newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1744
     oldDict newDict|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1745
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1746
    oldDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1747
    newDict := MethodDictionary new:oldDict size.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1748
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1749
    oldDict keysAndValuesDo:[ :sel :mthd |
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1750
	trap := mthd trapMethodForNumArgs:(mthd numArgs).
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1751
	trapCode := trap code.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1752
	trapByteCode := trap byteCode.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1753
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1754
	mthd isWrapped ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1755
	    oldMethod := mthd originalMethod
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1756
	] ifFalse:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1757
	    oldMethod := mthd.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1758
	].
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1759
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1760
	newMethod := oldMethod copy.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1761
	newMethod makeInvalid.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1762
	newDict at:sel put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1763
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1764
        
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1765
    newClass methodDictionary:newDict.
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1766
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1767
    "Modified: 12.6.1996 / 10:44:27 / stefan"
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1768
    "Modified: 4.11.1996 / 22:55:57 / cg"
2
claus
parents: 1
diff changeset
  1769
!
claus
parents: 1
diff changeset
  1770
claus
parents: 1
diff changeset
  1771
copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames
claus
parents: 1
diff changeset
  1772
    "copy all methods from oldClass to newClass. Those methods accessing
claus
parents: 1
diff changeset
  1773
     a variable in setOfNames will be copied as invalid method, leading to
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1774
     a trap when its executed. This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1775
     layout for all methods which are affected by the change."
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1776
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1777
    self copyInvalidatedMethodsFrom:oldClass 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1778
				for:newClass 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1779
		       accessingAny:setOfNames 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1780
			    orSuper:false 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1781
!
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1782
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1783
copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames orSuper:superBoolean
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1784
    "copy all methods from oldClass to newClass. 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1785
     Those methods accessing a variable in setOfNames will be copied as invalid method, 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1786
     leading to a trap when its executed. If superBoolean is true, this is also done
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1787
     for methods accessing super.  This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1788
     layout for all methods which are affected by the change."
2
claus
parents: 1
diff changeset
  1789
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1790
    |p source mustInvalidate
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1791
     oldMethod newMethod methodDict newMethodDict nNames|
2
claus
parents: 1
diff changeset
  1792
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1793
    methodDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1794
    newMethodDict := methodDict copy.
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1795
    nNames := setOfNames size.
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1796
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1797
    methodDict keysAndValuesDo:[:selector :method |
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1798
        method isWrapped ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1799
            oldMethod := method originalMethod
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1800
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1801
            oldMethod := method
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1802
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1803
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1804
        "before parsing (which may take some time),
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1805
         do a string search if its only one variable,
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1806
         we are looking for.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1807
         Could look for more than one variable by string compare, but then
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1808
         parsing it right away may be faster ..."
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1809
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1810
        source := oldMethod source.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1811
        ((nNames == 1) and:[superBoolean not]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1812
            mustInvalidate := (source findString:(setOfNames first)) ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1813
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1814
            ((nNames == 0) and:[superBoolean]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1815
                mustInvalidate := (source findString:'super') ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1816
            ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1817
                mustInvalidate := true
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1818
            ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1819
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1820
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1821
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1822
            "we have to parse it ..."
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1823
            p := Parser parseMethod:source in:newClass.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1824
            (p isNil 
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1825
             or:[(p usedVars includesAny:setOfNames)
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1826
             or:[superBoolean and:[p usesSuper]]]) ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1827
                mustInvalidate := false
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1828
            ]
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1829
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1830
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1831
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1832
            newMethod := oldMethod copy.
4095
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1833
"/            Smalltalk silentLoading ifFalse:[
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1834
"/                Transcript showCR:'invalidating ' , selector , '...'.
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1835
"/	      ].
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1836
            newMethod makeInvalid.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1837
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1838
            newMethod := oldMethod.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1839
        ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1840
        newMethodDict at:selector put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1841
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1842
    newClass methodDictionary:newMethodDict.
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1843
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1844
    "Modified: 7.6.1996 / 08:33:52 / stefan"
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1845
    "Modified: 19.6.1997 / 18:27:09 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1846
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1847
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1848
copyMethodsFrom:oldClass for:newClass
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1849
    "copy all methods from oldClass to newClass.
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1850
     This is used for class-methods when a class has changed, but its metaclass is 
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1851
     unaffected (i.e. classVars/inheritance have not changed) so there is no need
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1852
     to recompile the class methods."
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1853
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1854
    newClass methodDictionary:(oldClass methodDictionary copy).
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1855
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1856
    "Modified: 7.6.1996 / 08:34:43 / stefan"
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1857
!
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1858
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1859
differentInstanceVariableOffsetsIn:class1 and:class2
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1860
    "return a set of instance variable names which have different
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1861
     positions in class1 and class2.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1862
     Also, variables which are only present in one class are returned.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1863
     This is used to find methods which need recompilation after a
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1864
     change in the instance variable layout."
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1865
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1866
    |offsets1 offsets2 changeSet|
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1867
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1868
    changeSet := Set new.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1869
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1870
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1871
     collect the instvar-indices in the old and new class
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1872
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1873
    offsets1 := class1 instanceVariableOffsets.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1874
    offsets2 := class2 instanceVariableOffsets.
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1875
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1876
    "
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1877
     compute the changeset as a set of instance variables, 
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1878
     which have a different position
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1879
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1880
    offsets1 keysAndValuesDo:[:varName :varIndex |
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1881
	(offsets2 includesKey:varName) ifFalse:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1882
	    changeSet add:varName 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1883
	] ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1884
	    (varIndex ~~ (offsets2 at:varName)) ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1885
		changeSet add:varName 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1886
	    ]
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1887
	]
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1888
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1889
    offsets2 keysAndValuesDo:[:varName :varIndex |
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1890
	(offsets1 includesKey:varName) ifFalse:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1891
	    changeSet add:varName
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1892
	] ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1893
	    (varIndex ~~ (offsets1 at:varName)) ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1894
		changeSet add:varName
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1895
	    ]
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1896
	]
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1897
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1898
    ^ changeSet
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1899
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1900
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1901
     View class 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1902
	differentInstanceVariableOffsetsIn:View
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1903
				       and:StandardSystemView
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1904
     View class 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1905
	differentInstanceVariableOffsetsIn:Object 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1906
				       and:Point 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1907
    "
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1908
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1909
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1910
recompileGlobalAccessorsTo:aGlobalKey in:aNamespace except:someClass
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1911
    "when a new class enters a namespace, all accessors to the same-named
4497
f019cfe4a699 tuned recompileGlobalAccessors
Claus Gittinger <cg@exept.de>
parents: 4451
diff changeset
  1912
     class in that namespace must be recompiled"
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1913
4497
f019cfe4a699 tuned recompileGlobalAccessors
Claus Gittinger <cg@exept.de>
parents: 4451
diff changeset
  1914
    aNamespace allPrivateClassesDo:[:aClass |
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1915
        aClass ~~ someClass ifTrue:[
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1916
            aClass isLoaded ifTrue:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1917
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1918
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1919
"/                    Transcript showCR:'recompiling methods in ''' , aClass name , ''' accessing ''' , aGlobalKey , ''''.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1920
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1921
"/                ].
4027
4385bdb59ec1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3998
diff changeset
  1922
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1923
                aClass recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1924
                aClass class recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1925
                "/ actually - must eventually recompile USERS of this namespace too
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1926
            ]
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1927
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1928
    ]
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1929
2340
1225948b7473 no recompilation messages
Claus Gittinger <cg@exept.de>
parents: 2322
diff changeset
  1930
    "Modified: 31.1.1997 / 11:22:57 / cg"
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1931
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1932
4749
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1933
recompileMachineCodeMethodsIn:aClass
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1934
    "recompile all machine-code methods in aClass."
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1935
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1936
    aClass recompileMethodsWithMachineCode.
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1937
    aClass class recompileMethodsWithMachineCode.
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1938
!
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1939
1047
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1940
setSoleInstance:aClass 
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1941
    myClass := aClass
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1942
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1943
    "Created: 12.12.1995 / 13:46:22 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1944
! !
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1945
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1946
!Metaclass methodsFor:'queries'!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1947
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1948
category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1949
    "return my category"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1950
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1951
    ^ myClass category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1952
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1953
    "Created: 2.4.1997 / 00:46:11 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1954
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1955
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1956
comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1957
    "return my comment"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1958
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1959
    ^ myClass comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1960
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1961
    "Created: 2.4.1997 / 00:51:35 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1962
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1963
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1964
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1965
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1966
     Here, true is returned for myself, false for subclasses."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1967
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1968
    ^ self == Metaclass class or:[self == Metaclass]
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1969
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1970
    "Created: 15.4.1996 / 17:17:34 / cg"
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1971
    "Modified: 23.4.1996 / 15:59:37 / cg"
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1972
!
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1973
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1974
isMeta
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1975
    "return true, if the receiver is some kind of metaclass;
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1976
     true is returned here. Redefines isMeta in Object"
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1977
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1978
    ^ true
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1979
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1980
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1981
name
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1982
    "return my name - that is the name of my sole class, with ' class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1983
     appended."
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1984
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1985
    |nm|
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1986
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1987
    myClass isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1988
        ^ #someMetaclass
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1989
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1990
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1991
    (nm := myClass name) isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1992
        'Metaclass [warning]: no name in my class' errorPrintCR.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1993
        ^ #'unnamed class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1994
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1995
    ^ nm , ' class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1996
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1997
    "Modified: 10.1.1997 / 17:55:08 / cg"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1998
    "Modified: 1.4.1997 / 15:53:11 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1999
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2000
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2001
nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2002
    "return the nameSpace I am contained in.
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2003
     Due to the implementation of nameSpaces (as classVariables),
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2004
     a class can only be contained in one nameSpace (which is the desired)"
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2005
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2006
    "/ this information is in the class
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2007
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2008
    ^ myClass nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2009
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2010
    "Created: 7.11.1996 / 13:18:52 / cg"
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2011
!
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  2012
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2013
owningClass
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2014
    "return nil here - regular metaclasses are never private"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2015
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2016
    ^ nil
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2017
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2018
    "Created: 12.10.1996 / 20:12:16 / cg"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2019
!
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  2020
1757
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2021
package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2022
    "return my package-id"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2023
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2024
    ^ myClass package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2025
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2026
    "Created: 15.10.1996 / 19:44:51 / cg"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2027
!
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  2028
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  2029
soleInstance 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  2030
    "return my sole class."
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  2031
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  2032
    ^ myClass
2047
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2033
!
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2034
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2035
topOwningClass
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2036
    "return nil here - regular metaclasses are never private"
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2037
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2038
    ^ nil
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2039
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  2040
    "Created: 3.1.1997 / 19:18:06 / cg"
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  2041
! !
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  2042
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2043
!Metaclass methodsFor:'source management'!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2044
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2045
binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2046
    ^ myClass binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2047
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2048
    "
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2049
     Object binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2050
     Object class binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2051
    "
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2052
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2053
    "Modified: 2.4.1997 / 01:17:04 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2054
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2055
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2056
sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2057
    "return the classes source stream"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2058
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2059
    ^ myClass sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2060
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2061
    "Modified: 1.4.1997 / 14:36:31 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2062
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2063
4780
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  2064
sourceStreamFor:sourceFileName
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  2065
    "return the sourceStream for a sourceFileName"
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2066
4780
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  2067
    ^ myClass sourceStreamFor:sourceFileName
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2068
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2069
    "Modified: 1.4.1997 / 14:36:38 / stefan"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2070
! !
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2071
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  2072
!Metaclass class methodsFor:'documentation'!
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2073
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2074
version
5027
6a497c16e342 must patch methods packageId, when the classes
Claus Gittinger <cg@exept.de>
parents: 4804
diff changeset
  2075
    ^ '$Header: /cvs/stx/stx/libbasic/Metaclass.st,v 1.158 1999-11-29 14:21:58 cg Exp $'
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2076
! !
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  2077
Metaclass initialize!