UndefinedObject.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18645 86c46e336392
child 20205 03e626304d06
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
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
"
5471
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 4682
diff changeset
    12
"{ Package: 'stx:libbasic' }"
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 4682
diff changeset
    13
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
    14
"{ NameSpace: Smalltalk }"
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
    15
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
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
    17
	instanceVariableNames:''
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    18
	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
    19
	poolDictionaries:''
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    20
	category:'Kernel-Objects'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    23
!UndefinedObject class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    24
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    25
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    26
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    27
 COPYRIGHT (c) 1988 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 95
diff changeset
    28
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    29
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    30
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    31
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    33
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    34
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    35
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    36
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    37
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    38
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    39
documentation
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    40
"
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    41
    there is only one instance of this class: nil, 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    42
    representing an undefined or otherwise unspecified object.
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    43
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    44
    All instance variables, array elements and even method/block local 
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    45
    variables are initially set to nil.
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    46
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    47
    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
    48
    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
    49
    and no subclassing is possible. 
1303
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    50
    (to be exact: subclassing UndefinedObject is technically possible, 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    51
     but instances of it would not be recognized as being nil 
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    52
     - 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
    53
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    54
    For advanced users:
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    55
      Beside the above role, nil can be subclassed (!!).
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    56
      This creates a class which inherits no protocol whatsoever - not even
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    57
      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
    58
      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
    59
      #doesNotUnderstand: method. For example, proxy objects are typically defined
8fdc2c653d13 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    60
      this way.
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    61
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    62
    [author:]
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1030
diff changeset
    63
        Claus Gittinger
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    64
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    65
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    67
!UndefinedObject class methodsFor:'initialization'!
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    68
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    69
initialize
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    70
    CreateMinimumProtocolInNewSubclassQuery isNil ifTrue:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    71
        CreateMinimumProtocolInNewSubclassQuery := QuerySignal new.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    72
        CreateMinimumProtocolInNewSubclassQuery nameClass:self message:#createMinimumProtocolInNewSubclassQuery.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    73
        CreateMinimumProtocolInNewSubclassQuery defaultAnswer:false.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    74
    ].
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
     UndefinedObject initialize
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    78
    "
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
    "Created: 3.1.1997 / 15:02:40 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    81
    "Modified: 3.1.1997 / 15:18:33 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    82
! !
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    83
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
!UndefinedObject class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
basicNew
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
    "catch new - there MUST be only one nil in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
basicNew:size
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
    "catch new - there MUST be only one nil in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    98
!UndefinedObject class methodsFor:'Signal constants'!
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
    99
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   100
createMinimumProtocolInNewSubclassQuery
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   101
    "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
   102
     should be created for nil subclasses.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   103
     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
   104
     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
   105
     some methods which the inspector needs."
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   106
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   107
    ^ CreateMinimumProtocolInNewSubclassQuery
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
    "Created: 3.1.1997 / 15:05:48 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   110
    "Modified: 3.1.1997 / 15:06:15 / cg"
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   111
! !
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   112
18645
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   113
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   114
!UndefinedObject class methodsFor:'queries'!
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   115
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   116
canBeSubclassed
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   117
    "return true, if its allowed to create subclasses of the receiver.
3914
1aa1ab6edb7e comment change
Claus Gittinger <cg@exept.de>
parents: 3466
diff changeset
   118
     Return false here - since it is NOT possible for UndefinedObject.
1aa1ab6edb7e comment change
Claus Gittinger <cg@exept.de>
parents: 3466
diff changeset
   119
     (due to the representation of nil as a 0-pointer)"
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   120
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   121
    ^ false
3914
1aa1ab6edb7e comment change
Claus Gittinger <cg@exept.de>
parents: 3466
diff changeset
   122
1aa1ab6edb7e comment change
Claus Gittinger <cg@exept.de>
parents: 3466
diff changeset
   123
    "Modified: / 5.11.1998 / 16:11:43 / cg"
2672
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   124
!
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   125
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   126
hasImmediateInstances
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   127
    "return true if this class has immediate instances
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   128
     i.e. if the instances are represented in the pointer itself and
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   129
     no real object header/storage is used for the object.
2672
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   130
     Redefined from Behavior"
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   131
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   132
    ^ true
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   133
dc3662188b2c added #hasImmediateInstances for VW compatibility
Claus Gittinger <cg@exept.de>
parents: 2416
diff changeset
   134
    "Created: 3.6.1997 / 12:01:39 / cg"
4321
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   135
!
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   136
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   137
hasSharedInstances
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   138
    "return true if this class has shared instances, that is, instances
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   139
     with the same value are identical.
4654
3b3f88c73a86 comment
Claus Gittinger <cg@exept.de>
parents: 4652
diff changeset
   140
     True returned here - there is only one nil."
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   141
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   142
    ^ true
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   143
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   144
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   145
!
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   146
4321
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   147
isBuiltInClass
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   148
    "return true, if this class is known by the run-time-system,
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   149
     i.e. you cannot add/remove instance variables without recompiling
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   150
     the VM.
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   151
     Here, true is returned for myself, false for subclasses."
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   152
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   153
    ^ self == UndefinedObject
46767755ca5f added #isBuiltIn query
Claus Gittinger <cg@exept.de>
parents: 4060
diff changeset
   154
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   155
! !
9b7ae5e18f3e *** empty log message ***
claus
parents: 41
diff changeset
   156
5699
42aa5113449a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5557
diff changeset
   157
16908
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   158
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   159
18645
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   160
!UndefinedObject methodsFor:'Compatibility-Squeak'!
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   161
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   162
subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString category:cat
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   163
    ^ self subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries: '' category:cat
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   164
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   165
    "Created: / 24-07-2015 / 19:29:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   166
! !
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   167
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   168
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   169
2416
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   170
!UndefinedObject methodsFor:'converting'!
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   171
8305
7f80b5a18ffc asBoolean for WO
werner
parents: 7262
diff changeset
   172
asBoolean
7f80b5a18ffc asBoolean for WO
werner
parents: 7262
diff changeset
   173
    ^ false
7f80b5a18ffc asBoolean for WO
werner
parents: 7262
diff changeset
   174
!
7f80b5a18ffc asBoolean for WO
werner
parents: 7262
diff changeset
   175
15081
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   176
asNilIfEmpty
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   177
    "I am nil, so answer nil"
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   178
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   179
    ^ self
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   180
!
e2839be9faf7 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 14678
diff changeset
   181
2416
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   182
literalArrayEncoding
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   183
    "encode myself as an array literal, from which a copy of the receiver
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   184
     can be reconstructed with #decodeAsLiteralArray."
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   185
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   186
    ^ self
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   187
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   188
    "Created: 25.2.1997 / 19:18:47 / cg"
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   189
! !
588d5d510c10 literal encodings
Claus Gittinger <cg@exept.de>
parents: 2040
diff changeset
   190
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   191
!UndefinedObject methodsFor:'copying'!
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
copy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   194
    "return a shallow copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   195
     - since there is only one nil in the system return self"
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
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   198
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   199
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   200
deepCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   201
    "return a deep copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   202
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   203
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   204
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   205
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   206
10945
2d0596240727 deepCopy change
ab
parents: 10015
diff changeset
   207
deepCopyUsing:aDictionary postCopySelector:postCopySelector
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   208
    "return a deep copy of myself
8383
dea5311899c5 comments in copy methods
Claus Gittinger <cg@exept.de>
parents: 8305
diff changeset
   209
     - since there is only one nil in the system, return self"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   210
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   211
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   212
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   213
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   214
shallowCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   215
    "return a shallow copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   216
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   217
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   218
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   219
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   220
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   221
simpleDeepCopy
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   222
    "return a deep copy of myself
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   223
     - since there is only one nil in the system return self"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   224
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   225
    ^ self
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   226
! !
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   227
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   228
!UndefinedObject methodsFor:'dependents access'!
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   229
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   230
addDependent:someObject
12968
07761a8bcc6a comment/format in: #addDependent:
Claus Gittinger <cg@exept.de>
parents: 11821
diff changeset
   231
    "raise an error here - nil may not have dependents (it never changes anyway)"
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   232
4530
793b116fef3e error: vs. error:mayProceed:
Claus Gittinger <cg@exept.de>
parents: 4339
diff changeset
   233
    self error:'nil may not have dependents' mayProceed:true
793b116fef3e error: vs. error:mayProceed:
Claus Gittinger <cg@exept.de>
parents: 4339
diff changeset
   234
12968
07761a8bcc6a comment/format in: #addDependent:
Claus Gittinger <cg@exept.de>
parents: 11821
diff changeset
   235
    "Modified: / 28-07-2010 / 19:20:36 / cg"
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   236
!
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   237
3183
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   238
dependents
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   239
    "nil has no dependents"
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   240
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   241
    ^#()
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   242
!
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   243
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   244
release
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   245
    "ignored here - nil has no dependents"
3183
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   246
!
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   247
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   248
removeDependent:someObject
3183
acc37a9c087c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3166
diff changeset
   249
    "ignored here - nil has no dependents"
3166
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   250
! !
65c5ba2b468e dependents stuff
ca
parents: 3044
diff changeset
   251
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   252
!UndefinedObject methodsFor:'error catching'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
basicAt:index
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
    "catch array access - its illegal
a27a279701f8 Initial revision
claus
parents:
diff changeset
   256
     defined here since basicAt: in Object ommits the nil-check"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
    ^ self notIndexed
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
basicAt:index put:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
    "catch array access - its illegal
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
     defined here since basicAt:put: in Object ommits the nil-check"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
a27a279701f8 Initial revision
claus
parents:
diff changeset
   265
    ^ self notIndexed
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
14678
eb0809dd0fee class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 13588
diff changeset
   268
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   269
!UndefinedObject methodsFor:'printing & storing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   271
printOn:aStream
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   272
    "append a printed representation of the receiver to the
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   273
     argument, aStream"
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   274
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   275
    aStream nextPutAll:'nil'
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   276
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   277
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   278
printString
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   279
    "return a string for printing myself"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   280
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   281
    ^ 'nil'
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   282
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   283
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   284
storeOn:aStream
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   285
    "append a printed representation of the receiver to the
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   286
     argument, aStream, which allows reconstruction of it"
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   287
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   288
    ^ self printOn:aStream
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   289
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   290
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   291
storeString
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   292
    "return a string for storing myself"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   293
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   294
    ^ 'nil'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
! !
2
claus
parents: 1
diff changeset
   296
5557
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   297
!UndefinedObject methodsFor:'queries'!
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   298
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   299
basicSize
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   300
    "return the number of indexed instvars
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   301
     defined here since size in Object ommits the nil-check"
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   302
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   303
    ^ 0
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   304
!
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   305
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   306
size
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   307
    "return the number of indexed instvars
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   308
     defined here since size in Object ommits the nil-check"
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   309
 
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   310
    ^ 0
f5f8d236027c category change
Claus Gittinger <cg@exept.de>
parents: 5471
diff changeset
   311
! !
5471
a57eeb01c5ab General encoding method (#encodeOn:with:)
Stefan Vogel <sv@exept.de>
parents: 4682
diff changeset
   312
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   313
!UndefinedObject methodsFor:'subclass creation'!
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   314
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   315
nilSubclass:action
356
claus
parents: 293
diff changeset
   316
    "common helper for subclass creation.
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   317
     Creates a nil-superclass class. 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   318
     If the CreateMinimumProtocolInNewSubclassQuery answers true,
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   319
     entries for the minimum required protocol (#class, #isBehavior 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   320
     and #doesNotUnderstand:) are also automatically created.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   321
     (this query is typically answered by the browser)
356
claus
parents: 293
diff changeset
   322
     These are required to avoid getting into deep trouble when
claus
parents: 293
diff changeset
   323
     inspecting or debugging instances of this new class.
claus
parents: 293
diff changeset
   324
     The methods get a modified source code to remind you that these
claus
parents: 293
diff changeset
   325
     methods were automatically generated."
claus
parents: 293
diff changeset
   326
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   327
    |newClass methodDict method|
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   328
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   329
    Class withoutUpdatingChangesDo:[
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   330
        newClass := action value
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   331
    ].
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   332
    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
   333
        newClass setSuperclass:nil.
1803
754f9205b651 meta's superclass should be class - not Object.
Claus Gittinger <cg@exept.de>
parents: 1638
diff changeset
   334
        newClass class setSuperclass:Class.
356
claus
parents: 293
diff changeset
   335
1461
dd25bb1e9973 Use methodDictionary instead of selector/method arrays.
Stefan Vogel <sv@exept.de>
parents: 1303
diff changeset
   336
        newClass methodDictionary size == 0 ifTrue:[
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   337
            Class addChangeRecordForClass:newClass.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   338
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   339
            CreateMinimumProtocolInNewSubclassQuery query
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   340
            ifTrue:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   341
                "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   342
                 copy over method objects from Object
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   343
                 and modify the source code
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   344
                "
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   345
                methodDict := MethodDictionary new:3.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   346
                #(#class #isBehavior #doesNotUnderstand:) do:[:sel|
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   347
                    method := (Object compiledMethodAt:sel) copy.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   348
                    method source: method source , '
356
claus
parents: 293
diff changeset
   349
"
claus
parents: 293
diff changeset
   350
*** WARNING
claus
parents: 293
diff changeset
   351
***
claus
parents: 293
diff changeset
   352
*** this method has been automatically created,
claus
parents: 293
diff changeset
   353
*** since all nil-subclasses should respond to some minimum required
claus
parents: 293
diff changeset
   354
*** protocol.
claus
parents: 293
diff changeset
   355
***
claus
parents: 293
diff changeset
   356
*** Inspection and/or debugging of instances may not be possible,
claus
parents: 293
diff changeset
   357
*** if you remove/change this method. 
claus
parents: 293
diff changeset
   358
"
claus
parents: 293
diff changeset
   359
'.
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   360
                    methodDict at:sel put:method.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   361
"/                    newClass addChangeRecordForMethod:method
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   362
                ].
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   363
                newClass methodDictionary:methodDict.
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   364
            ]
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
   365
        ]
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   366
    ].
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   367
    ^ newClass
1029
c469a63e88e2 only redefine #class/#isbehavior/#doesNotUnderstand once (if no methods are present yet)
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
   368
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   369
    "Modified: / 3.1.1997 / 15:53:21 / cg"
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   370
    "Created: / 3.1.1997 / 16:00:34 / cg"
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   371
    "Modified: / 18.3.1999 / 18:29:58 / stefan"
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   372
!
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   373
9256
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   374
subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   375
    "create a new class which has nil as superclass 
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   376
     - i.e. traps into #doesNotUnderstand: for all of its messages."
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   377
14678
eb0809dd0fee class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 13588
diff changeset
   378
    "this method allows fileIn of ST/V and V'Age classes
eb0809dd0fee class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 13588
diff changeset
   379
     (which seem to have no category)"
eb0809dd0fee class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 13588
diff changeset
   380
9256
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   381
    ^ self 
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   382
        subclass:nameSymbol 
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   383
        instanceVariableNames:instVarNameString 
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   384
        classVariableNames:classVarString 
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   385
        poolDictionaries:pool
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   386
        category:(Class defaultCategoryForSTVorVAGEClasses).
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   387
!
5aeeba42b052 ST/V support
Claus Gittinger <cg@exept.de>
parents: 9223
diff changeset
   388
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   389
subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   390
    "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
   391
     - i.e. traps into #doesNotUnderstand: for all of its messages."
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 159
diff changeset
   392
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   393
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   394
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   395
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   396
                    name:nameSymbol  
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   397
                    inEnvironment:(Class nameSpaceQuerySignal query)
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   398
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   399
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   400
                    variable:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   401
                    words:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   402
                    pointers:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   403
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   404
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   405
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   406
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   407
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   408
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   409
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   410
    "Modified: / 3.1.1997 / 16:00:39 / cg"
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   411
    "Modified: / 18.3.1999 / 18:30:07 / stefan"
695
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
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   414
variableByteSubclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   415
    "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
   416
     - i.e. traps into #doesNotUnderstand: for all of its messages."
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   417
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   418
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   419
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   420
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   421
                    name:nameSymbol  
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   422
                    inEnvironment:(Class nameSpaceQuerySignal query)
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   423
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   424
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   425
                    variable:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   426
                    words:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   427
                    pointers:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   428
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   429
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   430
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   431
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   432
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   433
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   434
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   435
    "Modified: / 3.1.1997 / 16:00:42 / cg"
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   436
    "Modified: / 18.3.1999 / 18:30:11 / stefan"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   437
!
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   438
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   439
variableSubclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool category:cat
159
514c749165c3 *** empty log message ***
claus
parents: 95
diff changeset
   440
    "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
   441
     - i.e. traps into #doesNotUnderstand: for all of its messages."
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   442
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   443
    ^ self 
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   444
        nilSubclass:[
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   445
                Object class
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   446
                    name:nameSymbol  
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   447
                    inEnvironment:(Class nameSpaceQuerySignal query)
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   448
                    subclassOf:self
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   449
                    instanceVariableNames:instVarNameString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   450
                    variable:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   451
                    words:false
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   452
                    pointers:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   453
                    classVariableNames:classVarString
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   454
                    poolDictionaries:pool
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   455
                    category:cat
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   456
                    comment:nil
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   457
                    changed:true
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   458
        ]
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   459
4060
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   460
    "Modified: / 3.1.1997 / 16:00:45 / cg"
1048a3abf128 Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3914
diff changeset
   461
    "Modified: / 18.3.1999 / 18:30:16 / stefan"
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   462
! !
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   463
7262
afae1fcdc14e method category rename
Claus Gittinger <cg@exept.de>
parents: 7108
diff changeset
   464
!UndefinedObject methodsFor:'subclass creation-private'!
5745
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   465
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   466
subclass:nameSymbol instanceVariableNames:instVarNameString classVariableNames:classVarString poolDictionaries:pool privateIn:ownerClassArg
5745
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   467
    "create a new private class which has nil as superclass 
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   468
     - i.e. traps into #doesNotUnderstand: for all of its messages."
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   469
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   470
    |category ownerClass|
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   471
    
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   472
    (ownerClass := ownerClassArg) isNil ifTrue:[
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   473
        self error:'Nil (undefined) owner class - proceed to define as global' mayProceed:true.
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   474
    ] ifFalse:[
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   475
        category := ownerClassArg category
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   476
    ].
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   477
    
5745
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   478
    ^ self 
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   479
        nilSubclass:[
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   480
                Object class
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   481
                    name:nameSymbol  
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   482
                    inEnvironment:ownerClass
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   483
                    subclassOf:self
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   484
                    instanceVariableNames:instVarNameString
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   485
                    variable:false
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   486
                    words:true
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   487
                    pointers:true
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   488
                    classVariableNames:classVarString
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   489
                    poolDictionaries:pool
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   490
                    category:category
5745
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   491
                    comment:nil
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   492
                    changed:true
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   493
        ]
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   494
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   495
    "Modified: / 3.1.1997 / 16:00:39 / cg"
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   496
    "Modified: / 18.3.1999 / 18:30:07 / stefan"
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   497
! !
9631d16ef88d private subclasses of nil
Claus Gittinger <cg@exept.de>
parents: 5699
diff changeset
   498
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   499
!UndefinedObject methodsFor:'testing'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   500
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   501
? defaultValue
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   502
     "a syntactic shugar-piece:
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   503
      if the receiver is nil, return the defaultValue;
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   504
      otherwise, return the receiver.
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   505
      This method is redefined from Object;
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   506
      the argument is retuned unconditionally here.
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   507
1958
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   508
      Thus, if foo and bar are simple variables or constants,
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   509
          foo ? bar
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   510
      is the same as:
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   511
          (foo isNil ifTrue:[bar] ifFalse:[foo])
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   512
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   513
      if they are message sends, the equivalent code is:
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   514
          [
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   515
              |t1 t2|
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   516
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   517
              t1 := foo.
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   518
              t2 := bar.
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   519
              t1 isNil ifTrue:[t2] ifFalse:[t1]
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   520
          ] value
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   521
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   522
      Can be used to provide defaultValues to variables,
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   523
      as in:
1958
d8d575552c87 commentary
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
   524
          foo := arg ? #defaultValue
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   525
     "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   526
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   527
    ^ defaultValue
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   528
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   529
    "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   530
     1 ? #default
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   531
     nil ? #default 
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   532
    "
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   533
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   534
    "Created: / 4.11.1996 / 20:37:09 / cg"
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   535
    "Modified: / 19.5.1998 / 17:39:36 / cg"
1868
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   536
!
1cd4273ea11b added ?
Claus Gittinger <cg@exept.de>
parents: 1803
diff changeset
   537
16127
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   538
?+ aOneArgBlock
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   539
     "a syntactic sugar-piece:
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   540
      aOneArgBlock is executed with self as argument
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   541
      if self is not nil.
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   542
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   543
      Note: this method should never be redefined in classes other than UndefinedObject.
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   544
     "
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   545
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   546
    ^ self
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   547
!
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   548
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   549
?? defaultValue
11635
04be8c0e7a03 Fix spelling
Stefan Vogel <sv@exept.de>
parents: 10945
diff changeset
   550
     "a syntactic sugar-piece:
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   551
      much like ?, but sends value to the argument if required.
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   552
      If the receiver is nil, return the defaultValues value;
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   553
      otherwise, return the receiver.
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   554
      This method is redefined from Object.
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   555
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   556
      Thus, if foo and bar are simple variables or constants,
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   557
          foo ?? bar
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   558
      is the same as:
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   559
          (foo isNil ifTrue:[bar value] ifFalse:[foo])
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   560
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   561
      if they are message sends, the equivalent code is:
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   562
          [
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   563
              |t|
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   564
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   565
              t := foo.
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   566
              t isNil ifTrue:[bar value] ifFalse:[t]
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   567
          ] value
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   568
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   569
      Can be used to provide defaultValues to variables,
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   570
      as in:
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   571
          foo := arg ?? [something]
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   572
     "
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   573
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   574
    ^ defaultValue value
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   575
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   576
    "
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   577
     1 ?? #default
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   578
     nil ?? #default 
6069
9aff12a37f5e comment
Claus Gittinger <cg@exept.de>
parents: 6068
diff changeset
   579
     1 ?? [Date today]   
9aff12a37f5e comment
Claus Gittinger <cg@exept.de>
parents: 6068
diff changeset
   580
     nil ?? [Date today]  
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   581
    "
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   582
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   583
    "Created: / 4.11.1996 / 20:37:09 / cg"
3466
f0ba47c6d90a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3464
diff changeset
   584
    "Modified: / 19.5.1998 / 17:42:10 / cg"
3464
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   585
!
b0009b3ea4f2 added ?? - much like ?, but sends #value to its argument.
Claus Gittinger <cg@exept.de>
parents: 3183
diff changeset
   586
7108
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   587
checkNilFileStream
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   588
    "Do nothing if this is a valid FileStream
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   589
     (i.e. the previous open operation was successful).
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   590
     Also implemented in UndefinedObject, to raise an Error there.
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   591
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   592
     This is an aid for converting from the old error reporting (returning nil)
11635
04be8c0e7a03 Fix spelling
Stefan Vogel <sv@exept.de>
parents: 10945
diff changeset
   593
     to the new error reporting (with real Exceptions).
7108
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   594
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   595
     It will vanish as soon as the conversion has been done"
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   596
16127
8d4d8584c504 class: UndefinedObject
Stefan Vogel <sv@exept.de>
parents: 15978
diff changeset
   597
    ^ OpenError raise
7108
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   598
!
90b7cfc06ab8 More openErrorSignal change preparations
Stefan Vogel <sv@exept.de>
parents: 6932
diff changeset
   599
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   600
hash
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   601
    "return an integer useful as a hash key"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   602
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   603
    ^ 0
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   604
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   605
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   606
identityHash
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   607
    "return an integer useful as a hash key"
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   608
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   609
    ^ 0
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   610
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   611
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   612
ifNil:aBlockOrValue
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   613
    "return myself, or the result from evaluating the argument, if I am nil.
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   614
     This is much like #?, but sends #value to the argument in case of a nil
5796
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   615
     receiver.
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   616
     Notice:
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   617
        This method is open coded (inlined) by the compiler(s)
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   618
        - redefining it may not work as expected."
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   619
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   620
    ^ aBlockOrValue value
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   621
!
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   622
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   623
ifNil:nilBlockOrValue ifNotNil:notNilBlockOrValue
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   624
    "return the value of the first arg, if I am nil,
5796
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   625
     the result from evaluating the 2nd argument, if I am not nil.
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   626
     Notice:
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   627
        This method is open coded (inlined) by the compiler(s)
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   628
        - redefining it may not work as expected."
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   629
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   630
    ^ nilBlockOrValue value
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   631
!
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   632
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   633
ifNotNil:aBlockOrValue
5796
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   634
    "return myself if nil, or the result from evaluating the argument, if I am not nil.
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   635
     Notice:
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   636
        This method is open coded (inlined) by the compiler(s)
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   637
        - redefining it may not work as expected."
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   638
8574
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   639
    ^ nil
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   640
!
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   641
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   642
ifNotNil:notNilBlockOrValue ifNil:nilBlockOrValue
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   643
    "return the value of the 2nd arg, if I am nil,
5796
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   644
     the result from evaluating the 1st argument, if I am not nil.
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   645
     Notice:
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   646
        This method is open coded (inlined) by the compiler(s)
6f5c56b1aca4 comments
Claus Gittinger <cg@exept.de>
parents: 5745
diff changeset
   647
        - redefining it may not work as expected."
4339
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   648
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   649
    ^ nilBlockOrValue value
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   650
!
18c19912a67c added #ifNil and friends - squeak compatibility.
Claus Gittinger <cg@exept.de>
parents: 4321
diff changeset
   651
8574
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   652
ifNotNilDo:aBlock
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   653
    "if the reciever is non-nil, return the value of aBlock, passing myself as argument.
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   654
     Otherwise do nothing and return nil."
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   655
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   656
    ^ nil
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   657
!
33bb637901eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8395
diff changeset
   658
6181
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   659
isEmptyOrNil
13588
c52888cbe73c comment: #isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 12968
diff changeset
   660
    "return true if I am nil or an empty collection 
c52888cbe73c comment: #isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 12968
diff changeset
   661
     - since I am nil, return true. (from Sqeak)"
6181
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   662
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   663
    ^ true
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   664
13588
c52888cbe73c comment: #isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 12968
diff changeset
   665
    "Created: / 13-11-2001 / 13:16:40 / cg"
c52888cbe73c comment: #isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 12968
diff changeset
   666
    "Modified (comment): / 17-08-2011 / 09:29:30 / cg"
6181
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   667
!
5876cc789e41 + isEmptyOrNil
Claus Gittinger <cg@exept.de>
parents: 6069
diff changeset
   668
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   669
isLiteral
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   670
    "return true, if the receiver can be used as a literal constant in ST syntax
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   671
     (i.e. can be used in constant arrays)"
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   672
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   673
    ^ true
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   674
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   675
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   676
isNil
9223
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   677
    "Return true, if the receiver is nil.
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   678
     Since I am definitely nil, unconditionally return true here.
3044
a0bbac91639b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
   679
     Notice:
9223
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   680
        This method is open coded (inlined) by the compiler(s)
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   681
        - redefining it may not work as expected."
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   682
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   683
    ^ true
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   684
!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   685
6068
1d5ca1175f3f added #isNilOrEmptyCollection
Claus Gittinger <cg@exept.de>
parents: 5796
diff changeset
   686
isNilOrEmptyCollection
8833
717b01292d0e comments
Stefan Vogel <sv@exept.de>
parents: 8830
diff changeset
   687
    "return true if I am nil or an empty collection - false here.
717b01292d0e comments
Stefan Vogel <sv@exept.de>
parents: 8830
diff changeset
   688
     Obsolete, use isEmptyOrNil."
717b01292d0e comments
Stefan Vogel <sv@exept.de>
parents: 8830
diff changeset
   689
717b01292d0e comments
Stefan Vogel <sv@exept.de>
parents: 8830
diff changeset
   690
    <resource:#obsolete>
6068
1d5ca1175f3f added #isNilOrEmptyCollection
Claus Gittinger <cg@exept.de>
parents: 5796
diff changeset
   691
1d5ca1175f3f added #isNilOrEmptyCollection
Claus Gittinger <cg@exept.de>
parents: 5796
diff changeset
   692
    ^ true
6182
2b992cf865bc comment
Claus Gittinger <cg@exept.de>
parents: 6181
diff changeset
   693
2b992cf865bc comment
Claus Gittinger <cg@exept.de>
parents: 6181
diff changeset
   694
    "Modified: / 13.11.2001 / 13:28:15 / cg"
6068
1d5ca1175f3f added #isNilOrEmptyCollection
Claus Gittinger <cg@exept.de>
parents: 5796
diff changeset
   695
!
1d5ca1175f3f added #isNilOrEmptyCollection
Claus Gittinger <cg@exept.de>
parents: 5796
diff changeset
   696
16908
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   697
isNotNil
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   698
    "Return true, if the receiver not nil.
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   699
     Since I am definitely nil, unconditionally return false here.      
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   700
     the receiver is definitely not nil here, so unconditionally return false."
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   701
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   702
    ^ false
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   703
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   704
    "Created: / 26-10-2014 / 01:30:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   705
!
25523cfdfa62 added: Object>>isNotNil
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16721
diff changeset
   706
6932
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   707
notEmptyOrNil
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   708
    "Squeak compatibility:
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   709
     return true if I am neither nil nor an empty collection."
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   710
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   711
    ^ false
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   712
!
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   713
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   714
notNil
9223
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   715
    "Return true, if the receiver is not nil.
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   716
     Since I am definitely nil, unconditionally return false here.
3044
a0bbac91639b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2672
diff changeset
   717
     Notice:
9223
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   718
        This method is open coded (inlined) by the compiler(s)
105cef4c98ac *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8833
diff changeset
   719
        - redefining it may not work as expected."
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   720
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   721
    ^ false
77
6c38ca59927f *** empty log message ***
claus
parents: 63
diff changeset
   722
! !
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   723
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   724
!UndefinedObject methodsFor:'tracing'!
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   725
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4654
diff changeset
   726
traceInto:aRequestor level:level from:referrer
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   727
    "double dispatch into tracer, passing my type implicitely in the selector"
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   728
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4654
diff changeset
   729
    ^ aRequestor traceUndefinedObject:self level:level from:referrer
4652
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   730
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   731
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   732
! !
8b3118a923d1 added #hasSharedInstances & tracing support
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
   733
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   734
!UndefinedObject methodsFor:'visiting'!
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   735
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   736
acceptVisitor:aVisitor with:aParameter
16721
5fe358a0c941 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16127
diff changeset
   737
    "dispatch for visitor pattern; send #visitNil:with: to aVisitor."
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   738
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   739
    ^ aVisitor visitNilWith:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   740
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8383
diff changeset
   741
18645
86c46e336392 Added ClassDescription>>subclass:... method for more compatbility with Squeak/Pharo
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18482
diff changeset
   742
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   743
!UndefinedObject class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   744
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   745
version
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   746
    ^ '$Header$'
12968
07761a8bcc6a comment/format in: #addDependent:
Claus Gittinger <cg@exept.de>
parents: 11821
diff changeset
   747
!
07761a8bcc6a comment/format in: #addDependent:
Claus Gittinger <cg@exept.de>
parents: 11821
diff changeset
   748
07761a8bcc6a comment/format in: #addDependent:
Claus Gittinger <cg@exept.de>
parents: 11821
diff changeset
   749
version_CVS
18480
d024e283fb68 class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 16908
diff changeset
   750
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   751
! !
6932
1e1d296d4747 + #notEmptyOrNil
penk
parents: 6182
diff changeset
   752
14678
eb0809dd0fee class: UndefinedObject
Claus Gittinger <cg@exept.de>
parents: 13588
diff changeset
   753
2040
8ba8b1002902 avoid intermediate Object subclass creation.
Claus Gittinger <cg@exept.de>
parents: 1958
diff changeset
   754
UndefinedObject initialize!