ProtoObject.st
author Claus Gittinger <cg@exept.de>
Fri, 10 Oct 2003 18:39:13 +0200
changeset 7661 71d2cac1b959
parent 7659 4def16a2e6e1
child 8500 10d47cede03c
permissions -rw-r--r--
some tests aded to avoid trouble in debugger
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic' }"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
nil subclass:#ProtoObject
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
6912
d2e78827a065 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6911
diff changeset
     7
	category:'Kernel-Objects'
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!ProtoObject class methodsFor:'documentation'!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    a minimum object without much protocol;
7659
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
    15
    Provides the minimum required to prevent inspectors from crashing,
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
    16
    and debuggers from blocking.
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
    17
    (i.e. instead of inheriting from nil, better inherit from this).
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
    18
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    Named after a similar class found in Dolphin-Smalltalk.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    [author:]
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        Claus Gittinger (not much authoring, though)
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
! !
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
!ProtoObject methodsFor:'error handling'!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
doesNotUnderstand:aMessage
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
    "this message is sent by the runtime system (VM) when
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
     a message is not understood by some object (i.e. there
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
     is no method for that selector). The original message has
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
     been packed into aMessage (i.e. the receiver, selector and
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
     any arguments) and the original receiver is then sent the
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
     #doesNotUnderstand: message.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
     Here, we raise another signal which usually enters the debugger.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
     You can of course redefine #doesNotUnderstand: in your classes
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
     to implement message delegation, 
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
     or handle the MessageNotUnderstoodSignal gracefully."
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    <context: #return>
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    |sel selStr errorString cls|
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    sel := aMessage selector.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    selStr := sel printString.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    "/ Although sel should always be a symbol,
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    "/ always use printStrings in the code below.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    "/ Non-symbol selector may happen when things go mad in a primitive, 
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    "/ or a method has been called by valueWithReceiver: with a wrong arg.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    "/ handle the case of an error during early startup
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    "/ (output streams not yet initialized)
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    Stdout isNil ifTrue:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        Smalltalk fatalAbort:'error during init: ' , selStr , ' not understood'.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    ].
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    "/ extract the class that should have implemented the message.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    "/ (in case of a super-send, this is not the receivers class)
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    cls := thisContext sender searchClass.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    cls isNil ifTrue:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        "it was NOT a super or directed send ..."
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        cls := self class
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    ].
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    cls notNil ifTrue:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
        "/ displayString is better than 'cls name',
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        "/ since it appends (obsolete) for outdated classes.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
        "/ (this happens if you send messages to old instances
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
        "/  after changing a classes definition)
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
        "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
        errorString := cls displayString.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    ] ifFalse:[    
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
        errorString := '(** nil-class **)'
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    ].
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    sel class ~~ Symbol ifTrue:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
        errorString := errorString , ' nonSymbol selector: ' , selStr , ' not understood'.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    ] ifFalse:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        errorString := errorString , ' does not understand: ' , selStr.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    ].
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    "/ this only happens, when YOU play around with my classvars ...
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    "/ (or an error occurs during very early startup, when signals are not yet set)
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    MessageNotUnderstood isNil ifTrue:[
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
        ^ MiniDebugger 
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
            enterWithMessage:'oops - MessageNotUnderstoodSignal is gone (nil)'
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
            mayProceed:true.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    ].
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    "/ thats where we end up normally - raise a signal which (if unhandled) opens a debugger
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    "/
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    ^ MessageNotUnderstood
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
                raiseRequestWith:aMessage
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
                errorString:errorString
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    "Modified: / 9.6.1999 / 17:46:17 / cg"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
*** WARNING
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
***
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
*** this method has been automatically created,
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
*** since all nil-subclasses should respond to some minimum required
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
*** protocol.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
***
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
*** Inspection and/or debugging of instances may not be possible,
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
*** if you remove/change this method. 
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
! !
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
!ProtoObject methodsFor:'queries'!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
class
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    "return the receivers class"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
%{  /* NOCONTEXT */
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    RETURN ( __Class(self) );
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
%}
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
*** WARNING
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
***
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
*** this method has been automatically created,
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
*** since all nil-subclasses should respond to some minimum required
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
*** protocol.
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
***
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
*** Inspection and/or debugging of instances may not be possible,
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
*** if you remove/change this method. 
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
"
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
! !
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
!ProtoObject methodsFor:'testing'!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
isBehavior
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    ^ false
7661
71d2cac1b959 some tests aded to avoid trouble in debugger
Claus Gittinger <cg@exept.de>
parents: 7659
diff changeset
   143
!
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
7661
71d2cac1b959 some tests aded to avoid trouble in debugger
Claus Gittinger <cg@exept.de>
parents: 7659
diff changeset
   145
isBlock
71d2cac1b959 some tests aded to avoid trouble in debugger
Claus Gittinger <cg@exept.de>
parents: 7659
diff changeset
   146
    ^ false
7659
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   147
!
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   148
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   149
isException
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   150
    ^ false
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   151
!
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   152
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   153
isExceptionHandler
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   154
    ^ false
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   155
!
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   156
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   157
isJavaObject
4def16a2e6e1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 6912
diff changeset
   158
    ^ false
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
! !
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
!ProtoObject class methodsFor:'documentation'!
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
version
7661
71d2cac1b959 some tests aded to avoid trouble in debugger
Claus Gittinger <cg@exept.de>
parents: 7659
diff changeset
   164
    ^ '$Header: /cvs/stx/stx/libbasic/ProtoObject.st,v 1.7 2003-10-10 16:39:13 cg Exp $'
6844
75e52e680723 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
! !