UndefObj.st
author Claus Gittinger <cg@exept.de>
Fri, 03 Jan 1997 16:40:48 +0100
changeset 2040 8ba8b1002902
parent 1958 d8d575552c87
child 2416 588d5d510c10
permissions -rw-r--r--
avoid intermediate Object subclass creation. Only create minimum protocol, if the corresponding query returns true (which is true if done in the browser). This avoids those methods to be defined for filedIn classes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 95
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:#UndefinedObject
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    14
	instanceVariableNames:''
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    15
	classVariableNames:'CreateMinimumProtocolInNewSubclassQuery'
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    16
	poolDictionaries:''
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    17
	category:'Kernel-Objects'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    20
!UndefinedObject class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    21
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    22
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    23
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    24
 COPYRIGHT (c) 1988 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 95
diff changeset
    25
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    27
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    28
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    30
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    31
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    32
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    33
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    34
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    35
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    36
documentation
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    37
"
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    38
    there is only one instance of this class: nil, 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    39
    representing an undefined or otherwise unspecified object.
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    40
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    41
    All instance variables, array elements and even method/block local 
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    42
    variables are initially set to nil.
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    43
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    44
    Since in Smalltalk/X (and in other smalltalks), nil is represented by 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    45
    a special pointer value (NULL), there can be only one instance of UndefinedObject, 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    46
    and no subclassing is possible. 
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    47
    (to be exact: subclassing UndefinedObject is technically possible, 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    48
     but instances of it would not be recognized as being nil 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    49
     - therefore, subclassing is blocked and an error is raised when it is tried)
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    50
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    51
    For advanced users:
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    52
      Beside the above role, nil can be subclassed (!!).
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    53
      This creates a class which inherits no protocol whatsoever - not even
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    54
      the basic interfaces as defined by the Object class. Subclasses of nil
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    55
      are useful if all messages send to instances should trap into the
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    56
      #doesNotUnderstand: method. For example, proxy objects are typically defined
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    57
      this way.
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    58
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    59
    [author:]
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    60
        Claus Gittinger
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    61
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    62
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    64
!UndefinedObject class methodsFor:'initialization'!
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    65
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    66
initialize
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    67
    CreateMinimumProtocolInNewSubclassQuery isNil ifTrue:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    68
        CreateMinimumProtocolInNewSubclassQuery := QuerySignal new.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    69
        CreateMinimumProtocolInNewSubclassQuery nameClass:self message:#createMinimumProtocolInNewSubclassQuery.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    70
        CreateMinimumProtocolInNewSubclassQuery defaultAnswer:false.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    71
    ].
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    72
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    73
    "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    74
     UndefinedObject initialize
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    75
    "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    76
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    77
    "Created: 3.1.1997 / 15:02:40 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    78
    "Modified: 3.1.1997 / 15:18:33 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    79
! !
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    80
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
!UndefinedObject class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
basicNew
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
    "catch new - there MUST be only one nil in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
basicNew:size
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    "catch new - there MUST be only one nil in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    95
!UndefinedObject class methodsFor:'Signal constants'!
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    96
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    97
createMinimumProtocolInNewSubclassQuery
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    98
    "return the signal used to ask if the minimum required protocol
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    99
     should be created for nil subclasses.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   100
     By default, this is not done, however, the browser answers true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   101
     here, to avoid big trouble with nil subclasses which do not define
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   102
     some methods which the inspector needs."
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   103
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   104
    ^ CreateMinimumProtocolInNewSubclassQuery
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   105
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   106
    "Created: 3.1.1997 / 15:05:48 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   107
    "Modified: 3.1.1997 / 15:06:15 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   108
! !
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   109
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   110
!UndefinedObject class methodsFor:'queries'!
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   111
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   112
canBeSubclassed
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   113
    "return true, if its allowed to create subclasses of the receiver.
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   114
     Return nil here - since it is NOT possible for UndefinedObject"
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   115
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   116
    ^ false
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   117
! !
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   118
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   119
!UndefinedObject methodsFor:'copying'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   120
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   121
copy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   122
    "return a shallow copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   123
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   124
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   125
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   126
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   127
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   128
deepCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   129
    "return a deep copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   130
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   131
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   132
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   133
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   134
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   135
deepCopyUsing:aDictionary
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   136
    "return a deep copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   137
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   138
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   139
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   140
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   141
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   142
shallowCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   143
    "return a shallow copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   144
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   145
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   146
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   147
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   148
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   149
simpleDeepCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   150
    "return a deep copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   151
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   152
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   153
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   154
! !
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   155
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   156
!UndefinedObject methodsFor:'error catching'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   157
a27a279701f8 Initial revision
claus
parents:
diff changeset
   158
basicAt:index
a27a279701f8 Initial revision
claus
parents:
diff changeset
   159
    "catch array access - its illegal
a27a279701f8 Initial revision
claus
parents:
diff changeset
   160
     defined here since basicAt: in Object ommits the nil-check"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   161
a27a279701f8 Initial revision
claus
parents:
diff changeset
   162
    ^ self notIndexed
a27a279701f8 Initial revision
claus
parents:
diff changeset
   163
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   164
a27a279701f8 Initial revision
claus
parents:
diff changeset
   165
basicAt:index put:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   166
    "catch array access - its illegal
a27a279701f8 Initial revision
claus
parents:
diff changeset
   167
     defined here since basicAt:put: in Object ommits the nil-check"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
    ^ self notIndexed
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   171
a27a279701f8 Initial revision
claus
parents:
diff changeset
   172
!UndefinedObject methodsFor:'printing & storing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   173
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   174
printOn:aStream
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   175
    "append a printed representation of the receiver to the
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   176
     argument, aStream"
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   177
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   178
    aStream nextPutAll:'nil'
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   179
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   180
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   181
printString
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   182
    "return a string for printing myself"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   183
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   184
    ^ 'nil'
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   185
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   186
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   187
storeOn:aStream
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   188
    "append a printed representation of the receiver to the
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   189
     argument, aStream, which allows reconstruction of it"
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   190
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   191
    ^ self printOn:aStream
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   192
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   193
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   194
storeString
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   195
    "return a string for storing myself"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   196
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   197
    ^ 'nil'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
! !
2
claus
parents: 1
diff changeset
   199
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   200
!UndefinedObject methodsFor:'subclass creation'!
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   201
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   202
nilSubclass:action
356
claus
parents: 293
diff changeset
   203
    "common helper for subclass creation.
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   204
     Creates a nil-superclass class. 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   205
     If the CreateMinimumProtocolInNewSubclassQuery answers true,
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   206
     entries for the minimum required protocol (#class, #isBehavior 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   207
     and #doesNotUnderstand:) are also automatically created.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   208
     (this query is typically answered by the browser)
356
claus
parents: 293
diff changeset
   209
     These are required to avoid getting into deep trouble when
claus
parents: 293
diff changeset
   210
     inspecting or debugging instances of this new class.
claus
parents: 293
diff changeset
   211
     The methods get a modified source code to remind you that these
claus
parents: 293
diff changeset
   212
     methods were automatically generated."
claus
parents: 293
diff changeset
   213
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   214
    |newClass methodDict method|
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   215
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   216
    Class withoutUpdatingChangesDo:[
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   217
        newClass := action value
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   218
    ].
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   219
    newClass notNil ifTrue:[
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
   220
        newClass setSuperclass:nil.
1803
754f9205b651 meta's superclass should be class - not Object.
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
   221
        newClass class setSuperclass:Class.
356
claus
parents: 293
diff changeset
   222
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   223
        newClass methodDictionary size == 0 ifTrue:[
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   224
            Class addChangeRecordForClass:newClass.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   225
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   226
            CreateMinimumProtocolInNewSubclassQuery raise
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   227
            ifTrue:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   228
                "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   229
                 copy over method objects from Object
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   230
                 and modify the source code
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   231
                "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   232
                methodDict := MethodDictionary new:3.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   233
                #(#class #isBehavior #doesNotUnderstand:) do:[:sel|
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   234
                    method := (Object compiledMethodAt:sel) copy.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   235
                    method source: method source , '
356
claus
parents: 293
diff changeset
   236
"
claus
parents: 293
diff changeset
   237
*** WARNING
claus
parents: 293
diff changeset
   238
***
claus
parents: 293
diff changeset
   239
*** this method has been automatically created,
claus
parents: 293
diff changeset
   240
*** since all nil-subclasses should respond to some minimum required
claus
parents: 293
diff changeset
   241
*** protocol.
claus
parents: 293
diff changeset
   242
***
claus
parents: 293
diff changeset
   243
*** Inspection and/or debugging of instances may not be possible,
claus
parents: 293
diff changeset
   244
*** if you remove/change this method. 
claus
parents: 293
diff changeset
   245
"
claus
parents: 293
diff changeset
   246
'.
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   247
                    methodDict at:sel put:method.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   248
"/                    newClass addChangeRecordForMethod:method
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   249
                ].
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   250
                newClass methodDictionary:methodDict.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   251
            ]
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
   252
        ]
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   253
    ].
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   254
    ^ newClass
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
   255
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   256
    "Modified: 12.6.1996 / 10:46:15 / stefan"
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   257
    "Modified: 3.1.1997 / 15:53:21 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   258
    "Created: 3.1.1997 / 16:00:34 / cg"
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   259
!
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   260
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   261
subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   262
    "create a new class which has nil as superclass 
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   263
     - i.e. traps into #doesNotUnderstand: for all of its messages."
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   264
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   265
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   266
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   267
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   268
                    name:nameSymbol  
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   269
                    inEnvironment:(Class nameSpaceQuerySignal raise)
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   270
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   271
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   272
                    variable:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   273
                    words:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   274
                    pointers:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   275
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   276
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   277
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   278
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   279
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   280
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   281
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   282
    "Modified: 3.1.1997 / 16:00:39 / cg"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   283
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   284
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   285
variableByteSubclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   286
    "create a new class which has nil as superclass 
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   287
     - i.e. traps into #doesNotUnderstand: for all of its messages."
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   288
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   289
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   290
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   291
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   292
                    name:nameSymbol  
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   293
                    inEnvironment:(Class nameSpaceQuerySignal raise)
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   294
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   295
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   296
                    variable:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   297
                    words:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   298
                    pointers:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   299
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   300
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   301
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   302
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   303
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   304
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   305
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   306
    "Modified: 3.1.1997 / 16:00:42 / cg"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   307
!
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   308
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   309
variableSubclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
159
514c749165c3 *** empty log message ***
claus
parents: 95
diff changeset
   310
    "create a new class which has nil as superclass 
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   311
     - i.e. traps into #doesNotUnderstand: for all of its messages."
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   312
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   313
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   314
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   315
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   316
                    name:nameSymbol  
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   317
                    inEnvironment:(Class nameSpaceQuerySignal raise)
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   318
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   319
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   320
                    variable:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   321
                    words:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   322
                    pointers:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   323
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   324
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   325
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   326
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   327
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   328
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   329
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   330
    "Modified: 3.1.1997 / 16:00:45 / cg"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   331
! !
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   332
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   333
!UndefinedObject methodsFor:'testing'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   334
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   335
? defaultValue
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   336
     "if the receiver is nil, return the defaultValue;
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   337
      otherwise, return the receiver.
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   338
      This method is redefined from Object;
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   339
      the argument is retuned unconditionally here.
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   340
1958
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   341
      Thus, if foo and bar are simple variables or constants,
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   342
          foo ? bar
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   343
      is the same as:
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   344
          (foo isNil ifTrue:[bar] ifFalse:[foo])
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   345
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   346
      if they are message sends, the equivalent code is:
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   347
          [
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   348
              |t1 t2|
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   349
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   350
              t1 := foo.
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   351
              t2 := bar.
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   352
              t1 isNil ifTrue:[t2] ifFalse:[t1]
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   353
          ] value
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   354
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   355
      Can be used to provide defaultValues to variables,
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   356
      as in:
1958
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   357
          foo := arg ? #defaultValue
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   358
     "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   359
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   360
    ^ defaultValue
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   361
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   362
    "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   363
     1 ? #default
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   364
     nil ? #default 
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   365
    "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   366
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   367
    "Created: 4.11.1996 / 20:37:09 / cg"
1958
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   368
    "Modified: 10.11.1996 / 18:37:13 / cg"
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   369
!
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   370
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   371
basicSize
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   372
    "return the number of indexed instvars
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   373
     defined here since size in Object ommits the nil-check"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   374
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   375
    ^ 0
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   376
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   377
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   378
hash
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   379
    "return an integer useful as a hash key"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   380
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   381
    ^ 0
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   382
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   383
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   384
identityHash
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   385
    "return an integer useful as a hash key"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   386
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   387
    ^ 0
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   388
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   389
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   390
isLiteral
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   391
    "return true, if the receiver can be used as a literal
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   392
     (i.e. can be used in constant arrays)"
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   393
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   394
    ^ true
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   395
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   396
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   397
isNil
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   398
    "return true if I am nil - since I am, return true"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   399
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   400
    ^ true
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   401
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   402
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   403
notNil
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   404
    "return true if I am not nil - since I am nil, return false"
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   405
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   406
    ^ false
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   407
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   408
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   409
size
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   410
    "return the number of indexed instvars
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   411
     defined here since size in Object ommits the nil-check"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   412
 
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   413
    ^ 0
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   414
! !
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   415
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   416
!UndefinedObject class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   417
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   418
version
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   419
    ^ '$Header: /cvs/stx/stx/libbasic/Attic/UndefObj.st,v 1.29 1997-01-03 15:40:48 cg Exp $'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   420
! !
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   421
UndefinedObject initialize!