Metaclass.st
author Claus Gittinger <cg@exept.de>
Mon, 08 Oct 2001 11:18:15 +0200
changeset 6078 13d651d69246
parent 6021 3fe69dd0d081
child 6082 55dba32ef74e
permissions -rw-r--r--
renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
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"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   717
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   718
5562
76675d5a0da9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5515
diff changeset
   719
!Metaclass methodsFor:'enumerating'!
76675d5a0da9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5515
diff changeset
   720
6078
13d651d69246 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 6021
diff changeset
   721
instAndClassSelectorsAndMethodsDo:aTwoArgBlock
13d651d69246 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 6021
diff changeset
   722
    myClass instAndClassSelectorsAndMethodsDo:aTwoArgBlock
5562
76675d5a0da9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5515
diff changeset
   723
! !
76675d5a0da9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5515
diff changeset
   724
3640
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   725
!Metaclass methodsFor:'fileOut'!
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   726
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   727
fileOutDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   728
    myClass fileOutClassInstVarDefinitionOn:aStream
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   729
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   730
    "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
   731
! !
523d80dfc3ac added #fileOutDefinitionOn: (show c-instVars) for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 3629
diff changeset
   732
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
   733
!Metaclass methodsFor:'private'!
68
59faa75185ba *** empty log message ***
claus
parents: 49
diff changeset
   734
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   735
setSoleInstance:aClass 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   736
    myClass := aClass
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   737
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   738
    "Created: 12.12.1995 / 13:46:22 / cg"
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   739
!
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   740
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   741
xx_checkConventionsFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   742
    "Check for some 'considered bad-style' things, like lower case names.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   743
     NOTICE:
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   744
     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
   745
     the outer codeview a chance to highlight the error.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   746
     (but thats how its defined in the book - maybe I will change it anyway).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
   747
    "
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   748
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   749
    |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
   750
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   751
    doChecks := ConfirmationQuerySignal query.
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   752
    doChecks == false ifTrue:[^ true].
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
   753
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   754
    "let user confirm, if the classname is no good"
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   755
    className first isUppercase ifFalse:[
5328
319b8e3ee60e renamed Namespace to NameSpace
Claus Gittinger <cg@exept.de>
parents: 5327
diff changeset
   756
        aClass == NameSpace ifTrue:[
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   757
            what := 'namespace'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   758
        ] ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   759
            what := 'class'
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   760
        ].
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   761
4057
8a3481835e3c Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 4034
diff changeset
   762
        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
   763
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   764
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   765
        (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
   766
                             ''' should start with an uppercase letter
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   767
(by convention only)
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
   768
2008
381a5160be9a only a nicer warning message
Claus Gittinger <cg@exept.de>
parents: 2002
diff changeset
   769
install anyway ?') withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   770
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   771
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   772
        ]
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   773
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   774
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   775
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   776
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   777
    "let user confirm, if any instvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
   778
    (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
   779
        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
   780
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   781
5733
ae41ad07ba3d asText allBold -> allBold
Claus Gittinger <cg@exept.de>
parents: 5725
diff changeset
   782
        (self confirm:className , ': instance variable named ''' , (names at:idx) allBold , ''' 
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
   783
should start with a lowercase letter (by convention only).
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   784
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
   785
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   786
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   787
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   788
        ]
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
   789
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   790
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   791
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   792
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   793
    "let user confirm, if any classvarname is no good"
1936
7c2d0ae1a76d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1922
diff changeset
   794
    (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
   795
        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
   796
        answ notNil ifTrue:[^ answ].
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   797
5733
ae41ad07ba3d asText allBold -> allBold
Claus Gittinger <cg@exept.de>
parents: 5725
diff changeset
   798
        (self confirm:className , ': class variable named ''' , (names at:idx) allBold  , ''' 
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
   799
should start with an uppercase letter (by convention only).
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
   800
1937
d8aa32975ead *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1936
diff changeset
   801
Install anyway ?' withCRs)
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   802
        ifFalse:[
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   803
            ^ false
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
   804
        ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   805
    ].
308
f04744ef7b5d *** empty log message ***
claus
parents: 251
diff changeset
   806
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
   807
    ^ true
1752
1ef6932982a2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1749
diff changeset
   808
3965
cef66fdfff9e allow suppress of dialog when filed-in classes violate conventions
Claus Gittinger <cg@exept.de>
parents: 3804
diff changeset
   809
    "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
   810
    "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
   811
    "Modified: / 18.3.1999 / 18:22:47 / stefan"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   812
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   813
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   814
xx_checkForAliasesOf:oldClass with:newClass
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   815
    "oldClass changed its identity (now use newClass).
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   816
     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
   817
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   818
    Smalltalk keysAndValuesDo:[:nm :o |
5630
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   819
        o == oldClass ifTrue:[
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   820
            nm ~~ oldClass name ifTrue:[
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   821
                (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
   822
                ifTrue:[
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   823
                    Smalltalk at:nm put:newClass
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   824
                ]
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   825
            ]
6198ad1b731b check for class-aliases AFTER sending out change notifications
Claus Gittinger <cg@exept.de>
parents: 5578
diff changeset
   826
        ]
1798
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   827
    ].
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   828
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   829
    "Created: 22.10.1996 / 15:20:59 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   830
    "Modified: 22.10.1996 / 15:25:50 / cg"
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   831
!
543f1601bbeb look for aliases, when migrating classes
Claus Gittinger <cg@exept.de>
parents: 1778
diff changeset
   832
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   833
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
   834
    |superInstVars msg|
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   835
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   836
    aClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   837
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   838
         check for instVar redef of superClass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   839
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   840
        superInstVars := aClass allInstVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   841
        stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   842
            (superInstVars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   843
                (oldClass notNil 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   844
                and:[stringOfInstVarNames = oldClass instanceVariableString])
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   845
                ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   846
                    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
   847
                    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
   848
                    self warn:msg withCRs.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   849
                ] ifFalse:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   850
                    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
   851
                    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
   852
                    ^ self confirm:msg withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   853
                ].
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   854
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   855
        ].
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   856
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   857
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   858
    oldClass notNil ifTrue:[
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   859
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   860
         check for instVar redefs in subclass instVars
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   861
        "
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   862
        oldClass allSubclassesDo:[:sub |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   863
            |vars|
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   864
4348
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   865
            vars := sub instVarNames.
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   866
            stringOfInstVarNames asCollectionOfWords do:[:nm |
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   867
                (vars includes:nm) ifTrue:[
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   868
                    ^ self confirm:('subclass ' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   869
                                    , sub name 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   870
                                    , ' already defines an instVar named `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   871
                                    , nm 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   872
                                    , '''.\\Change the definition of `' 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   873
                                    , newName 
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   874
                                    , ''' anyway ?\Notice: you must fix the subclass later.'
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   875
                                   ) withCRs
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   876
                ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   877
            ]
c3c08808bfb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4111
diff changeset
   878
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   879
    ].
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   880
    ^ true
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   881
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   882
    "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
   883
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
   884
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   885
xx_checkValidVarNamesFor:className subClassOf:aClass instVarNames:instVarNameString classVarNames:classVarNameString
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   886
    "Check for some 'considered bad-style' things, like lower case names.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   887
     NOTICE:
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   888
     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
   889
     the outer codeview a chance to highlight the error.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   890
     (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
   891
    "
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   892
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   893
    |names|
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   894
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   895
    names := instVarNameString asCollectionOfWords.
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   896
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   897
    "check for instvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   898
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   899
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   900
            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
   901
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   902
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   903
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   904
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   905
    names := classVarNameString asCollectionOfWords. 
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   906
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   907
    "check for classvar redefs within local instvars"
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   908
    names keysAndValuesDo:[:index :aName |
4398
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   909
        (names indexOf:aName startingAt:index+1) ~~ 0 ifTrue:[
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   910
            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
   911
            ^ false.
df208587581f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4348
diff changeset
   912
        ]
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   913
    ].
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   914
    ^ true
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   915
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   916
    "Created: 8.1.1997 / 21:09:14 / cg"
2106
f9d613a66493 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2103
diff changeset
   917
    "Modified: 9.1.1997 / 02:10:02 / cg"
2103
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   918
!
bb1c173afc55 more checks
Claus Gittinger <cg@exept.de>
parents: 2047
diff changeset
   919
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   920
xx_copyInvalidatedMethodsFrom:oldClass for:newClass
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   921
    "copy all methods from oldClass to newClass and change their code
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   922
     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
   923
     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
   924
     before recompilation is attempted.
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   925
     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
   926
     now undefined instvars) methods. Later compilation of these methods will show
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   927
     an error on the transcript and lead to the debugger once called."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   928
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 943
diff changeset
   929
    |trap trapCode trapByteCode oldMethod newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   930
     oldDict newDict|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   931
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   932
    oldDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   933
    newDict := MethodDictionary new:oldDict size.
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
   934
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   935
    oldDict keysAndValuesDo:[ :sel :mthd |
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   936
        trap := mthd trapMethodForNumArgs:(mthd numArgs).
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   937
        trapCode := trap code.
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   938
        trapByteCode := trap byteCode.
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   939
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   940
        mthd isWrapped ifTrue:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   941
            oldMethod := mthd originalMethod
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   942
        ] ifFalse:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   943
            oldMethod := mthd.
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   944
        ].
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   945
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   946
        newMethod := oldMethod copy.
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   947
        newMethod makeInvalid.
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   948
        newDict at:sel put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   949
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   950
        
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   951
    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
   952
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   953
    "Modified: 12.6.1996 / 10:44:27 / stefan"
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
   954
    "Modified: 4.11.1996 / 22:55:57 / cg"
2
claus
parents: 1
diff changeset
   955
!
claus
parents: 1
diff changeset
   956
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   957
xx_copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames
2
claus
parents: 1
diff changeset
   958
    "copy all methods from oldClass to newClass. Those methods accessing
claus
parents: 1
diff changeset
   959
     a variable in setOfNames will be copied as invalid method, leading to
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   960
     a trap when its executed. This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   961
     layout for all methods which are affected by the change."
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   962
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   963
    self copyInvalidatedMethodsFrom:oldClass 
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   964
                                for:newClass 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   965
                       accessingAny:setOfNames 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   966
                            orSuper:false 
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   967
!
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   968
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
   969
xx_copyInvalidatedMethodsFrom:oldClass for:newClass accessingAny:setOfNames orSuper:superBoolean
159
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   970
    "copy all methods from oldClass to newClass. 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   971
     Those methods accessing a variable in setOfNames will be copied as invalid method, 
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   972
     leading to a trap when its executed. If superBoolean is true, this is also done
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   973
     for methods accessing super.  This is used when a class has changed its
514c749165c3 *** empty log message ***
claus
parents: 93
diff changeset
   974
     layout for all methods which are affected by the change."
2
claus
parents: 1
diff changeset
   975
1875
215b61efaae9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1835
diff changeset
   976
    |p source mustInvalidate
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   977
     oldMethod newMethod methodDict newMethodDict nNames|
2
claus
parents: 1
diff changeset
   978
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   979
    methodDict := oldClass methodDictionary.
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   980
    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
   981
    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
   982
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
   983
    methodDict keysAndValuesDo:[:selector :method |
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   984
        method isWrapped ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   985
            oldMethod := method originalMethod
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   986
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   987
            oldMethod := method
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   988
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   989
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   990
        "before parsing (which may take some time),
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   991
         do a string search if its only one variable,
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   992
         we are looking for.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   993
         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
   994
         parsing it right away may be faster ..."
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   995
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   996
        source := oldMethod source.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   997
        ((nNames == 1) and:[superBoolean not]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   998
            mustInvalidate := (source findString:(setOfNames first)) ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
   999
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1000
            ((nNames == 0) and:[superBoolean]) ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1001
                mustInvalidate := (source findString:'super') ~~ 0.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1002
            ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1003
                mustInvalidate := true
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1004
            ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1005
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1006
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1007
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1008
            "we have to parse it ..."
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1009
            p := Parser parseMethod:source in:newClass.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1010
            (p isNil 
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1011
             or:[(p usedVars includesAny:setOfNames)
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1012
             or:[superBoolean and:[p usesSuper]]]) ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1013
                mustInvalidate := false
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1014
            ]
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1015
        ].
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
  1016
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1017
        mustInvalidate ifTrue:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1018
            newMethod := oldMethod copy.
4095
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1019
"/            Smalltalk silentLoading ifFalse:[
12e870f233c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
  1020
"/                Transcript showCR:'invalidating ' , selector , '...'.
5676
db728e9fe276 must flush cached mclass, when copying methods around
src
parents: 5659
diff changeset
  1021
"/            ].
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1022
            newMethod makeInvalid.
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1023
        ] ifFalse:[
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1024
            newMethod := oldMethod.
5676
db728e9fe276 must flush cached mclass, when copying methods around
src
parents: 5659
diff changeset
  1025
            newMethod mclass:nil.
2700
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1026
        ].
71d1736d40f4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2688
diff changeset
  1027
        newMethodDict at:selector put:newMethod
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1028
    ].
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1029
    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
  1030
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1031
    "Modified: 7.6.1996 / 08:33:52 / stefan"
5708
37e770cd9a3b change notifications when changing classInstVars
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1032
    "Modified: 19.6.1997 / 18:27:09 / cg"
37e770cd9a3b change notifications when changing classInstVars
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1033
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1034
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1035
xx_copyMethodsFrom:oldClass for:newClass
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1036
    "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
  1037
     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
  1038
     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
  1039
     to recompile the class methods."
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1040
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1442
diff changeset
  1041
    newClass methodDictionary:(oldClass methodDictionary copy).
5676
db728e9fe276 must flush cached mclass, when copying methods around
src
parents: 5659
diff changeset
  1042
    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
  1043
5708
37e770cd9a3b change notifications when changing classInstVars
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1044
    "Modified: 7.6.1996 / 08:34:43 / stefan"
37e770cd9a3b change notifications when changing classInstVars
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1045
!
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1046
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1047
xx_differentInstanceVariableOffsetsIn:class1 and:class2
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1048
    "return a set of instance variable names which have different
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1049
     positions in class1 and class2.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1050
     Also, variables which are only present in one class are returned.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1051
     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
  1052
     change in the instance variable layout."
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1053
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1054
    |offsets1 offsets2 changeSet|
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1055
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1056
    changeSet := Set new.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1057
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1058
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1059
     collect the instvar-indices in the old and new class
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1060
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1061
    offsets1 := class1 instanceVariableOffsets.
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1062
    offsets2 := class2 instanceVariableOffsets.
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1063
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1064
    "
912
a009f25a6800 be careful with self-chaning selector/methodArrays (done in VM's lookup)
Claus Gittinger <cg@exept.de>
parents: 904
diff changeset
  1065
     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
  1066
     which have a different position
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1067
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1068
    offsets1 keysAndValuesDo:[:varName :varIndex |
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1069
        (offsets2 includesKey:varName) ifFalse:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1070
            changeSet add:varName 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1071
        ] ifTrue:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1072
            (varIndex ~~ (offsets2 at:varName)) ifTrue:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1073
                changeSet add:varName 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1074
            ]
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1075
        ]
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1076
    ].
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1077
    offsets2 keysAndValuesDo:[:varName :varIndex |
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1078
        (offsets1 includesKey:varName) ifFalse:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1079
            changeSet add:varName
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1080
        ] ifTrue:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1081
            (varIndex ~~ (offsets1 at:varName)) ifTrue:[
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1082
                changeSet add:varName
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1083
            ]
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1084
        ]
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1085
    ].
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1086
    ^ changeSet
195
515af3696a5c *** empty log message ***
claus
parents: 175
diff changeset
  1087
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1088
    "
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1089
     View class 
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1090
        differentInstanceVariableOffsetsIn:View
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1091
                                       and:StandardSystemView
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1092
     View class 
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1093
        differentInstanceVariableOffsetsIn:Object 
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1094
                                       and:Point 
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1095
    "
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1096
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1097
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1098
xx_recompileGlobalAccessorsTo:aGlobalKey in:aNamespace except:someClass
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1099
    "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
  1100
     class in that namespace must be recompiled"
2313
f7b903af509d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2308
diff changeset
  1101
4497
f019cfe4a699 tuned recompileGlobalAccessors
Claus Gittinger <cg@exept.de>
parents: 4451
diff changeset
  1102
    aNamespace allPrivateClassesDo:[:aClass |
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1103
        aClass ~~ someClass ifTrue:[
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1104
            aClass isLoaded ifTrue:[
4032
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1105
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1106
"/                Smalltalk silentLoading ifFalse:[
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1107
"/                    Transcript showCR:'recompiling methods in ''' , aClass name , ''' accessing ''' , aGlobalKey , ''''.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1108
"/                    Transcript endEntry.
1c3822a69aeb disabled 'recompiling' info messages
Claus Gittinger <cg@exept.de>
parents: 4030
diff changeset
  1109
"/                ].
4027
4385bdb59ec1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3998
diff changeset
  1110
3804
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1111
                aClass recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1112
                aClass class recompileMethodsAccessingGlobal:aGlobalKey.
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1113
                "/ actually - must eventually recompile USERS of this namespace too
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1114
            ]
cde2641a3f91 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3778
diff changeset
  1115
        ]
2308
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1116
    ]
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1117
2340
1225948b7473 no recompilation messages
Claus Gittinger <cg@exept.de>
parents: 2322
diff changeset
  1118
    "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
  1119
!
db44ef9a050e when adding a class in a nameSpace, recompile accessors of
Claus Gittinger <cg@exept.de>
parents: 2233
diff changeset
  1120
6021
3fe69dd0d081 Use ClassBuilder
Claus Gittinger <cg@exept.de>
parents: 5994
diff changeset
  1121
xx_recompileMachineCodeMethodsIn:aClass
4749
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1122
    "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
  1123
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1124
    aClass recompileMethodsWithMachineCode.
940aee58bda6 must recompile machine code methods when a new class
Claus Gittinger <cg@exept.de>
parents: 4725
diff changeset
  1125
    aClass class recompileMethodsWithMachineCode.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1126
! !
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1127
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1128
!Metaclass methodsFor:'queries'!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1129
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1130
category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1131
    "return my category"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1132
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1133
    ^ myClass category
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1134
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1135
    "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
  1136
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1137
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1138
comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1139
    "return my comment"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1140
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1141
    ^ myClass comment
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1142
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1143
    "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
  1144
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1145
5574
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1146
hasExtensions
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1147
    "return true if I have extensions"
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1148
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1149
    ^ myClass hasExtensions
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1150
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1151
!
0fa555d3a5a9 #hasExtensions query
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  1152
5659
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1153
hasExtensionsFrom:aPackageID
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1154
    "return true if I have extensions from a package"
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1155
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1156
    ^ myClass hasExtensionsFrom:aPackageID
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1157
!
58a0b506f1e1 added #hasExtensionsFrom:
Claus Gittinger <cg@exept.de>
parents: 5630
diff changeset
  1158
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1159
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1160
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1161
     Here, true is returned for myself, false for subclasses."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1162
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1163
    ^ self == Metaclass class or:[self == Metaclass]
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1164
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1165
    "Created: 15.4.1996 / 17:17:34 / cg"
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1166
    "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
  1167
!
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1168
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1169
isMeta
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1170
    "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
  1171
     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
  1172
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1173
    ^ true
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1174
!
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1175
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1176
name
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1177
    "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
  1178
     appended."
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1179
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1180
    |nm|
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1181
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1182
    myClass isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1183
        ^ #someMetaclass
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1184
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1185
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1186
    (nm := myClass name) isNil ifTrue:[
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1187
        '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
  1188
        ^ #'unnamed class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1189
    ].
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1190
    ^ nm , ' class'
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1191
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1192
    "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
  1193
    "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
  1194
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1195
1920
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1196
nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1197
    "return the nameSpace I am contained in.
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1198
     Due to the implementation of nameSpaces (as classVariables),
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1199
     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
  1200
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1201
    "/ this information is in the class
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1202
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1203
    ^ myClass nameSpace
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1204
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1205
    "Created: 7.11.1996 / 13:18:52 / cg"
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1206
!
6178e0048794 added namespace query
Claus Gittinger <cg@exept.de>
parents: 1916
diff changeset
  1207
1724
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1208
owningClass
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1209
    "return nil here - regular metaclasses are never private"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1210
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1211
    ^ nil
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1212
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1213
    "Created: 12.10.1996 / 20:12:16 / cg"
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1214
!
ef3f680996db support for private classes
Claus Gittinger <cg@exept.de>
parents: 1698
diff changeset
  1215
1757
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1216
package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1217
    "return my package-id"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1218
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1219
    ^ myClass package
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1220
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1221
    "Created: 15.10.1996 / 19:44:51 / cg"
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1222
!
c153e56cbcad *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1752
diff changeset
  1223
457
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1224
soleInstance 
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1225
    "return my sole class."
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1226
41c73cbee305 change classes versionString when class changes (prepare for sourceCode system)
Claus Gittinger <cg@exept.de>
parents: 423
diff changeset
  1227
    ^ myClass
2047
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1228
!
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1229
5217
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1230
theMetaclass
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1231
    "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
  1232
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1233
    ^ self
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1234
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1235
    "Created: / 30.1.2000 / 23:08:15 / cg"
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1236
    "Modified: / 31.1.2000 / 16:15:00 / cg"
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1237
!
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1238
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1239
theNonMetaclass
5218
603197cdcfe9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5217
diff changeset
  1240
    "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
  1241
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1242
    ^ self soleInstance
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1243
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1244
    "Created: / 30.1.2000 / 23:08:11 / cg"
5218
603197cdcfe9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5217
diff changeset
  1245
    "Modified: / 31.1.2000 / 16:17:02 / cg"
5217
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1246
!
3f9682e47725 added #theNonMetaclass & #theMetaclass,
Claus Gittinger <cg@exept.de>
parents: 5191
diff changeset
  1247
2047
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1248
topOwningClass
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1249
    "return nil here - regular metaclasses are never private"
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1250
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1251
    ^ nil
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1252
8150a3ae6fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
  1253
    "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
  1254
! !
621
87602c9d071c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 566
diff changeset
  1255
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1256
!Metaclass methodsFor:'source management'!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1257
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1258
binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1259
    ^ myClass binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1260
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1261
    "
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1262
     Object binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1263
     Object class binaryRevision
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1264
    "
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1265
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1266
    "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
  1267
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1268
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1269
sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1270
    "return the classes source stream"
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1271
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1272
    ^ myClass sourceStream
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1273
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1274
    "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
  1275
!
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1276
4780
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  1277
sourceStreamFor:sourceFileName
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  1278
    "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
  1279
4780
35deaaafd9b1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4774
diff changeset
  1280
    ^ myClass sourceStreamFor:sourceFileName
2666
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1281
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1282
    "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
  1283
! !
7981b615b48a Make Metaclass a subclass of ClassDescription instead of Class.
Stefan Vogel <sv@exept.de>
parents: 2584
diff changeset
  1284
1742
e1ee359969f5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1733
diff changeset
  1285
!Metaclass class methodsFor:'documentation'!
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  1286
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  1287
version
6078
13d651d69246 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 6021
diff changeset
  1288
    ^ '$Header: /cvs/stx/stx/libbasic/Metaclass.st,v 1.180 2001-10-08 09:17:50 cg Exp $'
639
9ff94fa31be6 version at the end
Claus Gittinger <cg@exept.de>
parents: 621
diff changeset
  1289
! !
2822
64829ed8f8c6 allow for conventions-dialog to be suppressed (offer a querySignal)
Claus Gittinger <cg@exept.de>
parents: 2700
diff changeset
  1290
Metaclass initialize!