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