Behavior.st
author Claus Gittinger <cg@exept.de>
Thu, 25 Apr 1996 13:16:22 +0200
changeset 1285 7df250a95d7b
parent 1266 cef9b3cd49df
child 1292 89497fff7f87
permissions -rw-r--r--
commentary
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
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
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
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Behavior
1088
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
    14
	instanceVariableNames:'superclass flags selectorArray methodArray otherSuperclasses
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
    15
		instSize'
1088
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
    16
	classVariableNames:'SubclassInfo'
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
    17
	poolDictionaries:''
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
    18
	category:'Kernel-Classes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    21
!Behavior class methodsFor:'documentation'!
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    22
88
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    23
copyright
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    24
"
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    25
 COPYRIGHT (c) 1988 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
    26
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    27
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    28
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    29
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    31
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    32
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    33
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    34
"
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    35
!
81dacba7a63a *** empty log message ***
claus
parents: 82
diff changeset
    36
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    37
documentation
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    38
"
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    39
    Every class in the system inherits from Behavior (via Class, ClassDescription);
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    40
    so here is where most of the class messages end up being implemented.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    41
    (to answer a FAQ: 'Point basicNew' will be done here :-)
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    42
356
claus
parents: 345
diff changeset
    43
    Beginners should keep in mind, that all classes are instances (of subclasses)
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
    44
    of Behavior, therefore you will find the above mentioned 'basicNew:' method 
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
    45
    under the 'instance'-methods of Behavior - NOT under the class methods 
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
    46
    ('Behavior new' will create and return a new class, while sending 'new' to 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
    47
    any instance of Behavior (i.e. any class) will return an instance of that class).
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    48
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    49
    Behavior provides minimum support for all classes - additional stuff is
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    50
    found in ClassDescription and Class. Behaviors provides all mechanisms needed
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    51
    to create instances, and send messages to those. However, Behavior does not provide 
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    52
    all the (symbolic) information needed to compile methods for a class or to get
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    53
    useful information in inspectors.
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    54
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    55
    In contrast to other ST implementations, the methods have been separated
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    56
    from the selectors (there is no Dictionary, but two separate Arrays)
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    57
    - this avoids the need for knowledge about Dictionaries in the runtime library (VM)
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    58
    (lookup and search in these is seldom anyway, so the added benefit from using a 
356
claus
parents: 345
diff changeset
    59
     hashed dictionary is almost void). 
claus
parents: 345
diff changeset
    60
    For ST-80 compatibility, this will be replaced by a single instance of
362
claus
parents: 360
diff changeset
    61
    MethodDictionary (which will NOT be a true dictionary, but an Array with
356
claus
parents: 345
diff changeset
    62
    alternating selector/method entries).
claus
parents: 345
diff changeset
    63
    To be prepared for this change, please do NOT directly use the methodArray 
claus
parents: 345
diff changeset
    64
    and selectorArray instVars.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
1285
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    66
    [Instance variables:]
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    67
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    68
        superclass        <Class>           the receivers superclass
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    69
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    70
        otherSuperclasses <Array of Class>  experimental: other superclasses
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    71
                                            a hook for experimental multiple inheritance
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    72
                                            implementations
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    73
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    74
        selectorArray     <Array of Symbol> the selectors for which inst-methods are defined here
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    75
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    76
        methodArray       <Array of Method> the inst-methods corresponding to the selectors
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    77
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    78
        instSize          <SmallInteger>    the number of instance variables
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    79
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    80
        flags             <SmallInteger>    special flag bits coded in a number
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    81
                                            not for application use
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
81
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
    83
    flag bits (see stc.h):
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    84
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    85
    NOTICE: layout known by compiler and runtime system; be careful when changing
1285
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    86
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    87
    [see also:]
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    88
        Class ClassDescription
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    89
        Method
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
    90
"
356
claus
parents: 345
diff changeset
    91
!
claus
parents: 345
diff changeset
    92
claus
parents: 345
diff changeset
    93
virtualMachineRelationship 
claus
parents: 345
diff changeset
    94
"
357
claus
parents: 356
diff changeset
    95
    NOTICE: 
claus
parents: 356
diff changeset
    96
	the stuff described below may not be available on other
claus
parents: 356
diff changeset
    97
	Smalltalk implementations; be aware that these error mechanisms
claus
parents: 356
diff changeset
    98
	are ST/X specials and applications using these (tricks) may
claus
parents: 356
diff changeset
    99
	not be portable to other systems.
claus
parents: 356
diff changeset
   100
claus
parents: 356
diff changeset
   101
    WARNING: 
claus
parents: 356
diff changeset
   102
	do not try the examples below on (some) other smalltalk systems;
claus
parents: 356
diff changeset
   103
	it has been reported, that some crash badly when doing this .... ;-)
claus
parents: 356
diff changeset
   104
356
claus
parents: 345
diff changeset
   105
    Instances of Behavior and subclasses (i.e. in sloppy words: classes)
claus
parents: 345
diff changeset
   106
    play a special role w.r.t. the VM. Only objects whose class-slot is marked
claus
parents: 345
diff changeset
   107
    as being behaviorLike (in the flag-instvar) are considered to be classLike
claus
parents: 345
diff changeset
   108
    and a message lookup will be done for it in the well known way.
claus
parents: 345
diff changeset
   109
    Thus, if an object has a class for which its class does NOT have
362
claus
parents: 360
diff changeset
   110
    this flag bit set, the VM will trigger an error on a message send.
356
claus
parents: 345
diff changeset
   111
claus
parents: 345
diff changeset
   112
    Why is this so:
claus
parents: 345
diff changeset
   113
claus
parents: 345
diff changeset
   114
    the above lets every object play the role of a class,
claus
parents: 345
diff changeset
   115
    which has been flagged as behaviorLike in its class's flag.
claus
parents: 345
diff changeset
   116
    Thus, you can create arbitrary new classLike objects and have the VM 
claus
parents: 345
diff changeset
   117
    play with them.
claus
parents: 345
diff changeset
   118
    This may offer the flexibility to create a totally different object scheme
362
claus
parents: 360
diff changeset
   119
    on top of ST/X (for example: Self like objects) where any object can play
claus
parents: 360
diff changeset
   120
    a classRole for another object.
356
claus
parents: 345
diff changeset
   121
357
claus
parents: 356
diff changeset
   122
    However, the VM trusts the isBehaviorLike flag - if it is set for some
362
claus
parents: 360
diff changeset
   123
    object, it expects the object selector and methodDictionaries to be found
claus
parents: 360
diff changeset
   124
    at the instance positions as defined here.
claus
parents: 360
diff changeset
   125
    (i.e. instanceVariables with contents and semantic corresponding to
claus
parents: 360
diff changeset
   126
	superclass flags selectorArray methodArray
claus
parents: 360
diff changeset
   127
     must be present and have the same instVar-index as here).
claus
parents: 360
diff changeset
   128
356
claus
parents: 345
diff changeset
   129
    The VM (and the system) may crash badly, if this is not the case.
362
claus
parents: 360
diff changeset
   130
356
claus
parents: 345
diff changeset
   131
    Since every class in the system derives from Behavior, the flag setting
357
claus
parents: 356
diff changeset
   132
    (and instance variable layout) is correct for all 'normal' classes.
claus
parents: 356
diff changeset
   133
    If you experiment by creating new behaviorLike objects, please take
claus
parents: 356
diff changeset
   134
    care of this flag. If you want to use the VM's lookup function, the
claus
parents: 356
diff changeset
   135
    instVars  'superclass', 'selectorArray' and 'methodArray' are required
claus
parents: 356
diff changeset
   136
    and have to be at the same instVar index.
362
claus
parents: 360
diff changeset
   137
    (we suggest, you subclass Behavior, to make certain)
357
claus
parents: 356
diff changeset
   138
claus
parents: 356
diff changeset
   139
    You do not have to care about the above details if you are a 'normal'
claus
parents: 356
diff changeset
   140
    ST-programmer, though.
claus
parents: 356
diff changeset
   141
356
claus
parents: 345
diff changeset
   142
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 746
diff changeset
   143
    Examples (only of theoretical interest):
356
claus
parents: 345
diff changeset
   144
	take away the behaviorLike-flag from a class.
claus
parents: 345
diff changeset
   145
	-> The instances will not understand any messages, since the VM will
claus
parents: 345
diff changeset
   146
	   not recognize its class as being a class ...
claus
parents: 345
diff changeset
   147
claus
parents: 345
diff changeset
   148
	|newMeta notRecognizedAsClass someInstance|
claus
parents: 345
diff changeset
   149
claus
parents: 345
diff changeset
   150
	newMeta := Metaclass new.
claus
parents: 345
diff changeset
   151
	newMeta flags:0.
claus
parents: 345
diff changeset
   152
claus
parents: 345
diff changeset
   153
	notRecognizedAsClass := newMeta new.
claus
parents: 345
diff changeset
   154
claus
parents: 345
diff changeset
   155
	someInstance := notRecognizedAsClass new.
claus
parents: 345
diff changeset
   156
	someInstance perform:#isNil
claus
parents: 345
diff changeset
   157
357
claus
parents: 356
diff changeset
   158
claus
parents: 356
diff changeset
   159
    Of course, this is an exception which can be handled ...:
claus
parents: 356
diff changeset
   160
    Example:
claus
parents: 356
diff changeset
   161
claus
parents: 356
diff changeset
   162
	|newMeta notRecognizedAsClass someInstance|
claus
parents: 356
diff changeset
   163
claus
parents: 356
diff changeset
   164
	newMeta := Metaclass new.
claus
parents: 356
diff changeset
   165
	newMeta flags:0.
claus
parents: 356
diff changeset
   166
claus
parents: 356
diff changeset
   167
	notRecognizedAsClass := newMeta new.
claus
parents: 356
diff changeset
   168
claus
parents: 356
diff changeset
   169
	someInstance := notRecognizedAsClass new.
claus
parents: 356
diff changeset
   170
	Object errorSignal handle:[:ex |
claus
parents: 356
diff changeset
   171
	    ex return
claus
parents: 356
diff changeset
   172
	] do:[
claus
parents: 356
diff changeset
   173
	    someInstance perform:#isNil
claus
parents: 356
diff changeset
   174
	]
claus
parents: 356
diff changeset
   175
claus
parents: 356
diff changeset
   176
claus
parents: 356
diff changeset
   177
    likewise, a doesNotUnderstand-notUnderstood can be handled:
claus
parents: 356
diff changeset
   178
    Example:
claus
parents: 356
diff changeset
   179
claus
parents: 356
diff changeset
   180
	|newMeta funnyClass someInstance|
claus
parents: 356
diff changeset
   181
claus
parents: 356
diff changeset
   182
	newMeta := Metaclass new.
claus
parents: 356
diff changeset
   183
claus
parents: 356
diff changeset
   184
	funnyClass := newMeta new.
claus
parents: 356
diff changeset
   185
	funnyClass setSuperclass:nil.
claus
parents: 356
diff changeset
   186
claus
parents: 356
diff changeset
   187
	someInstance := funnyClass new.
claus
parents: 356
diff changeset
   188
	Object errorSignal handle:[:ex |
claus
parents: 356
diff changeset
   189
	     ex return
claus
parents: 356
diff changeset
   190
	] do:[
claus
parents: 356
diff changeset
   191
	    someInstance perform:#isNil
claus
parents: 356
diff changeset
   192
	]
claus
parents: 356
diff changeset
   193
claus
parents: 356
diff changeset
   194
362
claus
parents: 360
diff changeset
   195
    more examples, which try to trick the VM ;-):
357
claus
parents: 356
diff changeset
   196
	badly playing around with a classes internals ...
claus
parents: 356
diff changeset
   197
claus
parents: 356
diff changeset
   198
	|newClass someInstance|
claus
parents: 356
diff changeset
   199
claus
parents: 356
diff changeset
   200
	newClass := Class new.
claus
parents: 356
diff changeset
   201
	newClass setSelectorArray:nil.
claus
parents: 356
diff changeset
   202
	someInstance := newClass new.
claus
parents: 356
diff changeset
   203
	someInstance inspect
claus
parents: 356
diff changeset
   204
claus
parents: 356
diff changeset
   205
claus
parents: 356
diff changeset
   206
	|newClass someInstance|
claus
parents: 356
diff changeset
   207
claus
parents: 356
diff changeset
   208
	newClass := Class new.
claus
parents: 356
diff changeset
   209
	newClass setSuperclass:nil.
claus
parents: 356
diff changeset
   210
	someInstance := newClass new.
claus
parents: 356
diff changeset
   211
	someInstance inspect
claus
parents: 356
diff changeset
   212
claus
parents: 356
diff changeset
   213
claus
parents: 356
diff changeset
   214
	|newClass someInstance|
claus
parents: 356
diff changeset
   215
claus
parents: 356
diff changeset
   216
	newClass := Class new.
claus
parents: 356
diff changeset
   217
	newClass setSuperclass:newClass.
claus
parents: 356
diff changeset
   218
	someInstance := newClass new.
claus
parents: 356
diff changeset
   219
	someInstance inspect
claus
parents: 356
diff changeset
   220
claus
parents: 356
diff changeset
   221
claus
parents: 356
diff changeset
   222
	|newClass someInstance|
claus
parents: 356
diff changeset
   223
claus
parents: 356
diff changeset
   224
	newClass := Class new.
claus
parents: 356
diff changeset
   225
	newClass setSuperclass:1.
claus
parents: 356
diff changeset
   226
	someInstance := newClass new.
claus
parents: 356
diff changeset
   227
	someInstance inspect
claus
parents: 356
diff changeset
   228
claus
parents: 356
diff changeset
   229
356
claus
parents: 345
diff changeset
   230
    Example:
claus
parents: 345
diff changeset
   231
	creating totally anonymous classes:
claus
parents: 345
diff changeset
   232
claus
parents: 345
diff changeset
   233
	|newClass someInstance|
claus
parents: 345
diff changeset
   234
claus
parents: 345
diff changeset
   235
	newClass := Class new.
claus
parents: 345
diff changeset
   236
	someInstance := newClass new.
claus
parents: 345
diff changeset
   237
	someInstance inspect
claus
parents: 345
diff changeset
   238
357
claus
parents: 356
diff changeset
   239
356
claus
parents: 345
diff changeset
   240
    Example:
357
claus
parents: 356
diff changeset
   241
	creating totally anonymous metaclasses:
356
claus
parents: 345
diff changeset
   242
claus
parents: 345
diff changeset
   243
	|newMeta newClass someInstance|
claus
parents: 345
diff changeset
   244
claus
parents: 345
diff changeset
   245
	newMeta := Metaclass new.
claus
parents: 345
diff changeset
   246
	newClass := newMeta new.
claus
parents: 345
diff changeset
   247
	someInstance := newClass new.
claus
parents: 345
diff changeset
   248
	someInstance inspect
357
claus
parents: 356
diff changeset
   249
claus
parents: 356
diff changeset
   250
    PS: if you experiment with new behaviorLike objects, you may want 
claus
parents: 356
diff changeset
   251
	to turn off the VM's debugPrintouts
claus
parents: 356
diff changeset
   252
	with: 
claus
parents: 356
diff changeset
   253
		'Smalltalk debugPrinting:false'
claus
parents: 356
diff changeset
   254
	and: 
claus
parents: 356
diff changeset
   255
		'Smalltalk infoPrinting:false'
356
claus
parents: 345
diff changeset
   256
"
47
93f17a1b452c *** empty log message ***
claus
parents: 45
diff changeset
   257
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
!Behavior class methodsFor:'creating new classes'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
new
356
claus
parents: 345
diff changeset
   262
    "creates and return a new behavior (which is like a class,
claus
parents: 345
diff changeset
   263
     but without the symbolic & name information).
claus
parents: 345
diff changeset
   264
     Not for normal applications.
claus
parents: 345
diff changeset
   265
     Sending the returned behavior the #new message gives you
claus
parents: 345
diff changeset
   266
     an instance if it.
claus
parents: 345
diff changeset
   267
claus
parents: 345
diff changeset
   268
     Notice: the returned class is given a superclass of Object;
claus
parents: 345
diff changeset
   269
     this allows for its new instances to be inspected and the like."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
    |newClass|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
    newClass := self basicNew.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
    newClass setSuperclass:Object
345
claus
parents: 343
diff changeset
   275
		 selectors:#() "/ (Array new:0)
claus
parents: 343
diff changeset
   276
		   methods:#() "/ (Array new:0)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
   277
		  instSize:0
345
claus
parents: 343
diff changeset
   278
		     flags:(self flagBehavior).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
    ^ newClass
356
claus
parents: 345
diff changeset
   280
claus
parents: 345
diff changeset
   281
    "
claus
parents: 345
diff changeset
   282
     Behavior new               <- a new behavior
claus
parents: 345
diff changeset
   283
     Behavior new new           <- an instance of it
claus
parents: 345
diff changeset
   284
     ClassDescription new       <- a new classDescription
claus
parents: 345
diff changeset
   285
     ClassDescription new new   <- an instance of it
claus
parents: 345
diff changeset
   286
     Class new                  <- a new class
claus
parents: 345
diff changeset
   287
     Class new new              <- an instance of it
claus
parents: 345
diff changeset
   288
     Metaclass new              <- a new metaclass
claus
parents: 345
diff changeset
   289
     Metaclass new new          <- an instance (i.e. a class) of it
claus
parents: 345
diff changeset
   290
     Metaclass new new new      <- an instance of this new class
claus
parents: 345
diff changeset
   291
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   294
!Behavior class methodsFor:'flag bit constants'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   295
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   296
flagBehavior
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   297
    "return the flag code which marks Behavior-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   298
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   299
     checking for behaviors."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   300
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   301
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   302
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   303
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   304
    RETURN ( __MKSMALLINT(BEHAVIOR_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   305
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   306
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   307
    "consistency check:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   308
     all class-entries must be behaviors;
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   309
     all behaviors must be flagged so (in its class's flags)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   310
     (otherwise, VM will bark)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   311
     all non-behaviors may not be flagged
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   312
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   313
     |bit|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   314
     bit := Class flagBehavior.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   315
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   316
     ObjectMemory allObjectsDo:[:o|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   317
       o isBehavior ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   318
	 (o class flags bitTest:bit) ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   319
	     self halt
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   320
	 ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   321
       ] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   322
	 (o class flags bitTest:bit) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   323
	     self halt
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   324
	 ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   325
       ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   326
       o class isBehavior ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   327
	 self halt
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   328
       ] ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   329
	 (o class class flags bitTest:bit) ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   330
	     self halt
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   331
	 ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   332
       ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   333
     ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   334
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   335
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   336
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   337
flagBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   338
    "return the flag code which marks Block-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   339
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   340
     checking for blocks."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   341
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   342
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   343
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   344
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   345
    RETURN ( __MKSMALLINT(BLOCK_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   346
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   347
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   348
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   349
flagBlockContext
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   350
    "return the flag code which marks BlockContext-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   351
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   352
     checking for blockContexts."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   353
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   354
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   355
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   356
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   357
    RETURN ( __MKSMALLINT(BCONTEXT_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   358
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   359
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   360
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   361
flagBytes
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   362
    "return the flag code for byte-valued indexed instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   363
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   364
     it with flagBytes."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   365
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   366
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   367
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   368
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   369
    RETURN ( __MKSMALLINT(BYTEARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   370
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   371
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   372
     Behavior flagBytes    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   373
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   374
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   375
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   376
flagContext
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   377
    "return the flag code which marks Context-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   378
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   379
     checking for contexts."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   380
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   381
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   382
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   383
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   384
    RETURN ( __MKSMALLINT(CONTEXT_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   385
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   386
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   387
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   388
flagDoubles
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   389
    "return the flag code for double-valued indexed instances (i.e. 8-byte reals).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   390
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   391
     it with flagDoubles."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   392
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   393
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   394
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   395
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   396
    RETURN ( __MKSMALLINT(DOUBLEARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   397
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   398
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   399
     Behavior flagDoubles    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   400
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   401
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   402
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   403
flagFloat
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   404
    "return the flag code which marks Float-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   405
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   406
     checking for floats."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   407
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   408
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   409
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   410
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   411
    RETURN ( __MKSMALLINT(FLOAT_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   412
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   413
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   414
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   415
flagFloats
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   416
    "return the flag code for float-valued indexed instances (i.e. 4-byte reals).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   417
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   418
     it with flagFloats."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   419
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   420
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   421
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   422
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   423
    RETURN ( __MKSMALLINT(FLOATARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   424
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   425
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   426
     Behavior flagFloats    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   427
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   428
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   429
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   430
flagLongs
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   431
    "return the flag code for long-valued indexed instances (i.e. 4-byte).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   432
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   433
     it with flagLongs."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   434
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   435
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   436
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   437
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   438
    RETURN ( __MKSMALLINT(LONGARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   439
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   440
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   441
     Behavior flagLongs    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   442
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   443
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   444
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   445
flagMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   446
    "return the flag code which marks Method-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   447
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   448
     checking for methods."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   449
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   450
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   451
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   452
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   453
    RETURN ( __MKSMALLINT(METHOD_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   454
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   455
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   456
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   457
flagNonObjectInst
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   458
    "return the flag code which marks instances which have a
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   459
     non-object instance variable (in slot 1).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   460
     (these are ignored by the garbage collector)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   461
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   462
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   463
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   464
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   465
    RETURN ( __MKSMALLINT(NONOBJECT_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   466
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   467
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   468
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   469
flagNotIndexed
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   470
    "return the flag code for non-indexed instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   471
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   472
     it with flagNotIndexed."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   473
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   474
    ^ 0
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   475
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   476
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   477
flagPointers
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   478
    "return the flag code for pointer indexed instances (i.e. Array of object).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   479
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   480
     it with flagPointers."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   481
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   482
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   483
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   484
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   485
    RETURN ( __MKSMALLINT(POINTERARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   486
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   487
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   488
     Behavior flagPointers    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   489
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   490
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   491
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   492
flagSymbol
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   493
    "return the flag code which marks Symbol-like instances.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   494
     You have to check this single bit in the flag value when
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   495
     checking for symbols."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   496
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   497
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   498
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   499
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   500
    RETURN ( __MKSMALLINT(SYMBOL_INSTS) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   501
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   502
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   503
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   504
flagWeakPointers
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   505
    "return the flag code for weak pointer indexed instances (i.e. WeakArray).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   506
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   507
     it with flagWeakPointers."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   508
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   509
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   510
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   511
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   512
    RETURN ( __MKSMALLINT(WKPOINTERARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   513
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   514
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   515
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   516
flagWords
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   517
    "return the flag code for word-valued indexed instances (i.e. 2-byte).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   518
     You have to mask the flag value with indexMask when comparing
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   519
     it with flagWords."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   520
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   521
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   522
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   523
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   524
    RETURN ( __MKSMALLINT(WORDARRAY) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   525
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   526
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   527
     Behavior flagWords    
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   528
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   529
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   530
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   531
maskIndexType
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   532
    "return a mask to extract all index-type bits"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   533
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   534
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   535
    /* this is defined as a primitive to get defines from stc.h */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   536
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
   537
    RETURN ( __MKSMALLINT(ARRAYMASK) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   538
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   539
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   540
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   541
!Behavior class methodsFor:'private '!
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   542
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   543
flushSubclassInfo
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   544
    SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   545
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   546
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   547
     Class flushSubclassInfo
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   548
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   549
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   550
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   551
subclassInfo
357
claus
parents: 356
diff changeset
   552
    |d|
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   553
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   554
    SubclassInfo notNil ifTrue:[^ SubclassInfo].
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   555
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   556
    d := IdentityDictionary new.
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   557
    Smalltalk allClassesDo:[:aClass |
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   558
	|superCls|
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   559
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   560
	aClass isMeta not ifTrue:[
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   561
	    superCls := aClass superclass.
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   562
	    superCls notNil ifTrue:[
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   563
		(d includesKey: superCls) ifFalse:[
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   564
		    d at:superCls put:(Set with:aClass).
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   565
		] ifTrue:[
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   566
		    (d at:superCls ) add:aClass
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   567
		]
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   568
	    ]
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   569
	].
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   570
    ].
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   571
    SubclassInfo := d.
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   572
    ^ d
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   573
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   574
    "
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   575
     Class subclassInfo
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   576
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   577
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   578
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   579
!Behavior class methodsFor:'queries'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   580
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   581
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1259
diff changeset
   582
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1259
diff changeset
   583
     Here, true is returned for myself, false for subclasses."
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   584
1179
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   585
    ^ (self == Behavior class) or:[self == Behavior]
3e0f32177af4 allow subclasses of Class to be changed
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   586
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1259
diff changeset
   587
    "Modified: 23.4.1996 / 15:55:52 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   588
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   589
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   590
!Behavior methodsFor:'accessing'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   591
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   592
addSelector:newSelector withLazyMethod:newMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   593
    "add the method given by 2nd argument under the selector given by
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   594
     1st argument to the methodDictionary. 
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   595
     Since it does not normally flush any caches,
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   596
     this is only allowed for lazy methods (which are for a new class)."
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   597
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   598
    |oldMethod|
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   599
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   600
    newMethod isLazyMethod ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   601
	self error:'operation only allowed for lazy methods'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   602
	^ false
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   603
    ].
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   604
    oldMethod := self compiledMethodAt:newSelector.
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   605
    "/
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   606
    "/ oops: we must flush, if this method already exists ...
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   607
    "/ otherwise, the old method would still be executed out of the caches.
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   608
    "/
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   609
    oldMethod notNil ifTrue:[
746
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   610
	newMethod privacy:(oldMethod privacy).
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   611
	newMethod restricted:(oldMethod isRestricted).
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   612
	ObjectMemory flushCaches
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   613
    ].
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   614
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   615
    (self primAddSelector:newSelector withMethod:newMethod) ifTrue:[
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   616
	"/
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   617
	"/ pass the selector AND the old method as changeArg
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   618
	"/ - this allows for watchers to find out if its a new method or a method-change
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   619
	"/
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   620
	self changed:#methodDictionary with:(Array with:newSelector with:oldMethod).
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   621
	^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   622
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   623
    ^ false
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   624
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   625
    "Modified: 11.12.1995 / 13:57:17 / cg"
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   626
!
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   627
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   628
addSelector:newSelector withMethod:newMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   629
    "add the method given by 2nd argument under the selector given by
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   630
     1st argument to the methodDictionary. Flushes all caches."
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   631
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   632
    |nargs oldMethod|
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   633
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   634
    oldMethod := self compiledMethodAt:newSelector.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   635
    (self primAddSelector:newSelector withMethod:newMethod) ifFalse:[^ false].
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   636
746
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   637
    oldMethod notNil ifTrue:[
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   638
	newMethod privacy:(oldMethod privacy).
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   639
	newMethod restricted:(oldMethod isRestricted).
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   640
    ].
31f5d9af5680 dont forget privace & restricted when entering a method
Claus Gittinger <cg@exept.de>
parents: 734
diff changeset
   641
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   642
    "/
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   643
    "/ pass the selector AND the old method as changeArg
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   644
    "/ - this allows for watchers to find out if its a new method or a method-change
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   645
    "/
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   646
    self changed:#methodDictionary with:(Array with:newSelector with:oldMethod).
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   647
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   648
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   649
     if I have no subclasses, all we have to flush is cached
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   650
     data for myself ... (actually, in any case all that needs
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   651
     to be flushed is info for myself and all of my subclasses)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   652
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   653
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   654
    problem: this is slower; since looking for all subclasses is (currently)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   655
	     a bit slow :-(
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   656
	     We need the hasSubclasses-info bit in Behavior; now
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   657
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   658
    self withAllSubclassesDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   659
	ObjectMemory flushInlineCachesFor:aClass withArgs:nargs.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   660
	ObjectMemory flushMethodCacheFor:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   661
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   662
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   663
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   664
    nargs := newSelector numArgs.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   665
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   666
    ObjectMemory flushMethodCacheForSelector:newSelector.
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   667
"/    ObjectMemory flushMethodCache.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   668
    ObjectMemory flushInlineCachesWithArgs:nargs.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   669
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   670
    ^ true
734
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   671
a4378f483a86 pass original method as changeArg when doing method changes;
Claus Gittinger <cg@exept.de>
parents: 662
diff changeset
   672
    "Created: 11.12.1995 / 13:59:37 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   673
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   674
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   675
addSuperclass:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   676
    "EXPERIMENTAL MI support: add aClass to the set of classes, from which instances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   677
     inherit protocol."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   678
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   679
    "first, check if the class is abstract - 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   680
     allows abstract mixins are allowed in the current implementation"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   681
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   682
    aClass instSize == 0 ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   683
	self error:'only abstract mixins allowed'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   684
	^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   685
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   686
    otherSuperclasses isNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   687
	otherSuperclasses := Array with:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   688
    ] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   689
	otherSuperclasses := otherSuperclasses copyWith:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   690
    ].
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   691
    SubclassInfo := nil.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   692
    ObjectMemory flushCaches
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   693
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   694
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   695
displayString
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   696
    "although behaviors have no name, we return something
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   697
     useful here - there are many places (inspectors) where
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   698
     a classes name is asked for.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   699
     Implementing this message here allows instances of anonymous classes
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   700
     to show a reasonable name."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   701
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   702
    ^ 'someBehavior'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   703
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   704
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   705
flags
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   706
    "return the receivers flag bits"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   707
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   708
    ^ flags
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   709
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   710
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   711
instSize
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   712
    "return the number of instance variables of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   713
     This includes all superclass instance variables."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   714
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   715
    ^ instSize
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   716
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   717
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   718
methodArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   719
    "return the receivers method array.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   720
     Notice: this is not compatible with ST-80."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   721
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   722
    ^ methodArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   723
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   724
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   725
methodDictionary
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   726
    "return the receivers method dictionary. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   727
     Since no dictionary is actually present, create one for ST-80 compatibility."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   728
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   729
    |dict n "{ Class: SmallInteger }"|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   730
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   731
    dict := IdentityDictionary new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   732
    n := selectorArray size.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   733
    1 to:n do:[:index |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   734
	dict at:(selectorArray at:index) put:(methodArray at:index)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   735
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   736
    ^ dict
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   737
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   738
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   739
removeSelector:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   740
    "remove the selector, aSelector and its associated method 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   741
     from the methodDictionary"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   742
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   743
    |index oldSelectorArray oldMethodArray newSelectorArray newMethodArray|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   744
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   745
    index := selectorArray identityIndexOf:aSelector startingAt:1.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   746
    (index == 0) ifTrue:[^ false].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   747
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   748
    newSelectorArray := selectorArray copyWithoutIndex:index.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   749
    newMethodArray := methodArray copyWithoutIndex:index.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   750
    oldSelectorArray := selectorArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   751
    oldMethodArray := methodArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   752
    selectorArray := newSelectorArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   753
    methodArray := newMethodArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   754
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   755
    [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   756
	|nargs|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   757
	nargs := aSelector numArgs.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   758
	ObjectMemory flushMethodCache.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   759
	ObjectMemory flushInlineCachesWithArgs:nargs.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   760
    ] value
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   761
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   762
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   763
     actually, we would do better with less flushing ...
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   764
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   765
    ObjectMemory flushCaches.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   766
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   767
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   768
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   769
removeSuperclass:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   770
    "EXPERIMENTAL MI support: remove aClass from the set of classes, from which instances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   771
     inherit protocol."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   772
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   773
    otherSuperclasses notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   774
	otherSuperclasses := otherSuperclasses copyWithout:aClass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   775
	otherSuperclasses isEmpty ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   776
	    otherSuperclasses := nil
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   777
	].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   778
	SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   779
	ObjectMemory flushCaches
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   780
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   781
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   782
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   783
selectorArray 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   784
    "return the receivers selector array.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   785
     Notice: this is not compatible with ST-80."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   786
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   787
    ^ selectorArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   788
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   789
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   790
selectors
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   791
    "return the receivers selector array as an orderedCollection.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   792
     Notice: this may not be compatible with ST-80.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   793
     (should we return a Set ?)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   794
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   795
    ^ selectorArray asOrderedCollection
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   796
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   797
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   798
selectors:newSelectors methods:newMethods
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   799
    "set both selector array and method array of the receiver,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   800
     and flush caches"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   801
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   802
    ObjectMemory flushCaches.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   803
    selectorArray := newSelectors.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   804
    methodArray := newMethods
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   805
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   806
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   807
superclass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   808
    "return the receivers superclass"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   809
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   810
    ^ superclass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   811
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   812
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   813
superclass:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   814
    "set the superclass - this actually creates a new class,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   815
     recompiling all methods for the new one. The receiving class stays
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   816
     around anonymous to allow existing instances some life.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   817
     This may change in the future (adjusting existing instances)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   818
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   819
    SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   820
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   821
    "must flush caches since lookup chain changes"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   822
    ObjectMemory flushCaches.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   823
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   824
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   825
    superclass := aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   826
"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   827
    "for correct recompilation, just create a new class ..."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   828
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   829
    aClass subclass:(self name)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   830
	   instanceVariableNames:(self instanceVariableString)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   831
	   classVariableNames:(self classVariableString)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   832
	   poolDictionaries:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   833
	   category:self category
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   834
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   835
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   836
!Behavior methodsFor:'accessing virtual instvars'!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   837
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   838
implicit_methodDict 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   839
    "ST-80 compatibility behavior subclasses.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   840
     This allows subclasses to assume there is an instance variable
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   841
     named methodDict (compile them with implicit self-sends)."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   842
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   843
    ^ self methodDictionary
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   844
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   845
    "Modified: 16.4.1996 / 18:09:44 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   846
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   847
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   848
implicit_methodDict:aDictionary 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   849
    "ST-80 compatibility behavior subclasses.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   850
     This allows subclasses to assume there is an instance variable
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   851
     named methodDict (compile them with implicit self-sends)."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   852
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   853
    ^ self error:'not allowed to set the methodDictionary'
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   854
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   855
    "Modified: 16.4.1996 / 18:09:52 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   856
! !
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
   857
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   858
!Behavior methodsFor:'autoload check'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   859
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   860
autoload
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   861
    "force autoloading - do nothing here; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   862
     redefined in Autoload; see comment there"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   863
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   864
    ^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   865
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   866
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   867
isLoaded
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   868
    "return true, if the class has been loaded; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   869
     redefined in Autoload; see comment there"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   870
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   871
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   872
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   873
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   874
!Behavior methodsFor:'binary storage'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   875
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   876
binaryDefinitionFrom:stream manager:manager
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   877
    "sent during a binary read by the input manager.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   878
     Read the definition on an empty instance (of my class) from stream.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   879
     All pointer instances are left nil, while all bits are read in here.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   880
     return the new object."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   881
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   882
    |obj t
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   883
     basicSize "{ Class: SmallInteger }" |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   884
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   885
    self isPointers ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   886
	"/
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   887
	"/ inst size not needed - if you uncomment the line below,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   888
	"/ also uncomment the corresponding line in
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   889
	"/ Object>>storeBinaryDefinitionOn:manager:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   890
	"/
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   891
	"/ stream next. "skip instSize"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   892
	self isVariable ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   893
	    ^ self basicNew:(stream nextNumber:3)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   894
	].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   895
	^ self basicNew
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   896
    ].
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   897
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
   898
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   899
     an object with bit-valued instance variables.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   900
     These are read here.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   901
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   902
    basicSize := stream nextNumber:4.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   903
    obj := self basicNew:basicSize.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   904
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   905
    self isBytes ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   906
	stream nextBytes:basicSize into:obj
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   907
    ] ifFalse: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   908
	self isWords ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   909
	    1 to:basicSize do:[:i |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   910
		obj basicAt:i put:(stream nextNumber:2)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   911
	    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   912
	] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   913
	    self isLongs ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   914
		1 to:basicSize do:[:i |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   915
		    obj basicAt:i put:(stream nextNumber:4)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   916
		]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   917
	    ] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   918
		self isFloats ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   919
		    "could do it in one big read on machines which use IEEE floats ..."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   920
		    t := Float basicNew.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   921
		    1 to:basicSize do:[:i |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   922
			Float readBinaryIEEESingleFrom:stream into:t.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   923
			obj basicAt:i put: t
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   924
		    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   925
		] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   926
		    self isDoubles ifTrue: [
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   927
			"could do it in one big read on machines which use IEEE doubles ..."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   928
			t := Float basicNew.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   929
			1 to:basicSize do:[:i |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   930
			    Float readBinaryIEEEDoubleFrom:stream into:t.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   931
			    obj basicAt:i put: t
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   932
			]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   933
		    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   934
		]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   935
	    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   936
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   937
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   938
    ^obj
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   939
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   940
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   941
canCloneFrom:anObject 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   942
    "return true, if this class can clone an obsolete object as retrieved
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   943
     by a binary load. Subclasses which do not want to have obsolete objects
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   944
     be converted, should redefine this method to return false.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   945
     (However, conversion is never done silently in a binary load; you
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   946
      have to have a handler for the binaryload errors and for the conversion
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   947
      request signal.)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   948
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   949
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   950
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   951
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   952
cloneFrom:aPrototype
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   953
    "return an instance of myself with variables initialized from
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   954
     a prototype. This is used when instances of obsolete classes are
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   955
     binary loaded and a conversion is done on the obsolete object. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   956
     UserClasses may redefine this for better conversions."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   957
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   958
    |newInst indexed myInfo otherInfo varIndexAssoc|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   959
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   960
    indexed := false.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   961
    aPrototype class isVariable ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   962
	self isVariable ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   963
	    indexed := true.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   964
	].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   965
	"otherwise, these are lost ..."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   966
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   967
    indexed ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   968
	newInst := self basicNew:aPrototype basicSize
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   969
    ] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   970
	newInst := self basicNew
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   971
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   972
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   973
    myInfo := self instanceVariableOffsets.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   974
    otherInfo := aPrototype class instanceVariableOffsets.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   975
    myInfo keysAndValuesDo:[:name :index |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   976
	varIndexAssoc := otherInfo at:name ifAbsent:[].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   977
	varIndexAssoc notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   978
	    newInst instVarAt:index put:(aPrototype instVarAt:(varIndexAssoc value))
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   979
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   980
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   981
    indexed ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   982
	1 to:aPrototype basicSize do:[:index |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   983
	    newInst basicAt:index put:(aPrototype basicAt:index)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   984
	].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   985
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   986
    ^ newInst
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   987
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   988
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   989
     Class withoutUpdatingChangesDo:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   990
	 Point subclass:#Point3D
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   991
	   instanceVariableNames:'z'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   992
	   classVariableNames:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   993
	   poolDictionaries:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   994
	   category:'testing'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   995
	 (Point3D cloneFrom:1@2) inspect.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   996
     ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   997
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   998
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   999
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1000
     Class withoutUpdatingChangesDo:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1001
	 Point variableSubclass:#Point3D
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1002
	   instanceVariableNames:'z'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1003
	   classVariableNames:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1004
	   poolDictionaries:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1005
	   category:'testing'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1006
	 (Point3D cloneFrom:#(1 2 3)) inspect.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1007
     ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1008
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1009
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1010
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1011
     |someObject|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1012
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1013
     Class withoutUpdatingChangesDo:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1014
	 Object subclass:#TestClass1 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1015
	   instanceVariableNames:'foo bar'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1016
	   classVariableNames:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1017
	   poolDictionaries:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1018
	   category:'testing'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1019
	 someObject := TestClass1 new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1020
	 someObject instVarAt:1 put:'foo'; instVarAt:2 put:'bar'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1021
	 Object subclass:#TestClass2 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1022
	   instanceVariableNames:'bar foo'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1023
	   classVariableNames:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1024
	   poolDictionaries:''
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1025
	   category:'testing'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1026
	 (TestClass2 cloneFrom:someObject) inspect.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1027
     ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1028
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1029
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1030
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1031
readBinaryFrom:aStream
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1032
    "read an objects binary representation from the argument,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1033
     aStream and return it. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1034
     The read object must be a kind of myself, otherwise an error is raised. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1035
     To get any object, use 'Object readBinaryFrom:...',
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1036
     To get any number, use 'Number readBinaryFrom:...' and so on.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1037
     This is the reverse operation to 'storeBinaryOn:'. "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1038
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1039
    ^ self readBinaryFrom:aStream onError:[self error:('expected ' , self name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1040
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1041
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1042
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1043
     s := WriteStream on:(ByteArray new).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1044
     #(1 2 3 4) storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1045
     Object readBinaryFrom:(ReadStream on:s contents)  
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1046
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1047
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1048
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1049
     s := 'testFile' asFilename writeStream binary.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1050
     #(1 2 3 4) storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1051
     'hello world' storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1052
     s close.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1053
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1054
     s := 'testFile' asFilename readStream binary.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1055
     Transcript showCr:(Object readBinaryFrom:s).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1056
     Transcript showCr:(Object readBinaryFrom:s).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1057
     s close.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1058
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1059
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1060
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1061
readBinaryFrom:aStream onError:exceptionBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1062
    "read an objects binary representation from the argument,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1063
     aStream and return it. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1064
     The read object must be a kind of myself, otherwise the value of
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1065
     the exceptionBlock is returned.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1066
     To get any object, use 'Object readBinaryFrom:...',
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1067
     To get any number, use 'Number readBinaryFrom:...' and so on.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1068
     This is the reverse operation to 'storeBinaryOn:'. "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1069
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1070
    |newObject|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1071
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1072
    newObject := (BinaryInputManager new:1024) readFrom:aStream.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1073
    (newObject isKindOf:self) ifFalse:[^ exceptionBlock value].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1074
    ^ newObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1075
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1076
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1077
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1078
     s := WriteStream on:(ByteArray new).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1079
     #(1 2 3 4) storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1080
     Object readBinaryFrom:(ReadStream on:s contents) onError:['oops'] 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1081
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1082
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1083
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1084
     s := WriteStream on:(ByteArray new).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1085
     #[1 2 3 4] storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1086
     Array readBinaryFrom:(ReadStream on:s contents)  onError:['oops']  
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1087
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1088
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1089
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1090
storeBinaryDefinitionOn: stream manager: manager
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1091
    "binary store of a classes definition.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1092
     Classes will store the name only and restore by looking for
1259
8c62958114ad commentary
Claus Gittinger <cg@exept.de>
parents: 1192
diff changeset
  1093
     that name in the Smalltalk dictionary.
8c62958114ad commentary
Claus Gittinger <cg@exept.de>
parents: 1192
diff changeset
  1094
     This is an internal interface for binary storage mechanism."
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1095
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1096
    | myName |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1097
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1098
    myName := self name.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1099
    stream nextNumber:4 put:self signature.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1100
    stream nextNumber:2 put:0.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1101
    stream nextNumber:2 put:myName size.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1102
    myName do:[:c| 
1259
8c62958114ad commentary
Claus Gittinger <cg@exept.de>
parents: 1192
diff changeset
  1103
        stream nextPut:c asciiValue
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1104
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1105
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1106
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1107
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1108
     s := WriteStream on:ByteArray new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1109
     #(1 2 3 4) storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1110
     Object readBinaryFrom:(ReadStream on:s contents)  
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1111
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1112
     |s|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1113
     s := WriteStream on:ByteArray new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1114
     Rectangle storeBinaryOn:s.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1115
     Object readBinaryFrom:(ReadStream on:s contents)  
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1116
    "
1259
8c62958114ad commentary
Claus Gittinger <cg@exept.de>
parents: 1192
diff changeset
  1117
8c62958114ad commentary
Claus Gittinger <cg@exept.de>
parents: 1192
diff changeset
  1118
    "Modified: 23.4.1996 / 09:29:44 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1119
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1120
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1121
!Behavior methodsFor:'compiler interface'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1122
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1123
compiler
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1124
    "return the compiler to use for this class.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1125
     OBSOLETE: This is the old ST/X interface, kept for migration. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1126
	       Dont use it - it will vanish."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1127
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1128
    ^ self compilerClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1129
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1130
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1131
compilerClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1132
    "return the compiler to use for this class - 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1133
     this can be redefined in special classes, to get classes with
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1134
     Lisp, Prolog, ASN1, Basic :-) or whatever syntax."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1135
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1136
    ^ Compiler
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1137
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1138
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1139
evaluatorClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1140
    "return the compiler to use for expression evaluation for this class - 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1141
     this can be redefined in special classes, to get classes with
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1142
     Lisp, Prolog, ASN1, Basic :-) or whatever syntax."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1143
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1144
    ^ Compiler
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1145
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1146
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1147
!Behavior methodsFor:'copying'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1148
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1149
deepCopy
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1150
    "return a deep copy of the receiver
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1151
     - return the receiver here - time will show if this is ok"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1152
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1153
    ^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1154
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1155
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1156
deepCopyUsing:aDictionary
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1157
    "return a deep copy of the receiver
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1158
     - return the receiver here - time will show if this is ok"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1159
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1160
    ^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1161
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1162
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1163
simpleDeepCopy
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1164
    "return a deep copy of the receiver
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1165
     - return the receiver here - time will show if this is ok"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1166
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1167
    ^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1168
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1169
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1170
!Behavior methodsFor:'dummy changes management'!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1171
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1172
addChangeRecordForClassRemove:aClassName
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1173
     "add a change record that some class has been removed.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1174
      Defined as dummy here, since Behavior does not know about change management.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1175
      (only Classes do). This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1176
      (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1177
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1178
    "Created: 16.4.1996 / 16:30:09 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1179
    "Modified: 16.4.1996 / 18:10:35 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1180
! !
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1181
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1182
!Behavior methodsFor:'dummy fileOut'!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1183
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1184
fileOutDefinitionOn:aStream
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1185
    "dummy fileOut defined here.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1186
     This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1187
     (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1188
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1189
    ^ self
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1190
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1191
    "Created: 16.4.1996 / 16:28:01 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1192
! !
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  1193
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1194
!Behavior methodsFor:'enumerating'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1195
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1196
allDerivedInstancesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1197
    "evaluate aBlock for all of my instances and all instances of subclasses.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1198
     This method is going to be removed for protocol compatibility with
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1199
     other STs; use allSubInstancesDo:"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1200
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1201
    self obsoleteMethodWarning:'please use #allSubInstancesDo:'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1202
    self allSubInstancesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1203
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1204
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1205
     StandardSystemView allDerivedInstancesDo:[:v | Transcript showCr:(v name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1206
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1207
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1208
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1209
allInstancesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1210
    "evaluate aBlock for all of my instances"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1211
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1212
"/    ObjectMemory allObjectsDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1213
"/        (anObject class == self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1214
"/            aBlock value:anObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1215
"/        ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1216
"/    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1217
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1218
    ObjectMemory allInstancesOf:self do:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1219
	aBlock value:anObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1220
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1221
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1222
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1223
     StandardSystemView allInstancesDo:[:v | Transcript showCr:(v name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1224
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1225
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1226
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1227
allSubInstancesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1228
    "evaluate aBlock for all of my instances and all instances of subclasses"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1229
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1230
    ObjectMemory allObjectsDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1231
	(anObject isKindOf:self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1232
	    aBlock value:anObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1233
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1234
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1235
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1236
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1237
     StandardSystemView allSubInstancesDo:[:v | Transcript showCr:(v name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1238
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1239
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1240
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1241
allSubclassesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1242
    "evaluate aBlock for all of my subclasses.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1243
     There is no specific order, in which the entries are enumerated.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1244
     This will only enumerate globally known classes - for anonymous
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1245
     behaviors, you have to walk over all instances of Behavior."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1246
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1247
    Smalltalk allBehaviorsDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1248
	(aClass isSubclassOf:self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1249
	    aBlock value:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1250
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1251
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1252
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1253
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1254
     Collection allSubclassesDo:[:c | Transcript showCr:(c name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1255
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1256
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1257
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1258
allSubclassesInOrderDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1259
    "evaluate aBlock for all of my subclasses.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1260
     Higher level subclasses will be enumerated before the deeper ones,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1261
     so the order in which aBlock gets called is ok to fileOut classes in
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1262
     correct order for later fileIn.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1263
     This will only enumerate globally known classes - for anonymous
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1264
     behaviors, you have to walk over all instances of Behavior"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1265
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1266
    self subclassesDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1267
	aBlock value:aClass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1268
	aClass allSubclassesInOrderDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1269
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1270
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1271
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1272
     Collection allSubclassesInOrderDo:[:c | Transcript showCr:(c name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1273
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1274
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1275
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1276
allSuperclassesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1277
    "evaluate aBlock for all of my superclasses"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1278
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1279
    |theClass|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1280
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1281
    theClass := superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1282
    [theClass notNil] whileTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1283
	aBlock value:theClass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1284
	theClass := theClass superclass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1285
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1286
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1287
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1288
     String allSuperclassesDo:[:c | Transcript showCr:(c name)]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1289
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1290
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1291
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1292
subclassesDo:aBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1293
    "evaluate the argument, aBlock for all immediate subclasses.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1294
     This will only enumerate globally known classes - for anonymous
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1295
     behaviors, you have to walk over all instances of Behavior."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1296
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1297
    |coll|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1298
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1299
    SubclassInfo isNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1300
	Behavior subclassInfo
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1301
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1302
    SubclassInfo notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1303
	coll := SubclassInfo at:self ifAbsent:nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1304
	coll notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1305
	    coll do:aBlock.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1306
	].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1307
	^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1308
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1309
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1310
    Smalltalk allBehaviorsDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1311
	(aClass superclass == self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1312
	    aBlock value:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1313
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1314
    ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1315
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1316
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1317
     Collection subclassesDo:[:c | Transcript showCr:(c name)]
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  1318
    "
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  1319
! !
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  1320
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1321
!Behavior methodsFor:'initialization'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1322
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1323
deinitialize
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1324
    "deinitialize is sent to a class before it is physically unloaded.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1325
     This is only done with classes which have been loaded in from a binary
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1326
     file. Classes may release any primitive memory or other stuff which is
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1327
     not visible to smalltalk (for example, release internal memory).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1328
     The default action here is to do nothing."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1329
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1330
    ^ self
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1331
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1332
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1333
initialize
442
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1334
    "initialize is sent to a class either during startup,
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1335
     (for all statically compiled-in classes) or after a class
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1336
     has been loaded into the system (either bytecodes or machinecode).
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1337
     The default action here is to do nothing."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1338
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1339
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1340
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1341
328
claus
parents: 325
diff changeset
  1342
postAutoload
442
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1343
    "postAutoload is sent to a class after it has been autoloaded.
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1344
     This gives it a chance to arrange for automatic unloading to be done
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1345
     after a while ...
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1346
     This is NOT sent to statically compiled in or explicitely filedIn
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1347
     classes.
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1348
     The default action here is to do nothing."
328
claus
parents: 325
diff changeset
  1349
claus
parents: 325
diff changeset
  1350
    ^ self
claus
parents: 325
diff changeset
  1351
!
claus
parents: 325
diff changeset
  1352
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1353
reinitialize
442
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1354
    "reinitialize is sent to a class when an image has been restarted.
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1355
     I.e. when the system is restarted.
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1356
     This gives classes a chance to flush any device dependent or otherwise
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1357
     obsolete data which may be a leftover from the previous live.
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1358
     The default action here is to do nothing."
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1359
65a11cda5e9e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 421
diff changeset
  1360
    ^ self
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1361
! !
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1362
492
fa23b14f444b renamed instance creation category
Claus Gittinger <cg@exept.de>
parents: 457
diff changeset
  1363
!Behavior methodsFor:'instance creation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1364
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1365
basicNew
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1366
    "return an instance of myself without indexed variables.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1367
     If the receiver-class has indexed instvars, the new object will have
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1368
     a basicSize of zero - 
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1369
     i.e. 'aClass basicNew' is equivalent to 'aClass basicNew:0'.
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1370
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1371
     ** Do not redefine this method in any class **"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1372
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1373
%{  /* NOCONTEXT */
81
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1374
    REGISTER OBJ newobj;
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1375
    REGISTER char *nextPtr;
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1376
    unsigned int instsize;
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1377
    REGISTER unsigned int nInstVars;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1378
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1379
    /*
369
claus
parents: 362
diff changeset
  1380
     * the following ugly code is nothing more than a __new() followed
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1381
     * by a nilling of the new instance.
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1382
     * Unrolled for a bit more speed since this is one of the central object 
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1383
     * allocation methods in the system
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1384
     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1385
    nInstVars = __intVal(__INST(instSize));
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1386
    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1387
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1388
    newobj = (OBJ) __newNextPtr;
81
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1389
    nextPtr = ((char *)newobj) + instsize;
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1390
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1391
    /*
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1392
     * dont argue about the goto and the arrangement below - it saves 
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1393
     * an extra nil-compare and branch in the common case ...
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1394
     * (i.e. if no GC is needed, we fall through without a branch)
81
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1395
     */
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1396
    if (nextPtr < __newEndPtr) {
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1397
	_objPtr(newobj)->o_size = instsize;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1398
	/* o_allFlags(newobj) = 0;              */
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1399
	/* _objPtr(newobj)->o_space = __newSpace; */
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1400
	o_setAllFlags(newobj, __newSpace);
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1401
#ifdef ALIGN4
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1402
	__newNextPtr = nextPtr;
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1403
#else
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1404
	if (instsize & (ALIGN-1)) {
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1405
	    __newNextPtr = (char *)newobj + (instsize & ~(ALIGN-1)) + ALIGN;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1406
	} else {
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  1407
	    __newNextPtr = nextPtr;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1408
	}
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1409
#endif
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1410
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1411
ok:
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1412
	__InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1413
	__qSTORE(newobj, self);
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1414
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1415
	if (nInstVars) {
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1416
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1417
	    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1418
#else
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1419
	    REGISTER OBJ *op;
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1420
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1421
	    op = __InstPtr(newobj)->i_instvars;
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1422
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1423
# if !defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1424
	    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1425
	     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1426
	     */
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1427
#  if defined(FAST_OBJECT_MEMSET_DOUBLES_UNROLLED)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1428
	    if (nInstVars > 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1429
		*op++ = nil;    /* for alignment */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1430
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1431
		while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1432
		    *(double *)op = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1433
		    ((double *)op)[1] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1434
		    ((double *)op)[2] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1435
		    ((double *)op)[3] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1436
		    op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1437
		    nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1438
		}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1439
	    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1440
	    while (nInstVars != 0) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1441
		*op++ = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1442
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1443
	    }
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1444
#  else
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1445
#   if defined(FAST_OBJECT_MEMSET_LONGLONG_UNROLLED)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1446
	    if (nInstVars > 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1447
		*op++ = nil;    /* for alignment */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1448
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1449
		while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1450
		    *(long long *)op = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1451
		    ((long long *)op)[1] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1452
		    ((long long *)op)[2] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1453
		    ((long long *)op)[3] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1454
		    op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1455
		    nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1456
		}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1457
	    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1458
	    while (nInstVars != 0) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1459
		*op++ = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1460
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1461
	    }
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1462
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1463
#   else
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1464
#    if defined(FAST_OBJECT_MEMSET_WORDS_UNROLLED)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1465
	    while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1466
		*op = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1467
		*(op+1) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1468
		*(op+2) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1469
		*(op+3) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1470
		*(op+4) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1471
		*(op+5) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1472
		*(op+6) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1473
		*(op+7) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1474
		op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1475
		nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1476
	    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1477
	    while (nInstVars != 0) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1478
		*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1479
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1480
	    }
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1481
#    else
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1482
#     if defined(FAST_MEMSET)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1483
	    memset(__InstPtr(newobj)->i_instvars, 0, instsize-OHDR_SIZE);
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1484
#     else
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1485
	    do {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1486
		*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1487
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1488
	    } while (nInstVars != 0);
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1489
#     endif
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1490
#    endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1491
#   endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1492
#  endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1493
# else /* nil could be ~~ 0 */
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1494
	    while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1495
		*op = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1496
		*(op+1) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1497
		*(op+2) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1498
		*(op+3) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1499
		*(op+4) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1500
		*(op+5) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1501
		*(op+6) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1502
		*(op+7) = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1503
		op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1504
		nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1505
	    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1506
	    while (nInstVars != 0) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1507
		*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1508
		nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1509
	    }
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1510
# endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1511
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1512
	}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1513
	RETURN ( newobj );
81
e02c66a7296f *** empty log message ***
claus
parents: 77
diff changeset
  1514
    }
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1515
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1516
    /*
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1517
     * the slow case - a GC will occur
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1518
     */
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1519
    __PROTECT_CONTEXT__
369
claus
parents: 362
diff changeset
  1520
    newobj = __new(instsize);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1521
    __UNPROTECT_CONTEXT__
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1522
    if (newobj != nil) goto ok;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1523
%}
2
claus
parents: 1
diff changeset
  1524
.
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1525
    "
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1526
     memory allocation failed.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1527
     When we arrive here, there was no memory, even after
165
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1528
     a garbage collect. 
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1529
     This means, that the VM wanted to get some more memory from the 
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1530
     Operatingsystem, which was not kind enough to give it.
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1531
     Bad luck - you should increase the swap space on your machine.
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1532
    "
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  1533
    ^ ObjectMemory allocationFailureSignal raise.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1534
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1535
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1536
basicNew:anInteger
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1537
    "return an instance of myself with anInteger indexed variables.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1538
     If the receiver-class has no indexed instvars, this is only allowed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1539
     if the argument, anInteger is zero.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1540
     ** Do not redefine this method in any class **"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1541
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1542
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1543
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1544
    OBJ newobj;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1545
    unsigned INT instsize, nInstVars;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1546
    INT nindexedinstvars;
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1547
    unsigned INT flags;
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1548
#if ! defined(FAST_ARRAY_MEMSET) || defined(NEGATIVE_ADDRESSES)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1549
    REGISTER char *cp;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1550
    short *sp;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1551
    long *lp;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1552
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1553
    REGISTER OBJ *op;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1554
    float *fp;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1555
    double *dp;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1556
249
claus
parents: 216
diff changeset
  1557
    if (__isSmallInteger(anInteger)) {
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1558
	nindexedinstvars = __intVal(anInteger);
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1559
	if (nindexedinstvars >= 0) {
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1560
	    nInstVars = __intVal(__INST(instSize));
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1561
	    flags = __intVal(__INST(flags)) & ARRAYMASK;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1562
	    switch (flags) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1563
		case BYTEARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1564
		    instsize = OHDR_SIZE + nindexedinstvars;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1565
		    if (nInstVars == 0) {
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1566
			if (__CanDoQuickNew(instsize)) {
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1567
			    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1568
			     * the most common case
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1569
			     */
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1570
			    __qCheckedNew(newobj, instsize);
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1571
			    __InstPtr(newobj)->o_class = self;
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1572
#if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
359
claus
parents: 357
diff changeset
  1573
			    nInstVars = nindexedinstvars >> 2;
claus
parents: 357
diff changeset
  1574
			    if (nindexedinstvars & 3) nInstVars++;
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1575
			    memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars);
357
claus
parents: 356
diff changeset
  1576
#else
claus
parents: 356
diff changeset
  1577
# if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1578
			    memset(__InstPtr(newobj)->i_instvars, 0, nindexedinstvars);
357
claus
parents: 356
diff changeset
  1579
# else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1580
			    cp = (char *)__InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1581
			    while (nindexedinstvars >= sizeof(long)) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1582
				*(long *)cp = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1583
				cp += sizeof(long);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1584
				nindexedinstvars -= sizeof(long);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1585
			    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1586
			    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1587
				*cp++ = '\0';
357
claus
parents: 356
diff changeset
  1588
# endif
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1589
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1590
			    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1591
			}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1592
		    } else {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1593
			instsize += __OBJS2BYTES__(nInstVars);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1594
		    }
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1595
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1596
		    __qNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1597
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1598
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1599
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1600
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1601
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1602
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1603
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1604
#if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
357
claus
parents: 356
diff changeset
  1605
		    nInstVars = (instsize-OHDR_SIZE) >> 2;
claus
parents: 356
diff changeset
  1606
		    if (instsize & 3) nInstVars++;
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1607
		    memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars);
357
claus
parents: 356
diff changeset
  1608
#else
claus
parents: 356
diff changeset
  1609
# if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1610
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1611
		     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1612
		     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1613
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize-OHDR_SIZE);
357
claus
parents: 356
diff changeset
  1614
# else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1615
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1616
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1617
			*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1618
		    cp = (char *)op;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1619
		    while (nindexedinstvars >= sizeof(long)) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1620
			*(long *)cp = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1621
			cp += sizeof(long);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1622
			nindexedinstvars -= sizeof(long);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1623
		    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1624
		    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1625
			*cp++ = '\0';
357
claus
parents: 356
diff changeset
  1626
# endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1627
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1628
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1629
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1630
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1631
		case WORDARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1632
		    instsize = OHDR_SIZE + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1633
			       __OBJS2BYTES__(nInstVars) + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1634
			       nindexedinstvars * sizeof(short);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1635
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1636
		    __qNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1637
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1638
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1639
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1640
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1641
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1642
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1643
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1644
#if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1645
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1646
		     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1647
		     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1648
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1649
#else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1650
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1651
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1652
			*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1653
		    sp = (short *)op;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1654
		    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1655
			*sp++ = 0;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1656
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1657
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1658
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1659
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1660
	       case LONGARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1661
		    instsize = OHDR_SIZE + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1662
			       __OBJS2BYTES__(nInstVars) + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1663
			       nindexedinstvars * sizeof(long);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1664
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1665
		    __qAlignedNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1666
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1667
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1668
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1669
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1670
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1671
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1672
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1673
#if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1674
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1675
		     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1676
		     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1677
		    memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars + nindexedinstvars);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1678
#else
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1679
# if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1680
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1681
		     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1682
		     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1683
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1684
# else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1685
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1686
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1687
			*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1688
		    lp = (long *)op;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1689
		    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1690
			*lp++ = 0;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1691
# endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1692
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1693
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1694
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1695
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1696
	       case FLOATARRAY:
325
claus
parents: 323
diff changeset
  1697
		    instsize = sizeof(struct __floatArray) + 
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1698
			       __OBJS2BYTES__(nInstVars) + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1699
			       (nindexedinstvars - 1) * sizeof(float);
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1700
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1701
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1702
		    __qNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1703
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1704
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1705
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1706
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1707
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1708
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1709
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1710
		    op = __InstPtr(newobj)->i_instvars;
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1711
# if defined(mips) /* knowin that float 0.0 is all-zeros */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1712
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1713
# else
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1714
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1715
			*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1716
		    fp = (float *)op;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1717
		    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1718
			*fp++ = 0.0;
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1719
# endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1720
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1721
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1722
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1723
	       case DOUBLEARRAY:
325
claus
parents: 323
diff changeset
  1724
		    instsize = sizeof(struct __doubleArray) + 
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1725
			       __OBJS2BYTES__(nInstVars) + 
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1726
			       (nindexedinstvars - 1) * sizeof(double);
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1727
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1728
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1729
		    __qAlignedNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1730
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1731
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1732
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1733
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1734
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1735
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1736
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1737
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1738
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1739
			*op++ = nil;
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1740
#ifdef NEED_DOUBLE_ALIGN
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1741
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1742
		     * care for double alignment
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1743
		     */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1744
		    if ((INT)op & (ALIGN-1)) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1745
			*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1746
		    }
54
06dbdeeed4f9 *** empty log message ***
claus
parents: 47
diff changeset
  1747
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1748
		    dp = (double *)op;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1749
		    while (nindexedinstvars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1750
			*dp++ = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1751
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1752
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1753
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1754
		case WKPOINTERARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1755
		case POINTERARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1756
		    nInstVars += nindexedinstvars;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1757
		    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1758
		    __PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1759
		    __qAlignedNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1760
		    __UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1761
		    if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1762
			break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1763
		    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1764
		    __InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1765
		    __qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1766
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1767
#if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1768
		    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1769
#else
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1770
# if !defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1771
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1772
		     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1773
		     */
360
claus
parents: 359
diff changeset
  1774
#ifdef XXmips
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1775
# undef FAST_ARRAY_MEMSET_DOUBLES_UNROLLED
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1776
# undef FAST_ARRAY_MEMSET_LONGLONG_UNROLLED
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1777
/* seems to be slightly faster */
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1778
# define FAST_ARRAY_MEMSET
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1779
#endif
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1780
#ifdef sparc
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1781
# define FAST_ARRAY_MEMSET_DOUBLES_UNROLLED
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1782
#endif
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  1783
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1784
#  if defined(FAST_ARRAY_MEMSET_DOUBLES_UNROLLED)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1785
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1786
		    if (nInstVars > 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1787
			*op++ = nil;    /* for alignment */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1788
			nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1789
			while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1790
			    *(double *)op = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1791
			    ((double *)op)[1] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1792
			    ((double *)op)[2] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1793
			    ((double *)op)[3] = 0.0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1794
			    op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1795
			    nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1796
			}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1797
		    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1798
		    while (nInstVars) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1799
			*op++ = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1800
			nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1801
		    }
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1802
#  else
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1803
#   if defined(FAST_ARRAY_MEMSET_LONGLONG_UNROLLED)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1804
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1805
		    if (nInstVars > 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1806
			*op++ = nil;    /* for alignment */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1807
			nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1808
			while (nInstVars >= 8) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1809
			    *(long long *)op = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1810
			    ((long long *)op)[1] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1811
			    ((long long *)op)[2] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1812
			    ((long long *)op)[3] = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1813
			    op += 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1814
			    nInstVars -= 8;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1815
			}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1816
		    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1817
		    while (nInstVars) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1818
			*op++ = 0;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1819
			nInstVars--;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1820
		    }
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1821
#   else
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1822
#    if defined(FAST_ARRAY_MEMSET)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1823
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1824
#    else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1825
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1826
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1827
			*op++ = nil;
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1828
#    endif
82
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1829
#   endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1830
#  endif
0147b4f725ae *** empty log message ***
claus
parents: 81
diff changeset
  1831
# else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1832
		    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1833
		    while (nInstVars--)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1834
			*op++ = nil;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1835
# endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1836
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1837
		    RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1838
		    break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1839
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1840
		default:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1841
		    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1842
		     * new:n for non-variable classes only allowed if
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1843
		     * n == 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1844
		     */
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1845
		    if (nindexedinstvars == 0) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1846
			instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1847
			__PROTECT_CONTEXT__
835
8bd6f4aa8130 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 834
diff changeset
  1848
			__qAlignedNew(newobj, instsize, SENDER);
834
c68ed1088b42 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  1849
			__UNPROTECT_CONTEXT__
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1850
			if (newobj == nil) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1851
			    break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1852
			}
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1853
			__InstPtr(newobj)->o_class = self;
369
claus
parents: 362
diff changeset
  1854
			__qSTORE(newobj, self);
claus
parents: 362
diff changeset
  1855
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1856
			if (nInstVars) {
788
e80f1c42b87b dont use memset4 if its undefined
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1857
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4)
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1858
			    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1859
#else
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1860
# if defined(FAST_MEMSET) && ! defined(NEGATIVE_ADDRESSES)
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1861
			    /*
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1862
			     * knowing that nil is 0
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1863
			     */
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1864
			    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1865
# else
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  1866
			    op = __InstPtr(newobj)->i_instvars;
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1867
			    do {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1868
				*op++ = nil;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1869
			    } while (--nInstVars);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1870
# endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1871
#endif
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1872
			}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1873
			RETURN ( newobj );
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1874
		    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1875
		    break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1876
	    }
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1877
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1878
    }
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1879
%}.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1880
    "
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1881
     arrive here if something went wrong ...
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1882
     figure out what it was
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1883
    "
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1884
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1885
    (anInteger isMemberOf:SmallInteger) ifFalse:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1886
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1887
	 the argument is either not an integer,
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1888
	 or a LargeInteger (which means that its definitely too big)
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1889
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1890
	self error:'argument to new: must be Integer'.
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1891
	^ nil
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1892
    ].
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1893
    (anInteger < 0) ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1894
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1895
	 the argument is negative,
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1896
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1897
	self error:'bad (negative) argument to new:'.
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1898
	^ nil
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1899
    ].
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1900
    self isVariable ifFalse:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1901
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1902
	 this class does not have any indexed instance variables
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1903
	"
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1904
	self error:'class has no indexed instvars - cannot create with new:'.
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1905
	^ nil
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1906
    ].
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1907
    "
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1908
     memory allocation failed.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1909
     When we arrive here, there was no memory, even after
165
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1910
     a garbage collect. 
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1911
     This means, that the VM wanted to get some more memory from the 
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1912
     Operatingsystem, which was not kind enough to give it.
63341654cfb8 *** empty log message ***
claus
parents: 154
diff changeset
  1913
     Bad luck - you should increase the swap space on your machine.
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1914
    "
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  1915
    ^ ObjectMemory allocationFailureSignal raise.
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1916
!
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1917
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1918
new
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1919
    "return an instance of myself without indexed variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1920
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1921
    ^ self basicNew
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1922
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1923
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1924
new:anInteger
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1925
    "return an instance of myself with anInteger indexed variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1926
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1927
    ^ self basicNew:anInteger
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1928
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1929
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1930
niceBasicNew:anInteger
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1931
    "same as basicNew:anInteger, but tries to avoid long pauses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1932
     due to garbage collection. This method checks to see if
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1933
     allocation is possible without a pause, and does a background
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1934
     incremental garbage collect first if there is not enough memory
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1935
     available at the moment for fast allocation. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1936
     This is useful in low-priority background processes which like to 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1937
     avoid disturbing any higher priority foreground process while allocating
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1938
     big amounts of memory. Of course, using this method only makes
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1939
     sense for big or huge objects (say > 200k).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1940
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1941
     EXPERIMENTAL: this is a non-standard interface and should only 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1942
     be used for special applications. There is no guarantee, that this
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1943
     method will be available in future ST/X releases."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1944
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1945
    |size|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1946
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1947
    size := self sizeOfInst:anInteger.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1948
    (ObjectMemory checkForFastNew:size) ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1949
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1950
	 incrementally collect garbage
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1951
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1952
	ObjectMemory incrementalGC.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1953
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1954
    ^ self basicNew:anInteger
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1955
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  1956
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1957
readFrom:aStream
43
00ca34676cbf *** empty log message ***
claus
parents: 25
diff changeset
  1958
    "read an objects printed representation from the argument, aStream 
00ca34676cbf *** empty log message ***
claus
parents: 25
diff changeset
  1959
     and return it. 
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  1960
     The read object must be a kind of myself if its not, an error is raised.
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1961
     This is the reverse operation to 'storeOn:'.
43
00ca34676cbf *** empty log message ***
claus
parents: 25
diff changeset
  1962
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  1963
     WARNING: storeOn: does not handle circular references and multiple 
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1964
	      references to the same object.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1965
	      Use #storeBinary:/readBinaryFrom: for this."
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1966
345
claus
parents: 343
diff changeset
  1967
    ^ self readFrom:aStream onError:[self error:'expected: ' , self name]
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1968
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1969
    "
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  1970
     |s|
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1971
     s := WriteStream on:String new.
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1972
     #(1 2 3 4) storeOn:s.
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1973
     Object readFrom:(ReadStream on:s contents)  
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1974
    "
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1975
!
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  1976
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1977
readFrom:aStream onError:exceptionBlock
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1978
    "read an objects printed representation from the argument, aStream 
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1979
     and return it (i.e. the stream should contain some representation of
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1980
     the object which was created using #storeOn:). 
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1981
     The read object must be a kind of myself if its not, the value of
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1982
     exceptionBlock is returned.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1983
     To get any object, use 'Object readFrom:...',
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1984
     To get any number, use 'Number readFrom:...' and so on.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1985
     This is the reverse operation to 'storeOn:'.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1986
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1987
     WARNING: storeOn: does not handle circular references and multiple 
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1988
	      references to the same object.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1989
	      Use #storeBinary:/readBinaryFrom: for this."
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1990
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1991
    |newObject|
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1992
340
claus
parents: 331
diff changeset
  1993
    ErrorSignal handle:[:ex |
claus
parents: 331
diff changeset
  1994
	ex return
claus
parents: 331
diff changeset
  1995
    ] do:[
345
claus
parents: 343
diff changeset
  1996
	newObject := self evaluatorClass evaluate:aStream.
340
claus
parents: 331
diff changeset
  1997
    ].
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1998
    (newObject isKindOf:self) ifFalse:[^ exceptionBlock value].
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  1999
    ^ newObject
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2000
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2001
    "
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2002
     |s|
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2003
     s := WriteStream on:String new.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2004
     #(1 2 3 4) storeOn:s.
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2005
     Transcript showCr:(
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2006
	Array readFrom:(ReadStream on:s contents) onError:'not an Array'
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2007
     )
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2008
    "
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2009
    "
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2010
     |s|
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2011
     s := WriteStream on:String new.
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2012
     #[1 2 3 4] storeOn:s.
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2013
     Transcript showCr:(
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2014
	 Array readFrom:(ReadStream on:s contents) onError:'not an Array'
345
claus
parents: 343
diff changeset
  2015
     )
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2016
    "
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2017
!
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2018
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  2019
readFromString:aString
275
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2020
    "create an object from its printed representation.
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2021
     For most classes, the string is expected to be in a format created by
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2022
     storeOn: or storeString; however, some (Time, Date) expect a user
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2023
     readable string here.
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2024
     See comments in Behavior>>readFromString:onError:,
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2025
     Behavior>>readFrom: and Behavior>>readFrom:onError:"
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  2026
345
claus
parents: 343
diff changeset
  2027
    ^ self readFromString:aString onError:[self error:'expected: ' , self name]
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2028
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2029
    "
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2030
     Integer readFromString:'12345678901234567890' 
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2031
     Point readFromString:'1@2'  
345
claus
parents: 343
diff changeset
  2032
     Point readFromString:'1'  
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2033
    "
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2034
!
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2035
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2036
readFromString:aString onError:exceptionBlock
275
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2037
    "create an object from its printed representation.
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2038
     Here, the string is expected to be in a format created by
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2039
     storeOn: or storeString; however, some classes (Time, Date) may redefine
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2040
     it to expect a user readable string here.
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2041
     See comments in Behavior>>readFrom: and Behavior>>readFrom:onError:"
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2042
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2043
    ^ self readFrom:(ReadStream on:aString) onError:exceptionBlock
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2044
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2045
    "
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2046
     Integer readFromString:'12345678901234567890' 
275
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2047
     Integer readFromString:'abc' 
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2048
     Integer readFromString:'abc' onError:0
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2049
     Point readFromString:'1@2'  
345
claus
parents: 343
diff changeset
  2050
     Point readFromString:'0'   
275
a76029ddaa98 *** empty log message ***
claus
parents: 249
diff changeset
  2051
     Point readFromString:'0' onError:[0@0]  
198
d0d0e3910c98 added readFrom:onError: / binaryReadFrom:onError:
claus
parents: 165
diff changeset
  2052
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2053
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2054
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2055
uninitializedNew
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2056
    "create an instance of myself with uninitialized contents.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2057
     For all classes except ByteArray, this is the same as #basicNew."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2058
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2059
    ^ self basicNew
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2060
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2061
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2062
uninitializedNew:anInteger
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2063
    "create an instance of myself with uninitialized contents.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2064
     For all classes except ByteArray, this is the same as #basicNew:."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2065
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2066
    ^ self basicNew:anInteger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2067
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2068
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2069
!Behavior methodsFor:'private accessing'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2070
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2071
flags:aNumber
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2072
    "set the flags.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2073
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2074
     and no change record written here; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2075
     Do NOT use it."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2076
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2077
    flags := aNumber
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2078
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2079
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2080
instSize:aNumber
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2081
    "set the instance size.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2082
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2083
     and no change record written here; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2084
     Do NOT use it."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2085
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2086
    instSize := aNumber
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2087
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2088
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2089
primAddSelector:newSelector withMethod:newMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2090
    "add the method given by 2nd argument under the selector given by
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2091
     the 1st argument to the methodDictionary. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2092
     Does NOT flush any caches, does NOT write a change record.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2093
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2094
     Do not use this in normal situations, strange behavior will be
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2095
     the consequence.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2096
     I.e. executing obsolete methods, since the old method will still 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2097
     be executed out of the caches."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2098
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2099
    |index oldSelectorArray oldMethodArray newSelectorArray newMethodArray|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2100
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2101
    (newSelector isMemberOf:Symbol) ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2102
	self error:'invalid selector'. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2103
	^ false
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2104
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2105
    newMethod isNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2106
	self error:'invalid method'. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2107
	^ false
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2108
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2109
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2110
    index := selectorArray identityIndexOf:newSelector startingAt:1.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2111
    (index == 0) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2112
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2113
	 a new selector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2114
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2115
	newSelectorArray := selectorArray copyWith:newSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2116
	newMethodArray := methodArray copyWith:newMethod.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2117
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2118
	 keep a reference so they wont go away ...
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2119
	 mhmh: this is no longer needed - try without
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2120
	"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2121
	oldSelectorArray := selectorArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2122
	oldMethodArray := methodArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2123
	selectorArray := newSelectorArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2124
	methodArray := newMethodArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2125
    ] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2126
	methodArray at:index put:newMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2127
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2128
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2129
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2130
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2131
setMethodArray:anArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2132
    "set the method array of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2133
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2134
     and no change record written here.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2135
     NOT for general use."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2136
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2137
    methodArray := anArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2138
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2139
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2140
setMethodDictionary:aDictionary
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2141
    "set the receivers method dictionary. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2142
     Since no dictionary is actually used, decompose into selector- and
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2143
     method arrays and set those. For ST-80 compatibility.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2144
     NOT for general use."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2145
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2146
    |n newSelectorArray newMethodArray idx|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2147
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2148
    n := aDictionary size.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2149
    newSelectorArray := Array basicNew:n.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2150
    newMethodArray := Array basicNew:n.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2151
    idx := 1.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2152
    aDictionary keysAndValuesDo:[:sel :method |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2153
	newSelectorArray at:idx put:sel.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2154
	newMethodArray at:idx put:method.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2155
	idx := idx + 1
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2156
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2157
    selectorArray := newSelectorArray.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2158
    methodArray := newMethodArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2159
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2160
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2161
setOtherSuperclasses:anArrayOfClasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2162
    "EXPERIMENTAL: set the other superclasses of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2163
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2164
     and no change record written here; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2165
     Do NOT use it."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2166
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2167
    SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2168
    otherSuperclasses := anArrayOfClasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2169
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2170
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2171
setSelectorArray:anArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2172
    "set the selector array of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2173
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2174
     and no change record written here.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2175
     NOT for general use."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2176
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2177
    selectorArray := anArray
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2178
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2179
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2180
setSelectors:sels methods:m
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2181
    "set some inst vars. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2182
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2183
     and no change record written here; 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2184
     Do NOT use it."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2185
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2186
    selectorArray := sels.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2187
    methodArray := m.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2188
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2189
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2190
setSuperclass:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2191
    "set the superclass of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2192
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2193
     and no change record written here. Also, if the receiver class has
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2194
     already been in use, future operation of the system is not guaranteed to
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2195
     be correct, since no caches are flushed.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2196
     Therefore: do NOT use it; use Behavior>>superclass: (or flush the caches, at least)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2197
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2198
    SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2199
    superclass := aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2200
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2201
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2202
setSuperclass:sup selectors:sels methods:m instSize:i flags:f
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2203
    "set some inst vars. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2204
     this method is for special uses only - there will be no recompilation
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2205
     and no change record is written here. Also, if the receiver class has 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2206
     already been in use, future operation of the system is not guaranteed to
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2207
     be correct, since no caches are flushed.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2208
     Therefore: do NOT use it; use Behavior>>superclass: (or flush the caches, at least)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2209
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2210
    SubclassInfo := nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2211
    superclass := sup.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2212
    selectorArray := sels.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2213
    methodArray := m.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2214
    instSize := i.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2215
    flags := f
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2216
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2217
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2218
!Behavior methodsFor:'private helpers'!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2219
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2220
addAllClassVarNamesTo:aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2221
    "helper - add the name-strings of the class variables and of the class-vars
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2222
     of all superclasses to the argument, aCollection. Return aCollection"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2223
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2224
    |classvars|
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2225
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2226
    (superclass notNil) ifTrue:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2227
        superclass addAllClassVarNamesTo:aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2228
    ].
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2229
    (classvars := self classVariableString) notNil ifTrue:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2230
        aCollection addAll:(classvars asCollectionOfWords).
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2231
    ].
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2232
    ^ aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2233
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2234
    "Created: 16.4.1996 / 18:00:38 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2235
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2236
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2237
addAllInstVarNamesTo:aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2238
    "helper for allInstVarNames - add the name-strings of the instance variables
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2239
     and of the inst-vars of all superclasses to the argument, aCollection. 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2240
     Return aCollection."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2241
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2242
    |superInsts instvars|
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2243
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2244
    (superclass notNil) ifTrue:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2245
        superclass addAllInstVarNamesTo:aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2246
    ].
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2247
    (instvars := self instanceVariableString) notNil ifTrue:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2248
        aCollection addAll:(instvars asCollectionOfWords).
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2249
    ] ifFalse:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2250
        "/ mhmh - either someone klduged around, or this is
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2251
        "/ a system running without sourceInfo. Generate
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2252
        "/ synthetic names.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2253
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2254
        superclass isNil ifTrue:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2255
            superInsts := 0
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2256
        ] ifFalse:[
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2257
            superInsts := superclass instSize
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2258
        ].
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2259
        aCollection addAll:((superInsts+1 to:self instSize) 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2260
                                collect:[:index | '* instVar' , index printString , ' *'])
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2261
    ].
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2262
    ^ aCollection
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2263
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2264
    "Modified: 30.10.1995 / 19:46:21 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2265
    "Created: 16.4.1996 / 18:03:14 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2266
! !
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2267
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2268
!Behavior methodsFor:'queries'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2269
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2270
allClassVarNames
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2271
    "return a collection of all the class variable name-strings
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2272
     this includes all superclass-class variables"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2273
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2274
    ^ self addAllClassVarNamesTo:(OrderedCollection new)
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2275
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2276
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2277
     Float allClassVarNames
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2278
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2279
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2280
    "Modified: 16.4.1996 / 18:01:00 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2281
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2282
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2283
allDerivedInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2284
    "return a collection of all instances of myself and 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2285
     instances of all subclasses of myself.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2286
     This method is going to be removed for protocol compatibility with
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2287
     other STs; use allSubInstances"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2288
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2289
    self obsoleteMethodWarning:'please use #allSubInstances'.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2290
    ^ self allSubInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2291
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2292
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2293
allInstVarNames
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2294
    "return a collection of all the instance variable name-strings
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2295
     this includes all superclass-instance variables.
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2296
     Instvars of superclasses come first (i.e. the position matches
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2297
     the instVarAt:-index)."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2298
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2299
    ^ self addAllInstVarNamesTo:(OrderedCollection new)
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2300
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2301
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2302
     Dictionary instVarNames       
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2303
     Dictionary allInstVarNames    
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2304
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2305
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2306
    "Modified: 16.4.1996 / 18:03:55 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2307
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2308
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2309
allInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2310
    "return a collection of all my instances"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2311
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2312
    "Read the documentation on why there seem to be no
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2313
     instances of SmallInteger and UndefinedObject"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2314
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2315
    |coll|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2316
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2317
    coll := OrderedCollection new:100.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2318
    self allInstancesDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2319
	coll add:anObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2320
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2321
    ^ coll 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2322
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2323
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2324
     ScrollBar allInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2325
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2326
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2327
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2328
allSubInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2329
    "return a collection of all instances of myself and 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2330
     instances of all subclasses of myself."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2331
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2332
    |coll|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2333
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2334
    coll := OrderedCollection new:100.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2335
    self allSubInstancesDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2336
	(anObject isKindOf:self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2337
	    coll add:anObject
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2338
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2339
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2340
    ^ coll 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2341
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2342
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2343
     View allSubInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2344
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2345
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2346
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2347
allSubclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2348
    "return a collection of all subclasses (direct AND indirect) of
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2349
     the receiver. There will be no specific order, in which entries
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2350
     are returned."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2351
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2352
    |newColl|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2353
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2354
    newColl := OrderedCollection new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2355
    self allSubclassesDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2356
	newColl add:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2357
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2358
    ^ newColl
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2359
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2360
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2361
     Collection allSubclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2362
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2363
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2364
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2365
allSubclassesInOrder
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2366
    "return a collection of all subclasses (direct AND indirect) of
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2367
     the receiver. Higher level subclasses will come before lower ones."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2368
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2369
    |newColl|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2370
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2371
    newColl := OrderedCollection new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2372
    self allSubclassesInOrderDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2373
	newColl add:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2374
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2375
    ^ newColl
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2376
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2377
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2378
     Collection allSubclassesInOrder
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2379
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2380
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2381
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2382
allSuperclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2383
    "return a collection of the receivers accumulated superclasses"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2384
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2385
    |aCollection theSuperClass|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2386
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2387
    theSuperClass := superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2388
    theSuperClass notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2389
	aCollection := OrderedCollection new.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2390
	[theSuperClass notNil] whileTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2391
	    aCollection add:theSuperClass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2392
	    theSuperClass := theSuperClass superclass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2393
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2394
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2395
    ^ aCollection
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2396
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2397
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2398
     String allSuperclasses 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2399
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2400
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2401
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2402
cachedLookupMethodFor:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2403
    "return the method, which would be executed if aSelector was sent to
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2404
     an instance of the receiver. I.e. the selector arrays of the receiver
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2405
     and all of its superclasses are searched for aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2406
     Return the method, or nil if instances do not understand aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2407
     This interface provides exactly the same information as #lookupMethodFor:,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2408
     but uses the lookup-cache in the VM for faster search. 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2409
     However, keep in mind, that doing a lookup through the cache also adds new
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2410
     entries and can thus slow down the system by polluting the cache with 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2411
     irrelevant entries. (do NOT loop over all objects calling this method).
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2412
     Does NOT (currently) handle MI"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2413
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2414
%{  /* NOCONTEXT */
829
fc386319f41c removed external function defs (soon no longer allowed)
Claus Gittinger <cg@exept.de>
parents: 816
diff changeset
  2415
    RETURN ( __lookup(self, aSelector, SENDER) );
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2416
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2417
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2418
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2419
     String cachedLookupMethodFor:#=
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2420
     String cachedLookupMethodFor:#asOrderedCollection
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2421
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2422
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2423
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2424
canBeSubclassed
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2425
    "return true, if its allowed to create subclasses of the receiver.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2426
     This method is redefined in SmallInteger and UndefinedObject, since
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2427
     instances are detected by their pointer-fields, i.e. they do not have
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2428
     a class entry (you dont have to understand this :-)"
10
claus
parents: 5
diff changeset
  2429
claus
parents: 5
diff changeset
  2430
    ^ true
claus
parents: 5
diff changeset
  2431
!
claus
parents: 5
diff changeset
  2432
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2433
canUnderstand:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2434
    "return true, if the receiver or one of its superclasses implements aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2435
     (i.e. true if my instances understand aSelector)"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2436
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2437
    ^ (self lookupMethodFor:aSelector) notNil
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2438
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2439
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2440
     True canUnderstand:#ifTrue:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2441
     True canUnderstand:#==
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2442
     True canUnderstand:#do:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2443
    "
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2444
!
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2445
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2446
category
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2447
    "return the category of the class. 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2448
     Returning nil here, since Behavior does not define a category
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2449
     (only ClassDescriptions do)."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2450
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2451
    ^ nil
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2452
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2453
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2454
     Point category                
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2455
     Behavior new category           
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2456
    "
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2457
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2458
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2459
classVarNames
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2460
    "return a collection of the class variable name-strings.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2461
     Returning empty here, since Behavior does not define any classVariables.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2462
     (only Classes do). This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2463
     (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2464
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2465
    ^ #()
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2466
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2467
    "Created: 16.4.1996 / 17:57:31 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2468
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2469
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2470
classVariableString
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2471
    "return a string of the class variables names.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2472
     Returning empty here, since Behavior does not define any classVariables.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2473
     (only Classes do). This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2474
     (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2475
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2476
    ^ ''
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2477
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2478
    "Created: 16.4.1996 / 16:28:56 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2479
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2480
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2481
comment
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2482
    "return the comment of the class. 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2483
     Returning nil here, since Behavior does not define a category
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2484
     (only Classes do). This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2485
     (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2486
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2487
    ^ nil
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2488
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2489
    "Modified: 16.4.1996 / 16:25:23 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2490
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2491
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2492
compiledMethodAt:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2493
    "return the method for given selector aSelector or nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2494
     Only methods in the receiver - not in the superclass chain are tested."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2495
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2496
    |index|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2497
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2498
    selectorArray isNil ifTrue:[
1088
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
  2499
        ('BEHAVIOR: OOPS - nil selectorArray in ' , self name) errorPrintNL.
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
  2500
        ^ nil
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2501
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2502
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2503
    index := selectorArray identityIndexOf:aSelector startingAt:1.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2504
    (index == 0) ifTrue:[^ nil].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2505
    ^ methodArray at:index
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2506
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2507
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2508
     Object compiledMethodAt:#==
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2509
     (Object compiledMethodAt:#==) category
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2510
    "
1088
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
  2511
989f0e510a32 nicer message
Claus Gittinger <cg@exept.de>
parents: 983
diff changeset
  2512
    "Modified: 7.3.1996 / 19:14:23 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2513
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2514
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2515
containsMethod:aMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2516
    "Return true, if the argument, aMethod is a method of myself"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2517
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2518
    methodArray isNil ifTrue:[^ false].  "degenerated class"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2519
    ^ (methodArray identityIndexOf:aMethod startingAt:1) ~~ 0
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2520
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2521
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2522
derivedInstanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2523
    "return the number of instances of myself and of subclasses"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2524
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2525
    |count|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2526
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2527
    count := 0.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2528
    ObjectMemory allObjectsDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2529
	(anObject isKindOf:self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2530
	    count := count + 1
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2531
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2532
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2533
    ^ count
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2534
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2535
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2536
     View derivedInstanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2537
     SequenceableCollection derivedInstanceCount
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2538
     Object derivedInstanceCount
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2539
    "
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2540
!
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2541
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2542
hasDerivedInstances
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2543
    "return true, if there are any instances of myself or of any subclass"
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2544
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2545
    "Read the documentation on why there seem to be no
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2546
     instances of SmallInteger and UndefinedObject"
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2547
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2548
    ObjectMemory allObjectsDo:[:anObject |
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2549
	(anObject isKindOf:self) ifTrue:[
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2550
	    ^ true
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2551
	]
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2552
    ].
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2553
    ^ false
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2554
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2555
    "
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2556
     Object hasDerivedInstances         - certainly true
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2557
     SharedQueue hasDerivedInstances
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2558
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2559
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2560
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2561
hasInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2562
    "return true, if there are any instances of myself"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2563
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2564
    "Read the documentation on why there seem to be no
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2565
     instances of SmallInteger and UndefinedObject"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2566
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2567
"/    ObjectMemory allObjectsDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2568
"/        (anObject class == self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2569
"/            ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2570
"/        ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2571
"/    ].
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2572
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2573
    ObjectMemory allInstancesOf:self do:[:anObject |
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2574
	^ true
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2575
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2576
    ^ false
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2577
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2578
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2579
     Object hasInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2580
     SequenceableCollection hasInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2581
     Float hasInstances
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2582
     SmallInteger hasInstances
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2583
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2584
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2585
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2586
hasMethods
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2587
    "return true, if there are any (local) methods in this class"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2588
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2589
    ^ (methodArray size ~~ 0)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2590
293
31df3850e98c *** empty log message ***
claus
parents: 283
diff changeset
  2591
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2592
     True hasMethods
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2593
     True class hasMethods
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2594
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2595
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2596
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2597
hasMultipleSuperclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2598
    "Return true, if this class inherits from other classes 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2599
     (beside its primary superclass). 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2600
     This method is a preparation for a future multiple inheritance extension 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2601
     - currently it is not supported by the VM"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2602
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2603
    ^ otherSuperclasses notNil
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2604
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2605
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2606
implements:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2607
    "return true, if the receiver implements aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2608
     (i.e. implemented in THIS class - NOT in a superclass).
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2609
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2610
     Caveat:
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2611
	This simply checks for the selector being present in the classes
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2612
	selector table - therefore, it does not care for ignoredMethods.
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2613
	(but: you should not use this method for protocol-testing, anyway).
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2614
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2615
     Hint:
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2616
	Dont use this method to check if someone responds to a message -
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2617
	use #canUnderstand: on the class or #respondsTo: on the instance
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2618
	to do this."
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2619
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2620
    ^ self includesSelector:aSelector
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2621
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2622
    "
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2623
     notice: this is class protocol
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2624
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2625
       True implements:#ifTrue:  
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2626
       True implements:#==        
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2627
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2628
     notice: this is instance protocol
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2629
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2630
       true respondsTo:#ifTrue:   
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2631
       true respondsTo:#==        
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2632
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2633
     notice: this is class protocol
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2634
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2635
       True canUnderstand:#ifTrue: 
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2636
       True canUnderstand:#==        
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2637
    "
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2638
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2639
    "Modified: 10.2.1996 / 13:15:56 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2640
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2641
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2642
includesSelector:aSelector
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2643
    "return true, if the methodArray of THIS class includes
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2644
     a method for aSelector.
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2645
     (i.e. if aSelector is implemented in THIS class - NOT in a superclass).
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2646
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2647
     Hint:
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2648
	Dont use this method to check if someone responds to a message -
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2649
	use #canUnderstand: on the class or #respondsTo: on the instance
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2650
	to do this."
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2651
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2652
    ^ (selectorArray identityIndexOf:aSelector startingAt:1) ~~ 0
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2653
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2654
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2655
inheritsFrom:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2656
    "return true, if the receiver inherits methods from aClass"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2657
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2658
    ^ self isSubclassOf:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2659
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2660
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2661
     True inheritsFrom:Object
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2662
     LinkedList inheritsFrom:Array
356
claus
parents: 345
diff changeset
  2663
    "
357
claus
parents: 356
diff changeset
  2664
!
claus
parents: 356
diff changeset
  2665
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2666
instanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2667
    "return the number of instances of myself."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2668
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2669
    "Read the documentation on why there seem to be no
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2670
     instances of SmallInteger and UndefinedObject"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2671
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2672
    |count|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2673
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2674
    count := 0.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2675
"/    ObjectMemory allObjectsDo:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2676
"/        (anObject class == self) ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2677
"/            count := count + 1
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2678
"/        ]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2679
"/    ].
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  2680
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2681
    ObjectMemory allInstancesOf:self do:[:anObject |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2682
	count := count + 1
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2683
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2684
    ^ count
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2685
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2686
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2687
     View instanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2688
     Object instanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2689
     Float instanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2690
     SequenceableCollection instanceCount
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2691
     SmallInteger instanceCount   .... mhmh - hear, hear
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2692
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2693
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2694
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2695
isBehavior
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2696
    "return true, if the receiver is describing another objects behavior,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2697
     i.e. is a class. Defined to avoid the need to use isKindOf:"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2698
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2699
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2700
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2701
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2702
     True isBehavior   
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2703
     true isBehavior
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2704
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2705
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2706
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2707
isBits
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2708
    "return true, if instances have indexed byte or short instance variables.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2709
     Ignore long, float and double arrays, since ST-80 code using isBits are probably
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2710
     not prepared to handle them correctly."
92
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  2711
0c73b48551ac *** empty log message ***
claus
parents: 91
diff changeset
  2712
%{  /* NOCONTEXT */
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2713
642
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2714
    REGISTER int what;
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2715
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2716
    what = (INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK);
642
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2717
    RETURN (( (what == __MASKSMALLINT(BYTEARRAY))
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2718
	     || (what == __MASKSMALLINT(WORDARRAY))) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2719
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2720
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2721
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2722
isBytes
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2723
    "return true, if instances have indexed byte instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2724
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2725
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2726
	^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagBytes
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2727
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2728
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2729
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2730
    RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(BYTEARRAY)) ? true : false ); 
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  2731
%}
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2732
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2733
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2734
isDoubles
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2735
    "return true, if instances have indexed double instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2736
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2737
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2738
	^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagDoubles
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2739
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2740
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2741
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2742
    RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(DOUBLEARRAY)) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2743
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2744
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2745
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2746
isFixed
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2747
    "return true, if instances do not have indexed instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2748
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2749
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2750
	^ self isVariable not
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2751
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2752
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2753
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2754
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2755
    RETURN ( ((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) ? false : true ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2756
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2757
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2758
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2759
isFloats
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2760
    "return true, if instances have indexed float instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2761
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2762
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2763
	^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagFloats
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2764
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2765
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2766
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2767
    RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(FLOATARRAY)) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2768
%}
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2769
!
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  2770
642
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2771
isFloatsOrDoubles
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2772
    "return true, if instances have indexed float or double instance variables"
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2773
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2774
%{  /* NOCONTEXT */
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2775
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2776
    int what;
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2777
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2778
    what = (INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK);
642
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2779
    RETURN (( (what == __MASKSMALLINT(FLOATARRAY))
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2780
	     || (what == __MASKSMALLINT(DOUBLEARRAY))) ? true : false ); 
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2781
%}
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2782
    "
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2783
     (Object new) class isFloatsOrDoubles 
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2784
     (Point new) class isFloatsOrDoubles   
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2785
     (Array new) class isFloatsOrDoubles   
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2786
     (ByteArray new) class isFloatsOrDoubles  
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2787
     (FloatArray new) class isFloatsOrDoubles  
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2788
     (DoubleArray new) class isFloatsOrDoubles  
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2789
    "
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2790
!
dbf407bedf64 slighly faster isXXX methods; added isFloatsOrDoubles
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
  2791
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2792
isLongs
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2793
    "return true, if instances have indexed long instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2794
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2795
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2796
	^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagLongs
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2797
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2798
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2799
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2800
    RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(LONGARRAY)) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2801
%}
356
claus
parents: 345
diff changeset
  2802
!
claus
parents: 345
diff changeset
  2803
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2804
isPointers
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2805
    "return true, if instances have pointer instance variables 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2806
     i.e. are either non-indexed or have indexed pointer variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2807
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2808
    "QUESTION: should we ignore WeakPointers ?"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2809
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2810
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2811
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2812
    REGISTER int flags;
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2813
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2814
    flags = __intVal(__INST(flags)) & ARRAYMASK;
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2815
    switch (flags) {
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2816
	default:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2817
	    /* normal objects */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2818
	    RETURN ( true );
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2819
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2820
	case BYTEARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2821
	case WORDARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2822
	case LONGARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2823
	case FLOATARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2824
	case DOUBLEARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2825
	    RETURN (false );
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2826
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2827
	case WKPOINTERARRAY:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2828
	    /* what about those ? */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2829
	    RETURN (true );
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2830
    }
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2831
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2832
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2833
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2834
isSubclassOf:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2835
    "return true, if I am a subclass of the argument, aClass"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2836
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2837
    |theClass|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2838
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2839
    theClass := superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2840
    [theClass notNil] whileTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2841
	(theClass == aClass) ifTrue:[^ true].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2842
%{
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2843
	if (__isBehaviorLike(theClass)) {
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2844
	    theClass = __ClassInstPtr(theClass)->c_superclass;
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2845
	} else {
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2846
	    theClass = nil;
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2847
	}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2848
%}.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2849
"/        theClass := theClass superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2850
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2851
    ^ false
356
claus
parents: 345
diff changeset
  2852
claus
parents: 345
diff changeset
  2853
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2854
     String isSubclassOf:Collection  
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2855
     LinkedList isSubclassOf:Array   
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2856
     1 isSubclassOf:Number              <- will fail since 1 is no class
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2857
    "     
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2858
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2859
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2860
isVariable
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2861
    "return true, if instances have indexed instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2862
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2863
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2864
	^ (flags bitAnd:(Behavior maskIndexType)) ~~ 0
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2865
     "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2866
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2867
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2868
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2869
    RETURN ( ((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2870
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2871
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2872
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2873
isWords
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2874
    "return true, if instances have indexed short instance variables"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2875
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2876
    "this could also be defined as:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2877
	^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagWords
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2878
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2879
%{  /* NOCONTEXT */
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2880
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2881
    RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(WORDARRAY)) ? true : false ); 
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2882
%}
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2883
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2884
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2885
lookupMethodFor:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2886
    "return the method, which would be executed if aSelector was sent to
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2887
     an instance of the receiver. I.e. the selector arrays of the receiver
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2888
     and all of its superclasses are searched for aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2889
     Return the method, or nil if instances do not understand aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2890
     EXPERIMENTAL: take care of multiple superclasses."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2891
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2892
    |m cls|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2893
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2894
    cls := self.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2895
    [cls notNil] whileTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2896
	m := cls compiledMethodAt:aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2897
	m notNil ifTrue:[^ m].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2898
	cls hasMultipleSuperclasses ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2899
	    cls superclasses do:[:aSuperClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2900
		m := aSuperClass lookupMethodFor:aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2901
		m notNil ifTrue:[^ m].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2902
	    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2903
	    ^ nil
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2904
	] ifFalse:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2905
	    cls := cls superclass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2906
	]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2907
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2908
    ^ nil
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2909
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2910
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2911
name
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2912
    "although behaviors have no name, we return something
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2913
     useful here - there are many places (inspectors) where
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2914
     a classes name is asked for.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2915
     Implementing this message here allows anonymous classes
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2916
     and instances of them to be inspected."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2917
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2918
    ^ 'someBehavior'
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2919
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  2920
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2921
selectorAtMethod:aMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2922
    "Return the selector for given method aMethod."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2923
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2924
    ^ self selectorAtMethod:aMethod ifAbsent:[nil]
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2925
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2926
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2927
     |m|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2928
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2929
     m := Object compiledMethodAt:#copy.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2930
     Fraction selectorAtMethod:m.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2931
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2932
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2933
     |m|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2934
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2935
     m := Object compiledMethodAt:#copy.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2936
     Object selectorAtMethod:m.
356
claus
parents: 345
diff changeset
  2937
    "
claus
parents: 345
diff changeset
  2938
!
claus
parents: 345
diff changeset
  2939
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2940
selectorAtMethod:aMethod ifAbsent:failBlock
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2941
    "return the selector for given method aMethod
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2942
     or the value of failBlock, if not found."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2943
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2944
    |index|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2945
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2946
    index := methodArray identityIndexOf:aMethod startingAt:1.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2947
    (index == 0) ifTrue:[^ failBlock value].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2948
    ^ selectorArray at:index
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2949
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2950
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2951
     |m|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2952
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2953
     m := Object compiledMethodAt:#copy.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2954
     Object selectorAtMethod:m ifAbsent:['oops'].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2955
    "
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2956
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2957
     |m|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2958
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2959
     m := Object compiledMethodAt:#copy.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2960
     Fraction selectorAtMethod:m ifAbsent:['oops'].
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2961
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2962
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2963
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2964
selectorIndex:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2965
    "return the index in the arrays for given selector aSelector"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2966
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  2967
    ^ selectorArray identityIndexOf:aSelector startingAt:1
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2968
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2969
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2970
sizeOfInst:n
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2971
    "return the number of bytes required for an instance of
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2972
     myself with n indexed instance variables. The argument n 
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2973
     should be zero for classes without indexed instance variables.
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2974
     See Behavior>>niceNew: for an application of this."
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2975
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2976
    |nInstvars|
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2977
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2978
    nInstvars := self instSize.
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2979
%{
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2980
    int nBytes;
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2981
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2982
    nBytes = __intVal(nInstvars) * sizeof(OBJ) + OHDR_SIZE; 
249
claus
parents: 216
diff changeset
  2983
    if (__isSmallInteger(n)) {
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2984
	int nIndex;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2985
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2986
	nIndex = __intVal(n);
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  2987
	switch (__intVal(__INST(flags)) & ARRAYMASK) {
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2988
	    case BYTEARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2989
		nBytes += nIndex;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2990
		if (nBytes & (ALIGN - 1)) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2991
		    nBytes = (nBytes & ~(ALIGN - 1)) + ALIGN;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2992
		}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2993
		break;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  2994
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2995
	    case WORDARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2996
		nBytes += nIndex * sizeof(short);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2997
		if (nBytes & (ALIGN - 1)) {
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2998
		    nBytes = (nBytes & ~(ALIGN - 1)) + ALIGN;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  2999
		}
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3000
		break;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3001
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3002
	    case LONGARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3003
		nBytes += nIndex * sizeof(long);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3004
		break;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3005
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3006
	    case FLOATARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3007
		nBytes += nIndex * sizeof(float);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3008
		break;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3009
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3010
	    case DOUBLEARRAY:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3011
		nBytes += nIndex * sizeof(double);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3012
		break;
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3013
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3014
	    default:
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3015
		nBytes += nIndex * sizeof(OBJ);
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3016
		break;
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3017
	}
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3018
    }
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1088
diff changeset
  3019
    RETURN (__MKSMALLINT(nBytes));
127
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3020
%}
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3021
!
6625c77d890f added sizeOfInst:
claus
parents: 92
diff changeset
  3022
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3023
sourceCodeAt:aSelector
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3024
    "return the methods source for given selector aSelector or nil.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3025
     Only methods in the receiver - not in the superclass chain are tested."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3026
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3027
    |method|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3028
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3029
    method := self compiledMethodAt:aSelector.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3030
    method isNil ifTrue:[^ nil].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3031
    ^ method source
45
0c270a39d4a2 *** empty log message ***
claus
parents: 43
diff changeset
  3032
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3033
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3034
     True sourceCodeAt:#ifTrue:
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3035
     Object sourceCodeAt:#==
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3036
     Behavior sourceCodeAt:#sourceCodeAt:
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3037
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3038
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3039
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3040
sourceCodeManager
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3041
    "return the sourceCodeManager of the class. 
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3042
     Returning nil here, since Behavior does not define any sourceCode management.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3043
     (only Classes do). This allows different Behavior-like objects
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3044
     (alien classes) to be handled by the browser as well."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3045
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3046
    ^ nil
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3047
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3048
    "Created: 16.4.1996 / 16:26:03 / cg"
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3049
!
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3050
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3051
subclasses
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3052
    "return a collection of the direct subclasses of the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3053
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3054
    |newColl|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3055
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3056
    SubclassInfo notNil ifTrue:[
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3057
	newColl := SubclassInfo at:self ifAbsent:nil.
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3058
	newColl notNil ifTrue:[^ newColl asOrderedCollection]
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3059
    ].
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3060
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3061
    newColl := OrderedCollection new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3062
    self subclassesDo:[:aClass |
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3063
	newColl add:aClass
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3064
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3065
    ^ newColl
45
0c270a39d4a2 *** empty log message ***
claus
parents: 43
diff changeset
  3066
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3067
    "
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3068
     Collection subclasses
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3069
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3070
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3071
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3072
superclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3073
    "return a collection of the receivers immediate superclasses.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3074
     This method is a preparation for a future multiple inheritance extension 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3075
     - currently it is not supported by the VM"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3076
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3077
    |a|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3078
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3079
    a := Array with:superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3080
    otherSuperclasses notNil ifTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3081
	^ a , otherSuperclasses
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3082
    ].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3083
    ^ a
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3084
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3085
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3086
     String superclasses  
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3087
    "
2
claus
parents: 1
diff changeset
  3088
!
claus
parents: 1
diff changeset
  3089
1191
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3090
wasAutoloaded
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3091
    "return true, if this class came into the system via an
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3092
     autoload; false otherwise.
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3093
     Returning false here. This allows different Behavior-like objects
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3094
     (alien classes) to be handled by the browser as well."
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3095
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3096
    ^ false
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3097
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3098
    "Created: 16.4.1996 / 16:27:16 / cg"
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3099
!
7d458640ca32 moved & added some query methods (from class) to upper abstract classes
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  3100
2
claus
parents: 1
diff changeset
  3101
whichClassImplements:aSelector
328
claus
parents: 325
diff changeset
  3102
    "obsolete interface;
claus
parents: 325
diff changeset
  3103
     use whichClassIncludesSelector: for ST-80 compatibility."
claus
parents: 325
diff changeset
  3104
claus
parents: 325
diff changeset
  3105
    ^ self whichClassIncludesSelector:aSelector
claus
parents: 325
diff changeset
  3106
!
claus
parents: 325
diff changeset
  3107
claus
parents: 325
diff changeset
  3108
whichClassIncludesSelector:aSelector
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3109
    "return the class in the inheritance chain, which implements the method
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3110
     for aSelector; return nil if none.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3111
     EXPERIMENTAL: handle multiple superclasses"
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3112
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3113
    |cls|
2
claus
parents: 1
diff changeset
  3114
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3115
    cls := self.
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
  3116
    [cls notNil] whileTrue:[
983
86239edb7b7d change in VM data structures
Claus Gittinger <cg@exept.de>
parents: 835
diff changeset
  3117
	(cls includesSelector:aSelector) ifTrue:[^ cls].
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3118
	cls hasMultipleSuperclasses ifTrue:[
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3119
	    cls superclasses do:[:aSuperClass |
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3120
		|implementingClass|
2
claus
parents: 1
diff changeset
  3121
328
claus
parents: 325
diff changeset
  3122
		implementingClass := aSuperClass whichClassIncludesSelector:aSelector.
154
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3123
		implementingClass notNil ifTrue:[^ implementingClass].
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3124
	    ].
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3125
	    ^ nil
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3126
	] ifFalse:[
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3127
	    cls := cls superclass
d4236ec280a6 *** empty log message ***
claus
parents: 151
diff changeset
  3128
	]
2
claus
parents: 1
diff changeset
  3129
    ].
claus
parents: 1
diff changeset
  3130
    ^ nil
claus
parents: 1
diff changeset
  3131
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3132
    "
328
claus
parents: 325
diff changeset
  3133
     String whichClassIncludesSelector:#==
claus
parents: 325
diff changeset
  3134
     String whichClassIncludesSelector:#collect:
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3135
    "
2
claus
parents: 1
diff changeset
  3136
!
claus
parents: 1
diff changeset
  3137
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3138
withAllSubclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3139
    "return a collection containing the receiver and 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3140
     all subclasses (direct AND indirect) of the receiver"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3141
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3142
    |newColl|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3143
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3144
    newColl := OrderedCollection with:self.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3145
    self allSubclassesDo:[:aClass |
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3146
	newColl add:aClass
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3147
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3148
    ^ newColl
328
claus
parents: 325
diff changeset
  3149
claus
parents: 325
diff changeset
  3150
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3151
     Collection withAllSubclasses
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3152
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3153
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3154
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3155
withAllSuperclasses
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3156
    "return a collection containing the receiver and all
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3157
     of the receivers accumulated superclasses"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3158
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3159
    |aCollection theSuperClass|
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3160
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3161
    aCollection := OrderedCollection with:self.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3162
    theSuperClass := superclass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3163
    [theSuperClass notNil] whileTrue:[
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3164
	aCollection add:theSuperClass.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3165
	theSuperClass := theSuperClass superclass
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3166
    ].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3167
    ^ aCollection
11
6bf3080856be *** empty log message ***
claus
parents: 10
diff changeset
  3168
91
b3971c7dc731 *** empty log message ***
claus
parents: 88
diff changeset
  3169
    "
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3170
     String withAllSuperclasses 
308
f04744ef7b5d *** empty log message ***
claus
parents: 295
diff changeset
  3171
    "
2
claus
parents: 1
diff changeset
  3172
! !
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3173
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3174
!Behavior methodsFor:'snapshots'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3175
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3176
postSnapshot
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3177
    "sent by ObjectMemory to all classes, after a snapshot has been written.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3178
     Nothing done here. This can be redefined in classes which like to know
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3179
     about snapshooting."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3180
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3181
    "Modified: 16.4.1996 / 18:12:08 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3182
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3183
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3184
preSnapshot
1192
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3185
    "sent by ObjectMemory to all classes, before a snapshot is written.
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3186
     Nothing done here. This can be redefined in classes which like to know
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3187
     about snapshooting."
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3188
b1c2b886f23c moved some protocol from Class to upper levels; renamed categories
Claus Gittinger <cg@exept.de>
parents: 1191
diff changeset
  3189
    "Modified: 16.4.1996 / 18:12:14 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3190
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
  3191
662
df7953db3847 version method at the end
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
  3192
!Behavior class methodsFor:'documentation'!
df7953db3847 version method at the end
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
  3193
df7953db3847 version method at the end
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
  3194
version
1285
7df250a95d7b commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
  3195
    ^ '$Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.72 1996-04-25 11:16:22 cg Exp $'
662
df7953db3847 version method at the end
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
  3196
! !