Metaclass.st
author Claus Gittinger <cg@exept.de>
Wed, 04 Aug 1999 16:10:22 +0200
changeset 4522 29a6625dc7b1
parent 4497 f019cfe4a699
child 4585 e0271fc3a2fd
permissions -rw-r--r--
error: vs. error:mayProceed:
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
3596
d19a2f605da3 also allow catching of class redefinitions.
Claus Gittinger <cg@exept.de>
parents: 3589
diff changeset
   554
     recompileGlobalAccessTo stringOfClassInstVarNames answer|
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   555
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   556
    "NOTICE:
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   557
     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
   558
     I dont like it anymore :-) 
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   559
     (well, at least, its a good test for the compilers ability 
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   560
      to handle big, complex methods ;-)
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   561
     take it as an example of bad coding style ...
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   562
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   563
     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
   564
     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
   565
    "
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   566
1733
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   567
    (newName isSymbol not
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   568
    or:[newName size == 0]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   569
        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
   570
    ].
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   571
    newName first isLetter ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   572
        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
   573
    ].
2cc88c50db99 check for valid className (symbol & startsWith a letter).
Claus Gittinger <cg@exept.de>
parents: 1732
diff changeset
   574
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   575
    "check for invalid subclassing of UndefinedObject and SmallInteger"
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   576
    aClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   577
        aClass canBeSubclassed ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   578
            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
   579
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   580
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   581
3049
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   582
    "/ owner must be loaded
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   583
    (aSystemDictionaryOrClass notNil and:[aSystemDictionaryOrClass isLoaded not]) ifTrue:[
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   584
        aSystemDictionaryOrClass autoload
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   585
    ].
a635eb5f1f6d autoload a privateclasses owner
Claus Gittinger <cg@exept.de>
parents: 3012
diff changeset
   586
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   587
    (stringOfInstVarNames size > 0
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   588
    or:[stringOfClassVarNames size > 0]) ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   589
        "
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   590
         Check for invalid variable names (duplicates)
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   591
        "
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   592
        (self 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   593
            checkValidVarNamesFor:newName
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   594
            subClassOf:aClass
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   595
            instVarNames:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   596
            classVarNames:stringOfClassVarNames) 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   597
        ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   598
            ^ nil
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   599
        ].
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   600
        nInstVars := stringOfInstVarNames countWords.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   601
    ] ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   602
        nInstVars := 0.
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   603
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   604
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   605
    nameString := newName asString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   606
    classSymbol := newName asSymbol.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   607
    newComment := commentString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   608
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   609
    namespace := aSystemDictionaryOrClass.
1910
65a41a013d9c more care fore namespaces
Claus Gittinger <cg@exept.de>
parents: 1904
diff changeset
   610
    nameKey := classSymbol.
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   611
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   612
    (namespace notNil
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   613
    and:[namespace isNamespace not]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   614
        thisIsPrivate := true.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   615
        realNewName := (namespace name , '::' , classSymbol) asSymbol.
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   616
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   617
        thisIsPrivate := false.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   618
        realNewName := classSymbol.
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
   619
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   620
        "/ does the name imply a nameSpace ?
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   621
        ((idx := realNewName indexOf:$:)) ~~ 0 ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   622
            "/ check for this namespace to exist
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   623
            nsName := realNewName copyTo:(idx - 1).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   624
            nsName := nsName asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   625
            (realNewName indexOf:$: startingAt:(idx+2)) ~~ 0 ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   626
                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
   627
                ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   628
            ].
1830
1f4118554dae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1829
diff changeset
   629
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   630
            namespace := Smalltalk at:nsName ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   631
            namespace isNamespace ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   632
                namespace isNil ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   633
                    (Class createNameSpaceQuerySignal query
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   634
                    or:[(self 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   635
                            confirm:('nonexistent namespace: `' , nsName , '''.\\Create ?') withCRs)])
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   636
                    ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   637
                    namespace := Namespace name:nsName.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   638
                ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   639
                    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
   640
                    ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   641
                ]
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
            namespace isNamespace ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   644
                nameKey := (classSymbol copyFrom:(nsName size + 3)) asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   645
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   646
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   647
            (namespace notNil and:[namespace ~~ Smalltalk]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   648
                realNewName := (namespace name , '::' , classSymbol) asSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   649
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   650
        ]
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   651
    ].
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   652
2233
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   653
    (aClass notNil and:[realNewName = aClass name]) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   654
        self error:'trying to create circular class definition'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   655
        ^ nil
2233
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   656
    ].
0dd796870a34 a cyclic definition is not always what is seems to be
Claus Gittinger <cg@exept.de>
parents: 2132
diff changeset
   657
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   658
    "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
   659
    namespace notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   660
        thisIsPrivate ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   661
            oldClass := namespace at:nameKey ifAbsent:[nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   662
        ] ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   663
            oldClass := namespace privateClassesAt:classSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   664
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   665
    ].
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
   666
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   667
    (oldClass isBehavior and:[oldClass isLoaded]) ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   668
        oldClass := nil.
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   669
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   670
        thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   671
            Compiler warnSTXSpecials ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   672
                (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
   673
                ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   674
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   675
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   676
    ] ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   677
        oldClass name ~= realNewName ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   678
            (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
   679
            ifFalse:[^ nil].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   680
            oldClass := nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   681
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   682
            "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   683
            "/ some consisteny checks
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   684
            "/
4451
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   685
            oldClass allSuperclasses do:[:cls |
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   686
                cls name = realNewName ifTrue:[
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   687
                    self error:'trying to create circular class definition'.
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   688
                    ^ nil
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   689
                ]
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   690
            ].
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   691
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   692
            aClass notNil ifTrue:[
ca4d77871c1c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4399
diff changeset
   693
                aClass allSuperclasses do:[:cls |
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   694
                    cls name = realNewName ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   695
                        self error:'trying to create circular class definition'.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   696
                        ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   697
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   698
                ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   699
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   700
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   701
            newComment isNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   702
                newComment := oldClass comment
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   703
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   704
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   705
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   706
             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
   707
             and the existing is not an autoload class.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   708
             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
   709
             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
   710
             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
   711
             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
   712
             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
   713
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   714
            oldClass isLoaded ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   715
                oldClass category ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   716
                    oldClass instanceVariableString asCollectionOfWords 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   717
                    ~= stringOfInstVarNames asCollectionOfWords ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   718
                        (self confirm:'a class named ' , oldClass name , 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   719
                                      ' already exists -\\create (i.e. change) anyway ?' withCRs)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   720
                        ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   721
                            ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   722
                        ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   723
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   724
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   725
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   726
2668
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
            "/ 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
   729
            "/ (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
   730
            "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   731
            ((variableBoolean == true) and:[pointersBoolean]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   732
                (oldClass isKindOf:Set class) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   733
                    (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
   734
                    ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   735
                        ^ nil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   736
                    ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   737
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   738
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   739
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   740
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   741
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   742
    "/ 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
   743
    "/ 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
   744
    "/ - 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
   745
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   746
    "/ NOTICE:
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   747
    "/ 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
   748
    "/ 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
   749
    "/ (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
   750
    "/ - or use upQueries in future versions.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   751
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   752
    oldClass isNil ifTrue:[
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   753
        (stringOfInstVarNames size > 0
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   754
        or:[stringOfClassVarNames size > 0]) ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   755
            (self 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   756
                checkConventionsFor:newName
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   757
                subClassOf:aClass
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   758
                instVarNames:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   759
                classVarNames:stringOfClassVarNames) 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   760
            ifFalse:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   761
                ^ nil
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   762
            ]
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   763
        ].
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   764
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   765
        (self
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   766
            checkInstvarRedefsWith:stringOfInstVarNames 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   767
            subclassOf:aClass 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   768
            old:oldClass 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   769
            name:newName) ifFalse:[^ nil].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   770
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   771
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   772
    stringOfClassInstVarNamesOrNil isNil ifTrue:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   773
        oldClass isNil ifTrue:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   774
            stringOfClassInstVarNames := ''
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   775
        ] ifFalse:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   776
            stringOfClassInstVarNames := oldClass class instanceVariableString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   777
        ]
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   778
    ] ifFalse:[
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   779
        stringOfClassInstVarNames := stringOfClassInstVarNamesOrNil
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   780
    ].
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
   781
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   782
    nClassInstVars := stringOfClassInstVarNames countWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   783
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   784
    "create the metaclass first"
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   785
    thisIsPrivate ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   786
        newMetaclass := PrivateMetaclass new
1725
eaa45019ad44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1724
diff changeset
   787
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   788
        newMetaclass := Metaclass new.
1725
eaa45019ad44 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1724
diff changeset
   789
    ].
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   790
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   791
        newMetaclass setSuperclass:Class.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   792
        newMetaclass instSize:(Class instSize + nClassInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   793
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   794
        newMetaclass setSuperclass:(aClass class).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   795
        newMetaclass instSize:(aClass class instSize + nClassInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   796
    ].
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   797
"/    newMetaclass classVariableString:''.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   798
    newMetaclass setInstanceVariableString:stringOfClassInstVarNames.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   799
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   800
    "then let the new meta create the class"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   801
    newClass := newMetaclass new.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   802
    newClass setSuperclass:aClass.
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   803
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   804
        newClass instSize:nInstVars.
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   805
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   806
        newClass instSize:(aClass instSize + nInstVars).
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   807
    ].
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   808
1749
c146bb48d03b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1742
diff changeset
   809
    thisIsPrivate ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   810
        "/ some private class
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   811
        newMetaclass setOwningClass:namespace.
1921
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   812
    ].
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   813
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   814
    (namespace notNil 
bfaa8f683985 handle namespace-classes
Claus Gittinger <cg@exept.de>
parents: 1920
diff changeset
   815
    and:[namespace ~~ Smalltalk]) ifTrue:[
4399
b2ef9e2347bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4398
diff changeset
   816
        newClass setName:realNewName.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   817
        "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   818
        "/ if that key exists in smalltalk,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   819
        "/ must recompile everything in that nameSpace,
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   820
        "/ which refers to the unprefixed global.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   821
        "/
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   822
        recompileGlobalAccessTo := nameKey.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   823
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   824
        newClass setName:classSymbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   825
        recompileGlobalAccessTo := nil.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   826
    ].
4029
eb75f8295dfe recompilation when new classes arrive (fixed for private classes)
Claus Gittinger <cg@exept.de>
parents: 4027
diff changeset
   827
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   828
    newClass setComment:newComment category:categoryString.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   829
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   830
    oldClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   831
        "/ copy over classInstanceVariables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   832
        "/ 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
   833
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   834
        oldCIVNames := oldClass class allInstVarNames asSet.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   835
        newCIVNames := newClass class allInstVarNames asSet.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   836
        Class class allInstVarNames do:[:n |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   837
             oldCIVNames remove:n ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   838
             newCIVNames remove:n ifAbsent:nil.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   839
        ].
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   840
            
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   841
        newCIVNames size > 0 ifTrue:[
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   842
"/            Smalltalk silentLoading ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   843
"/                Transcript show:'preserving classInstVar values: '; showCR:newCIVNames.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   844
"/            ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   845
            newCIVNames do:[:n |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   846
                (oldCIVNames includes:n) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   847
                    newClass instVarNamed:n put:(oldClass instVarNamed:n)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   848
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   849
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   850
        ].
1778
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   851
    ].
fd558245c662 preserve values of classInstVars when creating a new class
Claus Gittinger <cg@exept.de>
parents: 1776
diff changeset
   852
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   853
    "/ set the new classes package
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   854
    "/ but prefer the old package
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   855
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   856
    oldClass isNil ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   857
        pkg := Class packageQuerySignal query.
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   858
    ] ifFalse:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   859
"/        pkg := Class packageQuerySignal query.
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   860
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   861
        pkg := oldPkg := oldClass package.
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   862
        oldClass isLoaded ifTrue:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   863
            "/ if not autoloading, check if we are in another project-package
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   864
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   865
            pkg := Class packageQuerySignal query.
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   866
            oldPkg ~= pkg ifTrue:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   867
                newClass package:pkg.
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   868
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   869
                answer := Class classRedefinitionSignal
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   870
                              raiseRequestWith:(oldClass -> newClass)
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   871
                              errorString:('redefinition of class: ' , oldClass name).
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   872
                answer == #keep ifTrue:[
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   873
"/                    Smalltalk silentLoading ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   874
"/                      Transcript showCR:('keeping original package: ''' , oldPkg , ''' of class: ' , oldClass name).
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
   875
"/                    ].
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   876
                    pkg := oldPkg.
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   877
                ] ifFalse:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   878
                    answer ~~ #continue ifTrue:[
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   879
                        ^ nil
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   880
                   ].
3596
d19a2f605da3 also allow catching of class redefinitions.
Claus Gittinger <cg@exept.de>
parents: 3589
diff changeset
   881
                ].
d19a2f605da3 also allow catching of class redefinitions.
Claus Gittinger <cg@exept.de>
parents: 3589
diff changeset
   882
            ].
4034
56e754b6ded8 preserve package (when changing a classes definition).
Claus Gittinger <cg@exept.de>
parents: 4032
diff changeset
   883
            newClass setBinaryRevision:(oldClass binaryRevision).
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   884
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   885
    ].
1835
e90fe211cdf1 oops - corrupted the package on autolaod
Claus Gittinger <cg@exept.de>
parents: 1830
diff changeset
   886
    pkg notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   887
        "/ newMetaclass package:pkg.
3589
fbb0b1f59758 removed leftover transcript message
Claus Gittinger <cg@exept.de>
parents: 3587
diff changeset
   888
        "/ 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
   889
        newClass package:pkg.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   890
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   891
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   892
    "/ Allowing non-booleans as variableBoolean
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   893
    "/ 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
   894
    "/ 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
   895
    "/ 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
   896
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   897
    (variableBoolean == true) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   898
        pointersBoolean ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   899
            newFlags := Behavior flagPointers
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   900
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   901
            wordsBoolean ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   902
                newFlags := Behavior flagWords
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   903
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   904
                newFlags := Behavior flagBytes
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   905
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   906
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   907
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   908
        "/ false or symbol.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   909
        newFlags := Behavior flagForSymbolic:variableBoolean.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   910
    ].
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   911
    aClass isNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   912
        superFlags := 0
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   913
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   914
        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
   915
    ].
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
   916
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   917
    oldClass notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   918
        oldClass isBuiltInClass ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   919
            "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   920
             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
   921
             which might have other flag bits ...
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   922
            "
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   923
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   924
            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
   925
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   926
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   927
    newClass flags:(newFlags bitOr:superFlags). "preserve  inherited special bits"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   928
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   929
    (nInstVars ~~ 0) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   930
        newClass setInstanceVariableString:stringOfInstVarNames
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   931
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   932
    oldClass notNil ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   933
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   934
        "/ 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
   935
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   936
        newClass setClassVariableString:(oldClass classVariableString).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   937
        (spec := oldClass primitiveSpec) notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   938
            newClass primitiveSpec:spec.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   939
            newClass setClassFilename:(oldClass classFilename).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   940
        ]        
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   941
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   942
    newClass classVariableString:stringOfClassVarNames.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   943
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   944
    "/ 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
   945
    "/ (also for autoloaded classes)
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   946
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   947
    (oldClass isNil or:[oldClass isLoaded not]) ifTrue:[
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   948
        (oldClass isNil and:[changed]) ifTrue:[
2584
d8449ccdc4a8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2564
diff changeset
   949
            aClass ~~ Autoload ifTrue:[
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   950
                newClass addChangeRecordForClass:newClass.
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
   951
            ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   952
        ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
   953
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   954
        commentString notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   955
            newClass comment:commentString
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   956
        ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   957
        namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   958
            thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   959
                namespace privateClassesAt:classSymbol put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   960
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   961
                namespace at:nameKey put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   962
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   963
        ].
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   964
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   965
"/        oldClass isNil ifTrue:[
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   966
"/            newClass package:(Class packageQuerySignal query)
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   967
"/        ].
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
   968
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   969
        oldClass notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   970
            "/ 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
   971
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   972
            "/ actually, could optimize to:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   973
            "/  Behavior updateSuperclassInfoFor:oldClass superclass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   974
            "/  Behavior updateSuperclassInfoFor:newClass superclass.
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
            Behavior flushSubclassInfo.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   977
        ].
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
        namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   980
            thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   981
                namespace changed.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   982
            ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   983
                namespace changed:#newClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   984
                namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   985
                    Smalltalk changed:#newClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   986
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   987
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   988
        ].
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   989
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   990
        "/ be very careful, when adding classes
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   991
        "/ to a namespace or adding a privateClass. 
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   992
        "/ When adding, all methods within that namespace/owning class
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   993
        "/ which access the unprefixed-global,
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   994
        "/ must be recompiled (so they access the new class)
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   995
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   996
        recompileGlobalAccessTo notNil ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   997
            self recompileGlobalAccessorsTo:recompileGlobalAccessTo
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   998
                 in:namespace
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   999
                 except:newClass
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1000
        ].
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1001
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1002
        ^ newClass
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1003
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1004
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1005
    "/ 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
  1006
    "/ definition of an existing class ....
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1007
    "/ 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
  1008
    "/ compiled code into interpreted ...
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1009
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1010
    oldInstVars := oldClass instanceVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1011
    newInstVars := newClass instanceVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1012
    oldClassVars := oldClass classVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1013
    newClassVars := newClass classVariableString asCollectionOfWords.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1014
2039
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1015
    oldSuperClass := oldClass superclass.
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1016
    newSuperClass := newClass superclass.
6a03b5a9d4e2 handle nil subclasses here
Claus Gittinger <cg@exept.de>
parents: 2035
diff changeset
  1017
    superClassChange := oldSuperClass ~~ newSuperClass.
2002
6af05dcbebf8 no need to recompile class methods, if
Claus Gittinger <cg@exept.de>
parents: 1937
diff changeset
  1018
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1019
    "/ 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
  1020
    "/ inheritance do not change.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1021
    "/ 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
  1022
    "/ (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
  1023
6af05dcbebf8 no need to recompile class methods, if
Claus Gittinger <cg@exept.de>
parents: 1937
diff changeset
  1024
    superClassChange ifFalse:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1025
      (oldClass instSize == newClass instSize) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1026
        (oldClass flags == newClass flags) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1027
          (oldClass name = newClass name) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1028
            (oldInstVars = newInstVars) ifTrue:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1029
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1030
              (newComment ~= oldClass comment) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1031
                  oldClass setComment:newComment.        "writes a change-chunk"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1032
                  oldClass changed:#comment with:oldClass comment.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1033
                  changed ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1034
                      oldClass addChangeRecordForClassComment:oldClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1035
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1036
              ]. 
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1037
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1038
              (oldClassVars = newClassVars) ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1039
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1040
                "/ 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
  1041
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1042
                anyChange := false.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1043
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1044
                oldClass setInstanceVariableString:(newClass instanceVariableString).
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1045
                oldClass setClassVariableString:(newClass classVariableString).
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1046
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1047
                oldClass category ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1048
                    oldClass category:categoryString. 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1049
                    changed ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1050
                        newClass addChangeRecordForClass:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1051
                    ].    
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1052
                    namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1053
                        thisIsPrivate ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1054
                            "notify change of category"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1055
                            namespace changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1056
                            namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1057
                                Smalltalk changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1058
                            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1059
                        ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1060
                    ]
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
                "notify change of class"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1063
"/                oldClass changed.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1064
                ^ oldClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1065
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1066
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1067
              "/ 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
  1068
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1069
              oldClass category ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1070
                  "notify change of organization"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1071
                  oldClass category:categoryString. 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1072
                  namespace notNil ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1073
                       thisIsPrivate ifFalse:[ 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1074
                            "notify change of organization"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1075
                            namespace changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1076
                            namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1077
                                Smalltalk changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1078
                            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1079
                        ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1080
                  ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1081
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1082
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1083
              "/ set class variable string; 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1084
              "/ this also updates the set of class variables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1085
              "/ by creating new / deleting obsolete ones.
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1086
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1087
              oldClass classVariableString:stringOfClassVarNames.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1088
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1089
              "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1090
               get the set of changed class variables
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1091
              "
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1092
              changeSet1 := Set new.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1093
              oldClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1094
                  (newClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1095
                      "/ a removed classVar;
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1096
                      "/ must recompile methods accessing that one:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1097
                      "/ access was: classVar; now: global.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1098
                      changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1099
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1100
              ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1101
              newClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1102
                  (oldClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1103
                      "/ an added classVar;
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1104
                      "/ must recompile methods accessing that one:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1105
                      "/ access was: global; now: classVar.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1106
                      "/ 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
  1107
                      "/ 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
  1108
"/ 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
  1109
"/                      (Smalltalk includesKey:nm asSymbol) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1110
                          changeSet1 add:nm
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1111
"/                      ]  
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1112
                  ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1113
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1114
4111
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1115
              changeSet1 notEmpty ifTrue:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1116
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1117
                  "/ recompile all methods accessing set of changed classvars
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1118
                  "/ here and also in all subclasses ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1119
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1120
                  "/ 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
  1121
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1122
                  Class withoutUpdatingChangesDo:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1123
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1124
"/                      Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1125
"/                          Transcript showCR:'recompiling class & inst methods accessing ' , changeSet1 printString.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1126
"/                          Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1127
"/                      ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1128
                      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
  1129
                          aClass class recompileMethodsAccessingAnyClassvarOrGlobal:changeSet1.
dd1d4e2afab7 faster recompilation if only a classVar was added/removed/renamed.
Claus Gittinger <cg@exept.de>
parents: 4095
diff changeset
  1130
                          aClass recompileMethodsAccessingAnyClassvarOrGlobal:changeSet1.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1131
                      ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1132
                  ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1133
              ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1134
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1135
              "notify change of class"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1136
              changed ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1137
                  oldClass addChangeRecordForClass:oldClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1138
              ].  
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1139
              oldClass changed:#definition.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1140
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1141
              ^ oldClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1142
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1143
          ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1144
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1145
      ]
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1146
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1147
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1148
    "/ here we enter the darkness of mordor ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1149
    "/ 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
  1150
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1151
    (newComment ~= oldClass comment) ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1152
        newClass comment:newComment
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1153
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1154
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1155
    "/ 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
  1156
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1157
    (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
  1158
        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
  1159
        ^ oldClass
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1160
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1161
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1162
    "/ 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
  1163
    Behavior flushSubclassInfo.
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1164
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1165
    "/ 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
  1166
    "/ forced redefinition of this class; 
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1167
    "/ 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
  1168
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1169
    changed ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1170
        (superClassChange 
3614
51d01f893c63 care for nil superclass when comparing names.
Claus Gittinger <cg@exept.de>
parents: 3596
diff changeset
  1171
         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
  1172
         and:[(oldClassVars = newClassVars) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1173
         and:[(oldInstVars = newInstVars)
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1174
         and:[newComment = oldClass comment]]]]) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1175
            newClass addChangeRecordForClass:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1176
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1177
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1178
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1179
    "/ care for class methods ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1180
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1181
    changeSet1 := Set new.
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
    classVarChange := false.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1184
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1185
    superClassChange ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1186
        (oldSuperClass notNil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1187
        and:[newSuperClass notNil
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1188
        and:[oldSuperClass allClassVarNames = newSuperClass allClassVarNames
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1189
        and:[oldSuperClass name = newSuperClass name
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1190
        and:[oldClassVars = newClassVars]]]])
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1191
        ifTrue:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1192
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1193
"/            Transcript showCR:'keep class methods (same classvars)'.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1194
"/            Transcript endEntry.
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1195
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1196
            "/ class methods still work
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1197
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1198
            self copyMethodsFrom:(oldClass class) for:newMetaclass.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1199
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1200
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1201
"/                Transcript showCR:'recompiling class methods accessing super ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1202
"/                Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1203
"/            ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1204
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1205
            "/ however, those accessing super must be recompiled
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1206
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1207
            self copyInvalidatedMethodsFrom:(oldClass class) 
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1208
                                        for:newMetaclass 
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1209
                               accessingAny:#()
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1210
                                    orSuper:true.
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1211
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1212
            "/ superclass changed:
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1213
            "/  must recompile all class methods accessing ANY classvar
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1214
            "/  (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
  1215
            "/   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
  1216
            "/   and both have no new classvariables in between.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1217
            "/   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
  1218
            "/   the inheritance chain.)
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1219
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1220
            oldClass allClassVarNames do:[:nm | changeSet1 add:nm].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1221
            newClass allClassVarNames do:[:nm | changeSet1 add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1222
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1223
"/            Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1224
"/                Transcript showCR:'recompiling class methods accessing any classvar or super ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1225
"/                Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1226
"/            ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1227
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1228
            self copyInvalidatedMethodsFrom:(oldClass class) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1229
                                        for:newMetaclass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1230
                               accessingAny:changeSet1
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1231
                                    orSuper:true.
2684
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1232
        ].
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1233
        newMetaclass recompileInvalidatedMethods.
011188940530 recompile class methods accessing super ...
Claus Gittinger <cg@exept.de>
parents: 2668
diff changeset
  1234
    ] ifFalse:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1235
        "/ 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
  1236
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1237
        classVarChange := oldClassVars ~= newClassVars.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1238
        classVarChange ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1239
            oldClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1240
                (newClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1241
                    changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1242
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1243
            ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1244
            newClassVars do:[:nm |
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1245
                (oldClassVars includes:nm) ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1246
                    changeSet1 add:nm
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1247
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1248
            ].
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1249
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1250
            "/ must recompile some class-methods
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1251
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 ' , changeSet1 printString.
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) for:newMetaclass accessingAny:changeSet1.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1258
            newMetaclass recompileInvalidatedMethods.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1259
        ] ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1260
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1261
            "/ class methods still work
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1262
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1263
            self copyMethodsFrom:(oldClass class) for:newMetaclass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1264
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1265
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1266
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1267
    "/ care for instance methods ...
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1268
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1269
    superClassChange ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1270
        "/ superclass changed,
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1271
        "/  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
  1272
        "/  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
  1273
        "/  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
  1274
        "/  which refer to an instvar with a different inst-index
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1275
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1276
        "/ the changeset consists of instance variables, 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1277
        "/ with a different position
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
        changeSet2 := self differentInstanceVariableOffsetsIn:oldClass and:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1280
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1281
        "/ merge in the changed class variables
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1282
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1283
        changeSet1 do:[:nm | changeSet2 add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1284
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1285
"/        Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1286
"/             Transcript showCR:'recompiling instance methods accessing ' , changeSet2 printString , ' [superclass change]...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1287
"/             Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1288
"/        ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1289
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1290
        self copyInvalidatedMethodsFrom:oldClass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1291
                                    for:newClass 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1292
                           accessingAny:changeSet2
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1293
                                orSuper:true.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1294
        newClass recompileInvalidatedMethods.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1295
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1296
    ] ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1297
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1298
        "/ same inheritance ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1299
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1300
        instVarChange := oldInstVars ~= newInstVars.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1301
        instVarChange ifFalse:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1302
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1303
            "/ same instance variables ...
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1304
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1305
            classVarChange ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1306
                "recompile all inst methods accessing changed classvars"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1307
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1308
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1309
"/                    Transcript showCR:'recompiling instance methods accessing classvars ' , changeSet1 printString , ' ...'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1310
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1311
"/                ].
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1312
                self copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:changeSet1.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1313
                newClass recompileInvalidatedMethods.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1314
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1315
        ] ifTrue:[
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1316
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1317
            "/ 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
  1318
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1319
            (oldClass notNil and:[oldClass isBuiltInClass and:[instVarChange]]) ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1320
                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
  1321
                ^ oldClass
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1322
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1323
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1324
            ((oldInstVars size == 0) 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1325
            or:[newInstVars startsWith:oldInstVars]) ifTrue:[
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
                "/ 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
  1328
                "/ 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
  1329
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1330
"/                Transcript showCR:'copying methods ...'.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1331
"/                Transcript endEntry.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1332
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1333
                self copyMethodsFrom:oldClass for:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1334
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1335
                "/ 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
  1336
                "/ (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
  1337
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1338
                addedNames := newInstVars select:[:nm | (oldInstVars includes:nm) not].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1339
                "merge in class variables"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1340
                changeSet1 do:[:nm | addedNames add:nm].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1341
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1342
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1343
"/                    Transcript showCR:'recompiling instance methods accessing ' , addedNames printString ,  '... [added instvars]'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1344
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1345
"/                ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1346
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1347
                newClass recompileMethodsAccessingAny:addedNames.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1348
            ] ifFalse:[
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1349
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1350
                "/ the changeset consists of instance variables, 
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1351
                "/ with a different position
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1352
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1353
                changeSet2 := self differentInstanceVariableOffsetsIn:oldClass and:newClass.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1354
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1355
                "merge in the class variables"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1356
                changeSet1 do:[:nm | changeSet2 add:nm].
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1357
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1358
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1359
"/                    Transcript showCR:'recompiling instance methods accessing ' , changeSet2 printString , ' ... [changed instvars]'.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1360
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1361
"/                ].
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1362
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1363
                self copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:changeSet2.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1364
                newClass recompileInvalidatedMethods.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1365
            ].
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1366
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1367
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1368
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1369
    "/ WOW, everything done for this class
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1370
    "/ what about subclasses ?
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1371
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1372
    "/ update superclass of immediate subclasses - 
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1373
    "/ this forces recompilation (recursively) if needed
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1374
    "/ (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
  1375
3629
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1376
    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
  1377
        Class withoutUpdatingChangesDo:[
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1378
            oldClass subclasses copy do:[:aClass |
4094
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1379
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1380
"/                Transcript showCR:'changing superclass of:' , aClass name.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1381
"/                Transcript endEntry.
Claus Gittinger <cg@exept.de>
parents: 4057
diff changeset
  1382
3629
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1383
                aClass superclass:newClass
e26cadd7ede5 auto-keep package in subclasses - when changing a classes definition
Claus Gittinger <cg@exept.de>
parents: 3614
diff changeset
  1384
            ]
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1385
        ]
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1386
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1387
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1388
    "/ change any private subclasses' owners
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1389
1819
e53f745ed80b when changing a class, do not forget to move the privateClasses
Claus Gittinger <cg@exept.de>
parents: 1809
diff changeset
  1390
    oldClass privateClassesDo:[:aClass |
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1391
        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
  1392
    ].
e53f745ed80b when changing a class, do not forget to move the privateClasses
Claus Gittinger <cg@exept.de>
parents: 1809
diff changeset
  1393
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1394
    "/ 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
  1395
2108
09db34dc073f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2106
diff changeset
  1396
    oldCategory := oldClass category.
1655
fb6ee1b55ec4 use *-categories
Claus Gittinger <cg@exept.de>
parents: 1515
diff changeset
  1397
    oldClass category:#'* obsolete *'.
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1398
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1399
    "/ and make the new class globally known
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1400
1829
9e2a9fea35d0 ask to create nameSpace if it does not exist.
Claus Gittinger <cg@exept.de>
parents: 1821
diff changeset
  1401
    namespace notNil ifTrue:[
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1402
        thisIsPrivate ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1403
            namespace privateClassesAt:classSymbol put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1404
        ] ifFalse:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1405
            namespace at:nameKey put:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1406
            namespace == Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1407
                self checkForAliasesOf:oldClass with:newClass.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1408
            ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1409
2668
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1410
            oldCategory ~= categoryString ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1411
                "notify change of organization"
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1412
                namespace changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1413
                namespace ~~ Smalltalk ifTrue:[
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1414
                    Smalltalk changed:#organization.
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1415
                ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1416
            ]
fb4a2e42a60d Metaclass no longer responds to #category:
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
  1417
        ].
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1418
    ].
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1419
2440
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1420
    "/ 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
  1421
    "/ 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
  1422
    "/ not enough ...
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1423
    "/ QUESTION: is this a good idea ?
c6e6beba8184 try to avoid flushing of the subClassInfo;
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
  1424
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1425
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1426
    newClass dependents:(oldClass dependents).
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1427
    newClass changed:#definition.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1428
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1429
    "just to make certain ... - tell dependents of oldClass, that something changed
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1430
     (systemBrowsers will react on this, and update their views)"
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1431
    oldClass changed:#definition with:newClass.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1432
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1433
    ObjectMemory flushCaches.
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1434
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1435
    ^ newClass
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1436
3587
e7359c9f22d4 keep old package when redefining a class.
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
  1437
    "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
  1438
    "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
  1439
    "Modified: / 18.3.1999 / 18:23:31 / stefan"
1439
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1440
!
d8a58d20a93c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1416
diff changeset
  1441
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1442
name:newName inEnvironment:aSystemDictionary
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1443
             subclassOf:aClass
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1444
             instanceVariableNames:stringOfInstVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1445
             variable:variableBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1446
             words:wordsBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1447
             pointers:pointersBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1448
             classVariableNames:stringOfClassVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1449
             poolDictionaries:stringOfPoolNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1450
             category:categoryString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1451
             comment:commentString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1452
             changed:changed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1453
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
  1454
    ^ self
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1455
        name:newName 
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1456
        in:aSystemDictionary
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1457
        subclassOf:aClass
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1458
        instanceVariableNames:stringOfInstVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1459
        variable:variableBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1460
        words:wordsBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1461
        pointers:pointersBoolean
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1462
        classVariableNames:stringOfClassVarNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1463
        poolDictionaries:stringOfPoolNames
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1464
        category:categoryString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1465
        comment:commentString
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1466
        changed:changed
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1467
        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
  1468
2688
a7777c381e7e care for classInstVars when redefining superclass
Claus Gittinger <cg@exept.de>
parents: 2687
diff changeset
  1469
    "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
  1470
!
ca805f0f4984 changed class creation to allow create including classInstVars (may be used to avoid recompilation)
Claus Gittinger <cg@exept.de>
parents: 870
diff changeset
  1471
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1472
new
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1473
    "create & return a new metaclass (a classes class).
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1474
     Since metaclasses only have one instance (the class),
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1475
     complain if there is already one.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1476
     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
  1477
     (confusing - isn't it ?)"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1478
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1479
    |newClass|
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1480
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1481
    myClass notNil ifTrue:[
4522
29a6625dc7b1 error: vs. error:mayProceed:
Claus Gittinger <cg@exept.de>
parents: 4497
diff changeset
  1482
        self error:'Each metaclass may only have one instance'.
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1483
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1484
    newClass := self basicNew.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1485
    newClass setSuperclass:Object
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1486
          methodDictionary:MethodDictionary new
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1487
                instSize:0 
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1488
                   flags:(Behavior flagBehavior).
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1489
    myClass := newClass.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1490
    ^ newClass
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1491
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1492
    "Modified: 1.4.1997 / 15:44:50 / stefan"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1493
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1494
3640
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1495
!Metaclass methodsFor:'fileOut'!
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1496
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1497
fileOutDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1498
    myClass fileOutClassInstVarDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1499
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1500
    "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
  1501
! !
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
  1502
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1503
!Metaclass methodsFor:'private'!
68
59faa75185ba *** empty log message ***
claus
parents: 49
diff changeset
  1504
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1505
checkConventionsFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1506
    "Check for some 'considered bad-style' things, like lower case names.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1507
     NOTICE:
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1508
     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
  1509
     the outer codeview a chance to highlight the error.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1510
     (but thats how its defined in the book - maybe I will change it anyway).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1511
    "
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1512
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1513
    |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
  1514
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1515
    doChecks := ConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1516
    doChecks == false ifTrue:[^ true].
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1517
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1518
    "let user confirm, if the classname is no good"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1519
    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
  1520
        aClass == Namespace ifTrue:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1521
            what := 'namespace'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1522
        ] ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1523
            what := 'class'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1524
        ].
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1525
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
  1526
        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
  1527
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1528
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1529
        (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
  1530
                             ''' should start with an uppercase letter
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1531
(by convention only)
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1532
2008
381a5160be9a only a nicer warning message
Claus Gittinger <cg@exept.de>
parents: 2002
diff changeset
  1533
install anyway ?') withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1534
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1535
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1536
        ]
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1537
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1538
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1539
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1540
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1541
    "let user confirm, if any instvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
  1542
    (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
  1543
        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
  1544
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1545
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1546
        (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
  1547
should start with a lowercase letter (by convention only).
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1548
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1549
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1550
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1551
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1552
        ]
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1553
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1554
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1555
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1556
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1557
    "let user confirm, if any classvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
  1558
    (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
  1559
        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
  1560
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1561
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1562
        (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
  1563
should start with an uppercase letter (by convention only).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1564
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
  1565
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1566
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1567
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1568
        ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1569
    ].
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
  1570
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1571
    ^ true
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
  1572
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
  1573
    "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
  1574
    "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
  1575
    "Modified: / 18.3.1999 / 18:22:47 / stefan"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1576
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1577
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1578
checkForAliasesOf:oldClass with:newClass
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1579
    "oldClass changed its identity (now use newClass).
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1580
     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
  1581
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1582
    Smalltalk keysAndValuesDo:[:nm :o |
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1583
	o == oldClass ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1584
	    nm ~~ oldClass name ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1585
		(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
  1586
		ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1587
		    Smalltalk at:nm put:newClass
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1588
		]
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1589
	    ]
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1590
	]
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1591
    ].
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1592
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1593
    "Created: 22.10.1996 / 15:20:59 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1594
    "Modified: 22.10.1996 / 15:25:50 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1595
!
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
  1596
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1597
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
  1598
    |superInstVars msg|
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1599
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1600
    aClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1601
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1602
         check for instVar redef of superClass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1603
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1604
        superInstVars := aClass allInstVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1605
        stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1606
            (superInstVars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1607
                (oldClass notNil 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1608
                and:[stringOfInstVarNames = oldClass instanceVariableString])
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1609
                ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1610
                    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
  1611
                    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
  1612
                    self warn:msg withCRs.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1613
                ] ifFalse:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1614
                    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
  1615
                    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
  1616
                    ^ self confirm:msg withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1617
                ].
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1618
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1619
        ].
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1620
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1621
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1622
    oldClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1623
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1624
         check for instVar redefs in subclass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1625
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1626
        oldClass allSubclassesDo:[:sub |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1627
            |vars|
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1628
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1629
            vars := sub instVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1630
            stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1631
                (vars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1632
                    ^ self confirm:('subclass ' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1633
                                    , sub name 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1634
                                    , ' already defines an instVar named `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1635
                                    , nm 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1636
                                    , '''.\\Change the definition of `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1637
                                    , newName 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1638
                                    , ''' anyway ?\Notice: you must fix the subclass later.'
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1639
                                   ) withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1640
                ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1641
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
  1642
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1643
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1644
    ^ true
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1645
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1646
    "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
  1647
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1648
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1649
checkValidVarNamesFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1650
    "Check for some 'considered bad-style' things, like lower case names.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1651
     NOTICE:
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1652
     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
  1653
     the outer codeview a chance to highlight the error.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1654
     (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
  1655
    "
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1656
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1657
    |names|
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1658
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1659
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1660
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1661
    "check for instvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1662
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1663
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1664
            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
  1665
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1666
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1667
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1668
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1669
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1670
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1671
    "check for classvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1672
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1673
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1674
            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
  1675
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
  1676
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1677
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1678
    ^ true
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1679
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1680
    "Created: 8.1.1997 / 21:09:14 / cg"
2106
f9d613a66493 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2103
diff changeset
  1681
    "Modified: 9.1.1997 / 02:10:02 / cg"
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1682
!
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
  1683
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1684
copyInvalidatedMethodsFrom:oldClass for:newClass
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1685
    "copy all methods from oldClass to newClass and change their code
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1686
     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
  1687
     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
  1688
     before recompilation is attempted.
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1689
     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
  1690
     now undefined instvars) methods. Later compilation of these methods will show
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1691
     an error on the transcript and lead to the debugger once called."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1692
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 943
diff changeset
  1693
    |trap trapCode trapByteCode oldMethod newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1694
     oldDict newDict|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1695
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1696
    oldDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1697
    newDict := MethodDictionary new:oldDict size.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1698
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1699
    oldDict keysAndValuesDo:[ :sel :mthd |
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1700
	trap := mthd trapMethodForNumArgs:(mthd numArgs).
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1701
	trapCode := trap code.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1702
	trapByteCode := trap byteCode.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1703
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1704
	mthd isWrapped ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1705
	    oldMethod := mthd originalMethod
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1706
	] ifFalse:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1707
	    oldMethod := mthd.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1708
	].
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1709
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1710
	newMethod := oldMethod copy.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1711
	newMethod makeInvalid.
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1712
	newDict at:sel put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1713
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1714
        
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1715
    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
  1716
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1717
    "Modified: 12.6.1996 / 10:44:27 / stefan"
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1718
    "Modified: 4.11.1996 / 22:55:57 / cg"
2
claus
parents: 1
diff changeset
  1719
!
claus
parents: 1
diff changeset
  1720
claus
parents: 1
diff changeset
  1721
copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames
claus
parents: 1
diff changeset
  1722
    "copy all methods from oldClass to newClass. Those methods accessing
claus
parents: 1
diff changeset
  1723
     a variable in setOfNames will be copied as invalid method, leading to
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1724
     a trap when its executed. This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1725
     layout for all methods which are affected by the change."
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1726
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1727
    self copyInvalidatedMethodsFrom:oldClass 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1728
				for:newClass 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1729
		       accessingAny:setOfNames 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1730
			    orSuper:false 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1731
!
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1732
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1733
copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames orSuper:superBoolean
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1734
    "copy all methods from oldClass to newClass. 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1735
     Those methods accessing a variable in setOfNames will be copied as invalid method, 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1736
     leading to a trap when its executed. If superBoolean is true, this is also done
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1737
     for methods accessing super.  This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
  1738
     layout for all methods which are affected by the change."
2
claus
parents: 1
diff changeset
  1739
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
  1740
    |p source mustInvalidate
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1741
     oldMethod newMethod methodDict newMethodDict nNames|
2
claus
parents: 1
diff changeset
  1742
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1743
    methodDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1744
    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
  1745
    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
  1746
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1747
    methodDict keysAndValuesDo:[:selector :method |
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1748
        method isWrapped ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1749
            oldMethod := method originalMethod
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1750
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1751
            oldMethod := method
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1752
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1753
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1754
        "before parsing (which may take some time),
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1755
         do a string search if its only one variable,
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1756
         we are looking for.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1757
         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
  1758
         parsing it right away may be faster ..."
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1759
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1760
        source := oldMethod source.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1761
        ((nNames == 1) and:[superBoolean not]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1762
            mustInvalidate := (source findString:(setOfNames first)) ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1763
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1764
            ((nNames == 0) and:[superBoolean]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1765
                mustInvalidate := (source findString:'super') ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1766
            ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1767
                mustInvalidate := true
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1768
            ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1769
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1770
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1771
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1772
            "we have to parse it ..."
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1773
            p := Parser parseMethod:source in:newClass.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1774
            (p isNil 
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1775
             or:[(p usedVars includesAny:setOfNames)
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1776
             or:[superBoolean and:[p usesSuper]]]) ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1777
                mustInvalidate := false
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1778
            ]
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1779
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1780
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1781
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1782
            newMethod := oldMethod copy.
4095
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1783
"/            Smalltalk silentLoading ifFalse:[
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1784
"/                Transcript showCR:'invalidating ' , selector , '...'.
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1785
"/	      ].
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1786
            newMethod makeInvalid.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1787
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1788
            newMethod := oldMethod.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1789
        ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1790
        newMethodDict at:selector put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1791
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1792
    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
  1793
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1794
    "Modified: 7.6.1996 / 08:33:52 / stefan"
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1795
    "Modified: 19.6.1997 / 18:27:09 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1796
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1797
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1798
copyMethodsFrom:oldClass for:newClass
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1799
    "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
  1800
     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
  1801
     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
  1802
     to recompile the class methods."
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1803
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1804
    newClass methodDictionary:(oldClass methodDictionary copy).
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1805
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1806
    "Modified: 7.6.1996 / 08:34:43 / stefan"
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1807
!
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1808
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1809
differentInstanceVariableOffsetsIn:class1 and:class2
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1810
    "return a set of instance variable names which have different
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1811
     positions in class1 and class2.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1812
     Also, variables which are only present in one class are returned.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1813
     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
  1814
     change in the instance variable layout."
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1815
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1816
    |offsets1 offsets2 changeSet|
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1817
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1818
    changeSet := Set new.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1819
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1820
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1821
     collect the instvar-indices in the old and new class
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1822
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1823
    offsets1 := class1 instanceVariableOffsets.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1824
    offsets2 := class2 instanceVariableOffsets.
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1825
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1826
    "
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1827
     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
  1828
     which have a different position
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1829
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1830
    offsets1 keysAndValuesDo:[:varName :varIndex |
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1831
	(offsets2 includesKey:varName) ifFalse:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1832
	    changeSet add:varName 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1833
	] ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1834
	    (varIndex ~~ (offsets2 at:varName)) ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1835
		changeSet add:varName 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1836
	    ]
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1837
	]
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1838
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1839
    offsets2 keysAndValuesDo:[:varName :varIndex |
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1840
	(offsets1 includesKey:varName) ifFalse:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1841
	    changeSet add:varName
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1842
	] ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1843
	    (varIndex ~~ (offsets1 at:varName)) ifTrue:[
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1844
		changeSet add:varName
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1845
	    ]
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1846
	]
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1847
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1848
    ^ changeSet
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1849
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1850
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1851
     View class 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1852
	differentInstanceVariableOffsetsIn:View
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1853
				       and:StandardSystemView
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1854
     View class 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1855
	differentInstanceVariableOffsetsIn:Object 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1856
				       and:Point 
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1857
    "
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1858
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1859
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1860
recompileGlobalAccessorsTo:aGlobalKey in:aNamespace except:someClass
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1861
    "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
  1862
     class in that namespace must be recompiled"
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1863
4497
f019cfe4a699 tuned recompileGlobalAccessors
Claus Gittinger <cg@exept.de>
parents: 4451
diff changeset
  1864
    aNamespace allPrivateClassesDo:[:aClass |
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1865
        aClass ~~ someClass ifTrue:[
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1866
            aClass isLoaded ifTrue:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1867
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1868
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1869
"/                    Transcript showCR:'recompiling methods in ''' , aClass name , ''' accessing ''' , aGlobalKey , ''''.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1870
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1871
"/                ].
4027
4385bdb59ec1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3998
diff changeset
  1872
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1873
                aClass recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1874
                aClass class recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1875
                "/ actually - must eventually recompile USERS of this namespace too
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1876
            ]
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1877
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1878
    ]
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1879
2340
1225948b7473 no recompilation messages
Claus Gittinger <cg@exept.de>
parents: 2322
diff changeset
  1880
    "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
  1881
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1882
1047
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1883
setSoleInstance:aClass 
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1884
    myClass := aClass
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1885
5d4d1c7411ab dont clobber the binaryRevision from a nonBinary-one
ca
parents: 986
diff changeset
  1886
    "Created: 12.12.1995 / 13:46:22 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1887
! !
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1888
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1889
!Metaclass methodsFor:'queries'!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1890
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1891
category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1892
    "return my category"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1893
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1894
    ^ myClass category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1895
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1896
    "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
  1897
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1898
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1899
comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1900
    "return my comment"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1901
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1902
    ^ myClass comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1903
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1904
    "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
  1905
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1906
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1907
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1908
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1909
     Here, true is returned for myself, false for subclasses."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1910
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1911
    ^ self == Metaclass class or:[self == Metaclass]
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1912
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1913
    "Created: 15.4.1996 / 17:17:34 / cg"
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1914
    "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
  1915
!
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1916
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1917
isMeta
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1918
    "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
  1919
     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
  1920
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1921
    ^ true
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1922
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1923
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1924
name
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1925
    "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
  1926
     appended."
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1927
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1928
    |nm|
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1929
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1930
    myClass isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1931
        ^ #someMetaclass
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1932
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1933
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1934
    (nm := myClass name) isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1935
        '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
  1936
        ^ #'unnamed class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1937
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1938
    ^ nm , ' class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1939
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1940
    "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
  1941
    "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
  1942
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1943
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1944
nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1945
    "return the nameSpace I am contained in.
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1946
     Due to the implementation of nameSpaces (as classVariables),
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1947
     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
  1948
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1949
    "/ this information is in the class
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1950
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1951
    ^ myClass nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1952
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1953
    "Created: 7.11.1996 / 13:18:52 / cg"
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1954
!
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1955
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1956
owningClass
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1957
    "return nil here - regular metaclasses are never private"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1958
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1959
    ^ nil
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1960
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1961
    "Created: 12.10.1996 / 20:12:16 / cg"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1962
!
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1963
1757
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1964
package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1965
    "return my package-id"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1966
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1967
    ^ myClass package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1968
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1969
    "Created: 15.10.1996 / 19:44:51 / cg"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1970
!
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1971
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1972
soleInstance 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1973
    "return my sole class."
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1974
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1975
    ^ myClass
2047
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1976
!
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1977
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1978
topOwningClass
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1979
    "return nil here - regular metaclasses are never private"
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1980
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1981
    ^ nil
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1982
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1983
    "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
  1984
! !
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1985
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1986
!Metaclass methodsFor:'source management'!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1987
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1988
binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1989
    ^ myClass binaryRevision
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
    "
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1992
     Object binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1993
     Object class binaryRevision
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
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1996
    "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
  1997
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1998
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1999
sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2000
    "return the classes source stream"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2001
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2002
    ^ myClass sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2003
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2004
    "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
  2005
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2006
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2007
sourceStreamFor:className
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2008
    "return the sourceStream for className"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2009
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2010
    ^ myClass sourceStreamFor:className
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2011
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2012
    "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
  2013
! !
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  2014
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  2015
!Metaclass class methodsFor:'documentation'!
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2016
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2017
version
4522
29a6625dc7b1 error: vs. error:mayProceed:
Claus Gittinger <cg@exept.de>
parents: 4497
diff changeset
  2018
    ^ '$Header: /cvs/stx/stx/libbasic/Metaclass.st,v 1.150 1999-08-04 14:08:21 cg Exp $'
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  2019
! !
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  2020
Metaclass initialize!