GenericException.st
author Claus Gittinger <cg@exept.de>
Tue, 28 Aug 2018 11:00:00 +0200
changeset 23300 b0be6a74b979
parent 23232 d46d79fcfddf
child 23307 5698a876ea2c
permissions -rw-r--r--
#FEATURE by cg class: GenericException class added: #isAcceptedBy: this allows for an Exception to redefine the set of handler exceptions. Eg, to implement some kind of 'multiple inheritance' in the acceptance. For example, to implement an exception which is handled by two diffferent exception classes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
     1
"{ Encoding: utf8 }"
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
     2
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 1993 by Claus Gittinger
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
     5
	      All Rights Reserved
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
5348
8220f8db1cc1 added #signalWith: for ANSI compatibility.
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
    14
"{ Package: 'stx:libbasic' }"
8220f8db1cc1 added #signalWith: for ANSI compatibility.
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
    15
17270
f0c93e2cb389 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17106
diff changeset
    16
"{ NameSpace: Smalltalk }"
f0c93e2cb389 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17106
diff changeset
    17
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
Object subclass:#GenericException
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
    19
	instanceVariableNames:'signal parameter messageText suspendedContext raiseContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
    20
		handlerContext rejected originator proceedable'
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
    21
	classVariableNames:'StrictRaising'
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
    22
	poolDictionaries:''
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
    23
	category:'Kernel-Exceptions'
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
GenericException class instanceVariableNames:'NotifierString'
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
5259
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
    29
 No other class instance variables are inherited by this class.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!GenericException class methodsFor:'documentation'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
copyright
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 COPYRIGHT (c) 1993 by Claus Gittinger
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
    38
	      All Rights Reserved
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
 This software is furnished under a license and may be used
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
 only in accordance with the terms of that license and with the
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 inclusion of the above copyright notice.   This software may not
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
 be provided or otherwise made available to, or used by, any
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
 other person.  No title to or ownership of the software is
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
 hereby transferred.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
documentation
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
"
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
    51
    Note:
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    52
        The instance based Signal framework is being replaced by
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    53
        class based exceptions.
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    54
        I.e. what used to be instances of Signal/QuerySignal is being
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    55
        rewritten into subclasses of Exception/Error/Query and Warning.
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    56
        Although the functionality is basically unchanged, the new
20089
2468c0711e9a #OTHER by mawalch
mawalch
parents: 19776
diff changeset
    57
        class based exceptions are easier to instantiate (no need for
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    58
        creation in a classes initialize method), easier to use (no real
20095
41d97ae1384a #OTHER by mawalch
mawalch
parents: 20089
diff changeset
    59
        need for Signal-constant accessors) and allow for easier parameter
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    60
        passing (not only a single parameter, but allows for individual
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    61
        exception subclasses to add additional state).
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
    62
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    GenericException and its subclasses implement the same protocol as Signal.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    So class based exceptions may be implemented as subclasses of GenericException.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
7631
df27883aa7db Undo previous change form cg (on his request!).
Stefan Vogel <sv@exept.de>
parents: 7597
diff changeset
    66
    Normally all exceptions are subclasses of Exception. Exceptions, that are
df27883aa7db Undo previous change form cg (on his request!).
Stefan Vogel <sv@exept.de>
parents: 7597
diff changeset
    67
    used for debugging or that are signalling errors in the exception system itself
df27883aa7db Undo previous change form cg (on his request!).
Stefan Vogel <sv@exept.de>
parents: 7597
diff changeset
    68
    are direct subclasses of GenericException.
df27883aa7db Undo previous change form cg (on his request!).
Stefan Vogel <sv@exept.de>
parents: 7597
diff changeset
    69
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    Instances of Exception are passed to a Signal handling block as argument.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    The handler block may perform various actions by sending corresponding messages
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    to the exception object. The following actions are possible:
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    74
        reject          - don't handle this signal;
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    75
                          another handler will be searched for,
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    76
                          upper in the calling hierarchy
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    77
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    78
        proceed         - return from the Signal>>raise, with nil as value
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    79
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    80
        proceedWith:val - same, but return val from Signal>>raise
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    81
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    82
        return          - return from the Signal>>handle:do:, with nil as value
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    83
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    84
        returnWith:val  - same, but return val from Signal>>handle:do:
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    85
                          (this is also the handler's default,
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    86
                           if it falls through; taking the handlerBlocks value
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    87
                           as return value)
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    88
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    89
        restart         - restart the Signal>>handle:do:, after repairing
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    Via the Exception object, the handler can also query the state of execution:
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    where the Signal was raised, where the handler is, the signal which caused
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
    93
    the error and the messageText passed when the signal was raised. Also, an optional
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    parameter can be passed - the use is signal specific.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    [instance variables:]
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    97
        signal           <Signal>     the signal which caused the exception
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    98
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
    99
        parameter        <Object>     a parameter (if any) which was passed when raising
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   100
                                      the signal (only if raised with #raiseWith:aParameter)
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   101
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   102
        messageText      <String>     an messageText
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   103
                                      (usually the signals own messageText, but sometimes
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   104
                                       changed explicitely in #raiseWith:errorString:)
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   105
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
   106
        suspendedContext <Context>    the context in which the raise occurred
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   107
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   108
        handlerContext   <Context>    the context of the handler (if any)
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   109
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   110
    In case of an unhandled signal raise, Exceptions EmergenyHandler will be evaluated.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    The default emergeny handler will enter the debugger.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    For applications, which do not want Debuggers to come up, other handlers are
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    possible.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    For example, to get the typical C++ behavior, use:
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   116
        Exception emergencyHandler:[:ex | Smalltalk exitWithCoreDump]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   118
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   119
    Raising:
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   120
        two different raising messages are to be used,
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   121
        depending on whether the exception is proceedable or not
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   122
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   123
        For some stupid reason, someone decided that the raise-code checks if
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   124
        the raising messages matches to what the signal thinks is its proceedability.
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   125
        (i.e. not only do both the sender and the signal itself specify proceedability,
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   126
         this is checked by the raise code and a warning is generated if there is a mismatch)
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   127
        This used to be even worse (WrongProceedabilityError), but we relaxed this to
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   128
        a message sent to stderr.
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   129
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   130
        That means, that PROCEEDABLE signals must be raised with:
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   131
            raiseRequest
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   132
        and NON-PROCEEDABLE signals must be raised with:
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   133
            raise
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   134
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
   135
        If you don't know/care as a raiser, you can use
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   136
            raiseSignal
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   137
        which checks for proceedability and sends the appropriate message.
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   138
        (sigh)
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   139
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   140
    all of the 3 messages above come in various flavours:
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   141
        raiseXXX                - do not pass any additional parameter;
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   142
                                  default messageText
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   143
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   144
        raiseXXXWith:           - pass additional parameter;
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   145
                                  default messageText
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   146
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   147
        raiseXXXErrorString:    - do not pass any additional parameter;
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   148
                                  given errorString
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   149
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   150
        raiseXXXWith:errorString:
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   151
                                - pass any additional parameter;
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   152
                                  AND given errorString
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   153
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   154
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    [see also:]
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   156
        Signal  SignalSet QuerySignal
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   157
        Context Block
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   158
        Object DebugView
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   159
        (``Exception handling and signals'': programming/exceptions.html)
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    [author:]
19717
78a27db0fdb6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19626
diff changeset
   162
        Claus Gittinger
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
examples
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    Examples on Exception-raising & handling are found in the doc/coding
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    section (CodingExamples).
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    The emergencyHandler stuff is very useful, to prevent endUser applications
4554
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4548
diff changeset
   172
    from entering the debugger. See the examples in NoHandlerError.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
!GenericException class methodsFor:'initialization'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   178
initialize
4519
fb4904d6787b Implement RecursiveExceptionError. as class based exception.
Stefan Vogel <sv@exept.de>
parents: 4517
diff changeset
   179
    NotifierString := 'unknown exception'.
15636
b9f4e2491f51 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15584
diff changeset
   180
    "force strict signal checking in Smalltalk development - nobody cares otherwise"
b9f4e2491f51 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15584
diff changeset
   181
    StrictRaising := Smalltalk isStandAloneApp not.     "set to true to check whether a signal may be raised proceedable"
4519
fb4904d6787b Implement RecursiveExceptionError. as class based exception.
Stefan Vogel <sv@exept.de>
parents: 4517
diff changeset
   182
13132
b54446664905 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 13055
diff changeset
   183
    "Modified: / 04-08-1999 / 09:06:26 / stefan"
b54446664905 changed: #initialize
Claus Gittinger <cg@exept.de>
parents: 13055
diff changeset
   184
    "Modified: / 17-11-2010 / 17:53:13 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
!GenericException class methodsFor:'instance creation'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
8487
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   189
new
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   190
    "{ Pragma: +inlineNew }"
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   191
16190
05ae6b8316b7 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16157
diff changeset
   192
    ^ self basicNew initialize creator:self.
8487
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   193
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   194
    "Modified: / 23.7.1999 / 13:53:12 / stefan"
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   195
    "Created: / 24.7.1999 / 13:21:13 / stefan"
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   196
!
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   197
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   198
newException
8684
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
   199
    "{ Pragma: +inlineNew }"
8487
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   200
16190
05ae6b8316b7 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16157
diff changeset
   201
    ^ self basicNew initialize creator:self.
8487
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   202
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   203
    "Created: / 23.7.1999 / 13:45:49 / stefan"
5c9ffa3553e3 category change
Stefan Vogel <sv@exept.de>
parents: 8466
diff changeset
   204
    "Modified: / 24.7.1999 / 13:21:25 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
14962
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
   207
15123
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   208
!GenericException class methodsFor:'Compatibility-ANSI'!
10189
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   209
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   210
signal
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   211
    "raise a signal proceedable or nonproceedable (whichever is right).
15123
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   212
     ANSI compatibility."
10189
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   213
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   214
    ^ self raiseSignal
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   215
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   216
    "Created: / 20-11-2006 / 14:00:09 / cg"
15123
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   217
!
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   218
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   219
signalWith:messageText
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   220
    "raise a signal proceedable or nonproceedable (whichever is right).
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   221
     The argument is used as messageText.
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   222
     ANSI compatibility."
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   223
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   224
    <resource: #skipInDebuggersWalkBack>
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   225
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   226
    self raiseErrorString:messageText
10189
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   227
! !
2488a51f8d99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9992
diff changeset
   228
23029
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
   229
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   230
!GenericException class methodsFor:'accessing'!
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   231
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
errorString
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   233
    "#errorString is deprecated, use description instead"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
6859
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
   235
    <resource:#obsolete>
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
   236
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   237
    ^ self description
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
handlerBlock
19626
b6a5cd1d9e08 #DOCUMENTATION by mawalch
mawalch
parents: 19344
diff changeset
   241
    "Compatibility with Signal. Class based exceptions do not have a handler
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
     block. They redefine the #action method instead"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    ^ nil
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    "Created: / 23.7.1999 / 14:43:18 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    "Modified: / 24.7.1999 / 20:52:10 / stefan"
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   248
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   249
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   250
notifierString:aString
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   251
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   252
    NotifierString := aString
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   255
!GenericException class methodsFor:'backward compatibility'!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   256
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   257
abortingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   258
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   259
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   260
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   261
    ^ NoHandlerError abortingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   262
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   263
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   264
dumpingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   265
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   266
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   267
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   268
    ^ NoHandlerError dumpingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   269
!
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   270
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   271
emergencyHandler
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   272
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   273
    <resource: #obsolete>
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   274
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   275
    ^ NoHandlerError emergencyHandler.
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   276
!
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   277
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   278
emergencyHandler:aOneArgBlock
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   279
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   280
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   281
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   282
    ^ NoHandlerError emergencyHandler:aOneArgBlock
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   283
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   284
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   285
mailingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   286
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   287
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   288
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   289
    ^ NoHandlerError mailingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   290
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   291
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   292
notifyingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   293
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   294
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   295
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   296
    ^ NoHandlerError notifyingEmergencyHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   297
!
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   298
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   299
notifyingEmergencyHandlerForUserProcesses
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   300
    "WARNING: this method belongs to NoHandlerError, and has been moved there"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   301
    <resource: #obsolete>
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   302
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   303
    ^ NoHandlerError notifyingEmergencyHandlerForUserProcesses
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   304
! !
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   305
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   306
!GenericException class methodsFor:'child signal creation'!
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   307
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   308
newSignal
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   309
    "create a new signal, using the receiver as a prototype and
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   310
     setting the parent of the new signal to the receiver."
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   311
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   312
    ^ self newSignalMayProceed:self mayProceed
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   313
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   314
    "Created: / 23.7.1999 / 20:13:23 / stefan"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   315
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   316
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   317
newSignalMayProceed:mayProceedBoolean
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   318
    "create a new signal, using the receiver as a prototype and
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   319
     setting the parent of the new signal to the receiver."
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   320
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   321
    |sig|
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   322
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   323
    self isQuerySignal ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   324
	sig := QuerySignal basicNew.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   325
	mayProceedBoolean ifFalse:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   326
	    'Exception [warning]: nonProceedable queries do not make sense' infoPrintCR.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   327
	].
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   328
    ] ifFalse:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   329
	sig := Signal basicNew.
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   330
    ].
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   331
    ^ sig
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   332
	mayProceed:mayProceedBoolean;
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   333
	notifierString:NotifierString;
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   334
	parent:self
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   335
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   336
    "Created: / 23.7.1999 / 20:12:43 / stefan"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   337
! !
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   338
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   339
!GenericException class methodsFor:'converting'!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   340
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   341
, anExceptionHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   342
    "return a SignalSet with myself and anExceptionHandler"
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   343
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   344
    ^ SignalSet with:self with:anExceptionHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   345
! !
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   346
12085
3f2177e11a8a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12059
diff changeset
   347
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   348
!GenericException class methodsFor:'printing'!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   349
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   350
description
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   351
    "return the notifier string.
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   352
     If the notifier string starts with space, prepend
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   353
     the parents notifier string.
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   354
     Subclasses may redefine this method."
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   355
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   356
    |parent|
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   357
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   358
    NotifierString isNil ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   359
	^ self nameForDescription asString
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   360
    ].
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   361
    (NotifierString startsWith:Character space) ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   362
	(parent := self parent) notNil ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   363
	    ^ parent description, NotifierString
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   364
	].
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   365
    ].
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   366
    ^ NotifierString
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   367
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   368
    "
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   369
     Object errorSignal description
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   370
    "
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   371
13305
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   372
    "Created: / 23-07-1999 / 14:22:25 / stefan"
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   373
    "Modified: / 10-02-2011 / 12:29:07 / cg"
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   374
!
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   375
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   376
nameForDescription
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   377
    "if no notifierString is specified, this is used.
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   378
     Can be redfined to hide the namespace in subclasses"
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   379
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   380
    ^ self name
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   381
8734f4b61c44 added: #nameForDescription
Claus Gittinger <cg@exept.de>
parents: 13248
diff changeset
   382
    "Created: / 10-02-2011 / 12:28:51 / cg"
22641
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   383
!
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   384
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   385
printBadExceptionHandler:badExceptionHandler in:aContext
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   386
    "if anyone does:
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   387
        [ xxx ] on: foo do:[ ... ]
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   388
     with a bad foo (i.e. nil or not an Exception, ExceptionSet, Signal or HandlerSet
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   389
     this method is called to print a warning.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   390
     Usually, this happens when foo is misspelled or when porting code
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   391
     from Squeak, and there is no such exception-class in ST/X.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   392
     A typical situation is:
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   393
        [ xxx ] on: NetworkError do:[ ... ]
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   394
    "
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   395
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   396
    badExceptionHandler isNil ifTrue:[
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   397
        'Block [warning]: nil Exception in on:do:on:do:-context' errorPrintCR.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   398
        'Block [warning]: the sender is: ' infoPrint. aContext sender errorPrintCR.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   399
    ] ifFalse:[
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   400
        (badExceptionHandler isBehavior
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   401
        and:[badExceptionHandler isLoaded not]) ifTrue:[
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   402
            "If the exception class is still autoloaded,
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   403
             it does not accept our exception. Raising the exception would load the class"
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   404
            ^ nil
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   405
        ].
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   406
        'Block [warning]: non-Exception in on:do:on:do:-context' errorPrintCR.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   407
        'Block [warning]: the context is: ' infoPrint. aContext sender errorPrintCR.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   408
    ].
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   409
    aContext fullPrintString errorPrintCR.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   410
    self breakPoint:#cg.
b7e8988896dd #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22533
diff changeset
   411
    ^ nil.
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   412
! !
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
   413
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   414
!GenericException class methodsFor:'queries'!
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
accepts:aSignal
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
    "return true, if the receiver accepts the argument, aSignal.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
     (i.e. the receiver is aSignal or a parent of it). False otherwise."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
    |s|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
4527
2ddbe34bab87 Make error classes public.
Stefan Vogel <sv@exept.de>
parents: 4521
diff changeset
   422
    self == aSignal ifTrue:[^ true].
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
    aSignal isQuerySignal ifTrue:[^ false].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   425
    s := aSignal parent.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    [s notNil] whileTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   427
	self == s ifTrue:[^ true].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   428
	s := s parent
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    ^ false
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
    "Created: / 23.7.1999 / 14:00:47 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
9505
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   435
exception:anException isHandledIn:aContext
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   436
    "return true, if there is a handler for anException in the
4676
5d469e2da40a common code for isHandled
Claus Gittinger <cg@exept.de>
parents: 4632
diff changeset
   437
     contextChain starting with aContext."
5d469e2da40a common code for isHandled
Claus Gittinger <cg@exept.de>
parents: 4632
diff changeset
   438
9505
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   439
    ^ (self handlerContextForException:anException in:aContext) notNil
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   440
!
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   441
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   442
exceptionHandlerFor:anException in:aContext
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   443
    "answer the exceptionHandler-block for anException from aContext."
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   444
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   445
    |sel|
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   446
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   447
    sel := aContext selector.
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   448
    (sel == #'handle:from:do:'
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   449
     or:[sel == #'handle:do:']) ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   450
	^ aContext receiver
9505
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   451
    ].
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   452
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   453
    ^ nil
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   454
!
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   455
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   456
handlerContextForException:anException in:aContext
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   457
    "return a handlerContext for anException in the
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   458
     contextChain starting with aContext.
14085
aea63f5d809c changed comment: #handlerContextForException:in:
Stefan Vogel <sv@exept.de>
parents: 13803
diff changeset
   459
     Returns nil, if there is no handler."
9505
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   460
468b2b966bbe *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9272
diff changeset
   461
    |theContext ex1 con1|
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   462
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   463
    theContext := aContext findExceptional.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   464
    [theContext notNil] whileTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   465
	theContext isRaiseContext ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   466
	    "skip all the contexts between the raise and the sender of #handle:do"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   467
	    ex1 := theContext receiver.              "exception, that has been raised"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   468
	    con1 := ex1 handlerContext.              "the context of the #handle:do:"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   469
	    con1 notNil ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   470
		"handlerContext may be nil, if this is a default action"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   471
		theContext := con1.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   472
	    ].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   473
	    ex1 := con1 := nil.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   474
	] ifFalse:[ |r|
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   475
	    ((r := theContext receiver) notNil
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   476
	     and:[(r handlerForSignal:anException context:theContext originator:nil) notNil]
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   477
	    ) ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   478
		"found a handler context"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   479
		^ theContext
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   480
	    ].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   481
	].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   482
	theContext notNil ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   483
	    theContext := theContext findSpecialHandle:true raise:true.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   484
	].
4676
5d469e2da40a common code for isHandled
Claus Gittinger <cg@exept.de>
parents: 4632
diff changeset
   485
    ].
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   486
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   487
    ^ nil
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   488
!
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   489
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
handlerForSignal:signal context:theContext originator:originator
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
    "answer the handler block for the signal from originator.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
     The block is retrieved from aContext.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
     Answer nil if the signal is not handled"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
    (theContext selector ~~ #'handle:from:do:'
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
     or:[(theContext argAt:2) == originator]) ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   497
	(self == signal or:[self accepts:signal]) ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   498
	    ^ (theContext argAt:1) ? [nil]
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   499
	]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
    ^ nil
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
    "Created: / 25.7.1999 / 19:52:58 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
4544
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   507
handlerProtectedBlock:doBlock inContext:context
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   508
    "set the handlerProtectedBlock in context"
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   509
5590
e85d241c7a36 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5570
diff changeset
   510
    |sel|
e85d241c7a36 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5570
diff changeset
   511
e85d241c7a36 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5570
diff changeset
   512
    sel := context selector.
e85d241c7a36 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5570
diff changeset
   513
    sel == #handle:do: ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   514
	context argAt:2 put:doBlock.
5590
e85d241c7a36 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5570
diff changeset
   515
    ] ifFalse:[sel == #handle:from:do: ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   516
	context argAt:3 put:doBlock.
4544
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   517
    ]].
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   518
!
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
   519
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   520
handles:anException
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   521
    "return true, if the receiver handles the argument, anException.
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   522
     (i.e. the receiver is anExceptions signal or a parent of it)"
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   523
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   524
    |signal|
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   525
15123
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
   526
    signal := anException creator.
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   527
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   528
    self == signal ifTrue:[^ true].               "quick check"
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   529
    anException isNotification ifTrue:[^ false].  "speed up queries by not traversing the parent chain"
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   530
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   531
    [(signal := signal parent) notNil] whileTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   532
	self == signal ifTrue:[^ true].
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    ].
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
   534
    ^ false
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
23300
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   537
isAcceptedBy:aHandlerSignal
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   538
    "return true, if aHandlerSignal accepts the receiver."
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   539
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   540
    ^ aHandlerSignal accepts:self
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   541
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   542
    "Created: / 28-08-2018 / 10:56:58 / Claus Gittinger"
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   543
!
b0be6a74b979 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 23232
diff changeset
   544
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
isHandled
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
    "return true, if there is a handler for the receiver signal.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
     Raising an unhandled signal will usually lead into the debugger,
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
     but can be caught globally by setting Exceptions EmergencyHandler."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
4676
5d469e2da40a common code for isHandled
Claus Gittinger <cg@exept.de>
parents: 4632
diff changeset
   550
    ^ self exception:self isHandledIn:(thisContext sender).
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
    "Created: / 23.7.1999 / 14:03:50 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
isHandledIn:aContext
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   556
    "return true, if there is a handler for the receiver signal in the
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
     contextChain starting with aContext."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
4676
5d469e2da40a common code for isHandled
Claus Gittinger <cg@exept.de>
parents: 4632
diff changeset
   559
    ^ self exception:self isHandledIn:aContext
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
parent
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
    "return the parent Signal/Exception of myself.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
     Subclasses may redefine this to install themself as child of
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
     existing Signals."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
    self == GenericException ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   568
	^ nil
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
    ^ self superclass
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
    "Created: / 23.7.1999 / 14:01:29 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
    "Modified: / 23.7.1999 / 16:15:38 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   577
!GenericException class methodsFor:'raising'!
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
raise
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
    "raise a signal nonproceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   581
     The signals notifierString is used as messageText."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   583
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   584
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   585
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   586
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   587
	raiseIn:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   588
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   589
    "Created: / 23-07-1999 / 14:07:17 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   590
    "Modified: / 10-08-2010 / 09:30:42 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
19776
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   593
raiseAsQuery
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   594
    "utility to avoid code duplication.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   595
     raise the exception as a query. This means, that if it is unhandled,
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   596
     a default value is returned (i.e. an implicit resume).
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   597
     Return the handler's value (if there is one), or the default value, if not.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   598
     Invoking the handler is exactly the functionality of Signal>>raiseRequest,
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   599
     but we can do it faster here (avoiding the construction of an exception instance)."
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   600
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   601
    |con signal ret|
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   602
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   603
    self isQuerySignal ifFalse:[ self error:'this may only be used by queries' ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   604
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   605
    con := Context findFirstSpecialHandle:true raise:false.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   606
    [con notNil] whileTrue:[
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
   607
        (con selector == #answer:do:) ifTrue:[
19776
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   608
            signal := con receiver.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   609
            signal == self ifTrue:[
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   610
                ret := con argAt:1.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   611
                con := nil.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   612
                ^ ret
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   613
            ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   614
            signal isNil ifTrue:[
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   615
                self error:'nil receiver in #answer:do: - send'.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   616
            ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   617
            (signal accepts:self) ifTrue:[
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   618
                ret := con argAt:1.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   619
                con := nil.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   620
                ^ ret
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   621
            ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   622
        ] ifFalse:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
   623
            "ask the receiver of the #handle:do: or #on:do: or whatever- message for the handler.
19776
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   624
             nil is returned, if the signal is not accepted"
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   625
            |r|
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   626
            r := con receiver.     "receiver of #handle:do: or #on:do:"
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   627
            (r notNil and:[(r handlerForSignal:self
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   628
                                 context:con
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   629
                                 originator:thisContext sender homeReceiver) notNil]
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   630
            ) ifTrue:[
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   631
                "there is another handler block, maybe it will return the answer.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   632
                 Call it via raiseRequest"
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   633
                con := nil.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   634
                ^ here raiseRequest  "/ <- notice the here, to avoid recursion due
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   635
                                     "/ to redefined raiseRequest in Query
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   636
            ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   637
        ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   638
        con := con findSpecialHandle:true raise:false.
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   639
    ].
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   640
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   641
    "/ no handler found - return the default value
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   642
    ^ self defaultAnswer
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   643
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   644
    "Modified: / 15-06-1998 / 21:27:37 / cg"
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   645
    "Modified: / 11-03-2015 / 11:26:45 / sr"
22103
4345a87555d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22074
diff changeset
   646
    "Modified: / 25-07-2017 / 16:45:41 / stefan"
19776
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   647
!
31fa179f48bf #FEATURE by sr
sr
parents: 19717
diff changeset
   648
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
raiseErrorString:aString
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
    "raise a signal nonproceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   651
     The argument is used as messageText."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   653
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   654
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   655
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   656
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   657
	raiseErrorString:aString
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   658
	in:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   659
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   660
    "Created: / 23-07-1999 / 14:07:33 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   661
    "Modified: / 10-08-2010 / 09:34:37 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
5684
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   664
raiseErrorString:aString in:aContext
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   665
    "raise a signal nonproceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   666
     The argument is used as messageText."
5684
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   667
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   668
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   669
    <resource: #skipInDebuggersWalkBack>
5684
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   670
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   671
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   672
	raiseErrorString:aString in:aContext
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   673
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   674
    "Created: / 23-07-1999 / 14:07:33 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   675
    "Modified: / 10-08-2010 / 09:35:37 / cg"
5684
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   676
!
53cc1d686f03 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5680
diff changeset
   677
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   678
raiseFrom:something
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
    "raise a signal nonproceedable.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
     The argument, something is passed both as parameter and originator."
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   681
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   682
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   683
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   684
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   685
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   686
	suspendedContext:thisContext sender parameter:something originator:something)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   687
	raise
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
    "Modified: / 2.5.1996 / 16:36:38 / cg"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
    "Modified: / 5.3.1998 / 16:49:55 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
    "Created: / 23.7.1999 / 14:07:59 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
14241
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   694
raiseIn:aContext
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   695
    "raise a signal nonproceedable.
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   696
     The signals notifierString is used as messageText."
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   697
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   698
    <context: #return>
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   699
    <resource: #skipInDebuggersWalkBack>
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   700
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   701
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   702
	raiseIn:aContext
14241
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   703
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   704
    "Created: / 27-01-2011 / 17:28:53 / cg"
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   705
!
a00234c7342f added: #raiseIn:
Stefan Vogel <sv@exept.de>
parents: 14085
diff changeset
   706
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
raiseRequest
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
    "raise a signal proceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   709
     The signals notifierString is used as messageText."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   711
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   712
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   713
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   714
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   715
	raiseRequestIn:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   716
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   717
    "Created: / 23-07-1999 / 14:08:24 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   718
    "Modified: / 10-08-2010 / 09:37:06 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
4758
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   721
raiseRequestErrorString:aString
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   722
    "raise a signal proceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   723
     The argument, aString is used as messageText."
4758
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   724
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   725
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   726
    <resource: #skipInDebuggersWalkBack>
4758
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   727
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   728
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   729
	raiseRequestErrorString:aString in:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   730
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   731
    "Modified: / 10-08-2010 / 09:40:38 / cg"
4758
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   732
!
91b5a25f29c5 added #raiseRequestErrorString
Claus Gittinger <cg@exept.de>
parents: 4676
diff changeset
   733
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   734
raiseRequestFrom:something
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
    "raise a signal proceedable.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
     The argument, something is passed both as parameter and originator."
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   737
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   738
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   739
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   740
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   741
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   742
	suspendedContext:thisContext sender parameter:something originator:something)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   743
	raiseRequest
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
    "Modified: / 2.5.1996 / 16:36:38 / cg"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
    "Modified: / 5.3.1998 / 16:52:46 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
    "Created: / 23.7.1999 / 14:08:36 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
13248
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   750
raiseRequestIn:aContext
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   751
    "raise a signal proceedable.
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   752
     The signals notifierString is used as messageText."
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   753
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   754
    <context: #return>
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   755
    <resource: #skipInDebuggersWalkBack>
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   756
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   757
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   758
	raiseRequestIn:aContext
13248
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   759
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   760
    "Created: / 27-01-2011 / 17:28:53 / cg"
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   761
!
c07c080d6033 added: #raiseRequestIn:
Claus Gittinger <cg@exept.de>
parents: 13132
diff changeset
   762
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   763
raiseRequestWith:aParameter
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   764
    "raise a signal proceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   765
     The signals notifierString is used as messageText."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   766
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   767
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   768
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   769
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   770
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   771
	raiseRequestWith:aParameter in:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   772
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   773
    "Created: / 23-07-1999 / 14:08:48 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   774
    "Modified: / 10-08-2010 / 09:57:14 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   776
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   777
raiseRequestWith:aParameter errorString:aString
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   778
    "raise a signal proceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   779
     The argument, aString is used as messageText."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   780
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   781
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   782
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   783
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   784
    ^ self basicNew
22360
b8d77dd37262 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22103
diff changeset
   785
        raiseRequestWith:aParameter 
b8d77dd37262 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22103
diff changeset
   786
        errorString:aString 
b8d77dd37262 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22103
diff changeset
   787
        in:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   788
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   789
    "Created: / 23-07-1999 / 14:08:57 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   790
    "Modified: / 10-08-2010 / 09:56:55 / cg"
22360
b8d77dd37262 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22103
diff changeset
   791
    "Modified (format): / 17-11-2017 / 18:36:18 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   792
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   793
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   794
raiseRequestWith:aParameter errorString:aString in:aContext
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   795
    "raise a signal proceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   796
     The argument, aString is used as messageText.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
     The additional context is passed as the context responsible for the raise,
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   798
     allowing a raise to mimicri the exception happened somewhere else."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   800
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   801
    <resource: #skipInDebuggersWalkBack>
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   802
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   803
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   804
	raiseRequestWith:aParameter errorString:aString in:aContext
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   805
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   806
    "Created: / 23-07-1999 / 14:09:07 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   807
    "Modified: / 10-08-2010 / 09:56:36 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   808
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   809
5259
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   810
raiseRequestWith:aParameter in:aContext
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   811
    "raise a signal proceedable.
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   812
     The additional context is passed as the context responsible for the raise,
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   813
     allowing a raise to mimicri the exception happened somewhere else."
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   814
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   815
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   816
    <resource: #skipInDebuggersWalkBack>
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   817
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   818
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   819
	raiseRequestWith:aParameter in:aContext
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   820
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   821
    "Modified: / 10-08-2010 / 09:56:12 / cg"
5259
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   822
!
cda0ce95054d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5197
diff changeset
   823
6174
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   824
raiseSignal
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   825
    "raise a signal (proceedable or not, whatever the proceedability is).
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   826
     The signals notifierString is used as messageText."
6174
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   827
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   828
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   829
    <resource: #skipInDebuggersWalkBack>
6174
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   830
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   831
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   832
	suspendedContext:thisContext sender)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   833
	raiseSignal
6174
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   834
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   835
    "Modified: / 10.11.2001 / 15:13:34 / cg"
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   836
!
4dd6c093ab6d +raiseSignal
Claus Gittinger <cg@exept.de>
parents: 6158
diff changeset
   837
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   838
raiseSignal:errorMessage
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   839
    "ANSI: raise a signal (proceedable or not, whatever the proceedability is).
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   840
     The argument, errorMessage is used as messageText."
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   841
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   842
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   843
    <resource: #skipInDebuggersWalkBack>
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   844
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   845
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   846
	suspendedContext:thisContext sender errorString:errorMessage)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   847
	raiseSignal.
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   848
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   849
    "Modified: / 07-08-2004 / 19:24:00 / stefan"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   850
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   851
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   852
raiseSignal:errorMessage with:aParameter
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   853
    "ANSI: raise a signal (proceedable or not, whatever the proceedability is).
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   854
     The argument, errorMessage is used as messageText."
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   855
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   856
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   857
    <resource: #skipInDebuggersWalkBack>
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   858
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   859
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   860
	suspendedContext:thisContext sender parameter:aParameter errorString:errorMessage)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   861
	raiseSignal.
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   862
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   863
    "Modified: / 07-08-2004 / 19:10:40 / stefan"
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   864
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   865
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   866
raiseSignalErrorString:aString
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   867
    "raise a signal (proceedable or not, whatever the proceedability is).
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   868
     The argument, aString is used as messageText."
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   869
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   870
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   871
    <resource: #skipInDebuggersWalkBack>
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   872
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   873
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   874
	suspendedContext:thisContext sender errorString:aString)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   875
	raiseSignal.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   876
!
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   877
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   878
raiseSignalWith:aParameter
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   879
    "raise a signal (proceedable or not, whatever the proceedability is).
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   880
     The argument, aParameter is passed as parameter."
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   881
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   882
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   883
    <resource: #skipInDebuggersWalkBack>
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   884
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   885
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   886
	suspendedContext:thisContext sender parameter:aParameter)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   887
	raiseSignal.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   888
!
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   889
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   890
raiseSignalWith:aParameter errorString:aString
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   891
    "raise a signal (proceedable or not, whatever the proceedability is).
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   892
     The argument, aString is used as messageText,
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   893
     aParameter is passed as exception parameter."
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   894
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   895
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   896
    <resource: #skipInDebuggersWalkBack>
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   897
8731
03a4fd5c394d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8691
diff changeset
   898
    ^ (self newException
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   899
	suspendedContext:thisContext sender parameter:aParameter errorString:aString)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   900
	raiseSignal.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   901
!
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   902
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   903
raiseWith:aParameter
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   904
    "raise a signal nonproceedable.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   905
     The argument, aParameter is passed as parameter."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   906
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   907
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   908
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   909
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   910
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   911
	raiseWith:aParameter in:thisContext sender
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   912
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   913
    "Created: / 23-07-1999 / 14:09:27 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   914
    "Modified: / 10-08-2010 / 09:51:11 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   915
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   916
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   917
raiseWith:aParameter errorString:aString
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   918
    "raise a signal nonproceedable.
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   919
     The argument, aString is used as messageText,
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
   920
     aParameter is passed as exception parameter."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   921
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   922
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   923
    <resource: #skipInDebuggersWalkBack>
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
   924
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   925
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   926
	  raiseWith:aParameter errorString:aString in:thisContext sender.
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   927
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   928
    "Created: / 23-07-1999 / 14:09:36 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   929
    "Modified: / 10-08-2010 / 09:52:59 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   930
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   931
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   932
raiseWith:aParameter errorString:aString in:aContext
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   933
    "raise a signal nonproceedable.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
   934
     The argument, aString is used as messageText, aParameter is passed
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   935
     as exception parameter.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   936
     The additional context is passed as the context responsible for the raise,
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   937
     allowing a raise to mimicri the exception happened somewhere else."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   938
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   939
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   940
    <resource: #skipInDebuggersWalkBack>
8733
953001c5c40e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8731
diff changeset
   941
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   942
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   943
	  raiseWith:aParameter errorString:aString in:aContext.
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   944
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   945
    "Created: / 23-07-1999 / 14:09:46 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   946
    "Modified: / 10-08-2010 / 09:52:10 / cg"
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   947
!
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   948
10753
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   949
raiseWith:aParameter in:aContext
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   950
    "raise a signal nonproceedable.
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   951
     The argument, aParameter is passed as exception parameter.
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   952
     The additional context is passed as the context responsible for the raise,
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   953
     allowing a raise to mimicri the exception happened somewhere else."
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   954
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   955
    <context: #return>
11026
677692730f7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10777
diff changeset
   956
    <resource: #skipInDebuggersWalkBack>
10753
880fb25e1d3f raising
Claus Gittinger <cg@exept.de>
parents: 10737
diff changeset
   957
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   958
    ^ self basicNew
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
   959
	raiseWith:aParameter in:aContext
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   960
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   961
    "Modified: / 10-08-2010 / 09:52:38 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   962
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   963
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
   964
!GenericException class methodsFor:'save evaluation'!
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   965
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   966
catch:aBlock
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   967
    "evaluate the argument, aBlock.
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
   968
     If the receiver-exception is raised during evaluation, abort
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   969
     the evaluation and return true; otherwise return false.
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   970
     This is the catch & throw mechanism found in other languages,
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
   971
     where the returned value indicates if an exception occurred."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   972
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   973
    |raiseOccurred|
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   974
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   975
    raiseOccurred := false.
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   976
    self handle:[:ex | raiseOccurred := true. ex return] do:aBlock.
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   977
    ^ raiseOccurred
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   978
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   979
    "
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   980
     Object messageNotUnderstoodSignal catch:[
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
   981
        123 size open
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   982
     ]
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
   983
    "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   984
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
   985
    "Created: / 23-07-1999 / 14:06:01 / stefan"
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
   986
    "Modified: / 07-12-2006 / 17:05:17 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   987
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   988
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
   989
deferAfter:aBlock
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
   990
    "evaluate the argument, aBlock.
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
   991
     Ignore the receiver-exception during evaluation - i.e. simply continue,
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
   992
     but remember if the signal was raised.
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
   993
     After the block evaluation, finally raise the signal - if it was raised in the block.
23232
d46d79fcfddf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23029
diff changeset
   994
     If the signal is raised multiple times, only the first raise's parameter is remembered,
d46d79fcfddf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23029
diff changeset
   995
     and only a single raise is performed after the block's evaluation.
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
   996
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   997
     Deferring makes sense for some signals, such as UserInterrupt or AbortSignal,
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
   998
     which must occasionally be delayed temporarily until a save place is reached
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
   999
     (especially when packages are sent across a communication channel, and you don't want
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1000
      partial packages to be generated by user interruptions)."
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1001
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1002
    |caughtException result|
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1003
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1004
    self handle:[:ex |
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1005
        caughtException isNil ifTrue:[
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1006
            caughtException := ex.
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1007
        ].
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1008
        ex proceedWith:nil
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1009
    ] do:[
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1010
        result := aBlock value.
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1011
    ].
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1012
    caughtException notNil ifTrue:[
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1013
        caughtException suspendedContext:thisContext.
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1014
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1015
        "/ the exception was raised during the execution of aBlock above.
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1016
        "/ Raise it now (delayed).
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1017
        caughtException raiseSignal.
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1018
    ].
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1019
    ^ result
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1020
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  1021
    "
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  1022
     UserInterrupt deferAfter:[
20800
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1023
         Transcript showCR:'1 - now raising, but will be deferred.'.
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1024
         UserInterrupt raiseRequestWith:'hello'.
1682d2103d21 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20699
diff changeset
  1025
         Transcript showCR:'2 - after the raise, deferred exception will be handled soon.'.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  1026
     ].
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  1027
     Transcript showCR:'3 - here after the protected block.'.
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  1028
    "
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1029
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1030
    "Modified: / 07-12-2006 / 17:05:28 / cg"
23232
d46d79fcfddf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23029
diff changeset
  1031
    "Modified (comment): / 24-07-2018 / 22:54:35 / Claus Gittinger"
6396
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1032
!
74d5b0b588a6 added deferAfter: - defer exceptions until some later time
Claus Gittinger <cg@exept.de>
parents: 6364
diff changeset
  1033
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1034
evaluate:aBlock ifRaised:exceptionValue
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1035
    "evaluate the argument, aBlock and return its value.
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1036
     If the receiver-signal is raised during evaluation, abort
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1037
     the evaluation and return the value from exceptionValue.
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1038
     This is similar to the catch & throw mechanism found in other languages"
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1039
22495
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1040
    ^ self handle:exceptionValue do:aBlock.
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1041
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1042
    "
22495
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1043
     MessageNotUnderstood
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1044
        evaluate:[ 123 size open ]
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1045
        ifRaised:345
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1046
    "
22495
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1047
3f54eb4abc4e #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22360
diff changeset
  1048
    "Modified (comment): / 12-01-2018 / 17:48:24 / stefan"
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1049
!
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  1050
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1051
handle:handleBlock do:aBlock
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1052
    "evaluate the argument, aBlock.
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1053
     If the receiver-exception is raised during evaluation,
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1054
     evaluate the handleBlock passing it an Exception argument.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1055
     The handler may decide how to react to the signal by sending
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1056
     a corresponding message to the exception (see there).
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1057
     If the signal is not raised, return the value of evaluating
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1058
     aBlock."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1059
4548
8349abc6b796 Add #handlerProtectedBlock:inContext
Stefan Vogel <sv@exept.de>
parents: 4544
diff changeset
  1060
    <context: #return>
4488
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  1061
    <exception: #handle>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  1062
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1063
    "/ thisContext markForHandle. -- same as above pragma
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1064
    ^ aBlock value  "the real logic is in Exception>>doRaise"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1065
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1066
    "
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1067
     Object messageNotUnderstoodSignal handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1068
	'oops' printNL.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1069
	ex return
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1070
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1071
	123 size open
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1072
     ]
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1073
     "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1074
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1075
     "
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1076
      |num|
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1077
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1078
      num := 0.
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1079
      Number divisionByZeroSignal handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1080
	  'oops' printNL.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1081
	  ex return
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1082
      ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1083
	  123 / num
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1084
      ]
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1085
     "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1086
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1087
    "Created: / 23-07-1999 / 14:06:13 / stefan"
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1088
    "Modified: / 25-07-1999 / 19:44:05 / stefan"
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1089
    "Modified: / 07-12-2006 / 17:05:30 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1090
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1091
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1092
handle:handleBlock from:anObject do:aBlock
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1093
    "evaluate the argument, aBlock.
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1094
     If the receiver-exception is raised during evaluation,
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1095
     and the exception originated from anObject,
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1096
     evaluate the handleBlock passing it an Exception argument.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1097
     The handler may decide how to react to the signal by sending
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1098
     a corresponding message to the exception (see there).
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1099
     If the signal is not raised, return the value of evaluating
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1100
     aBlock."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1101
4548
8349abc6b796 Add #handlerProtectedBlock:inContext
Stefan Vogel <sv@exept.de>
parents: 4544
diff changeset
  1102
    <context: #return>
4488
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  1103
    <exception: #handle>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  1104
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1105
    "/ thisContext markForHandle. -- same as above pragma
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1106
    ^ aBlock value  "the real logic is in Exception>>doRaise"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1107
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1108
    "
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1109
     the first open will be caught; the second not:
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1110
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1111
     |o1 o2|
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1112
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1113
     o1 := 123.
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1114
     o2 := nil.
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1115
     Object messageNotUnderstoodSignal
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1116
	 handle:
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1117
		[:ex |
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1118
		    'oops' printNL.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1119
		    ex proceed
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1120
		]
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1121
	 from:o1
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1122
	 do:
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1123
		[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1124
		    o1 open.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1125
		    o2 open
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1126
		]
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4488
diff changeset
  1127
    "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1128
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1129
    "Created: / 23-07-1999 / 14:06:26 / stefan"
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1130
    "Modified: / 25-07-1999 / 19:44:13 / stefan"
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1131
    "Modified: / 07-12-2006 / 17:05:33 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1132
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1133
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1134
ignoreIn:aBlock
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1135
    "evaluate the argument, aBlock.
21856
8a95e50f7005 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21663
diff changeset
  1136
     Ignore the receiver-exception during evaluation - i.e. simply continue with the default resume value.
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1137
     This makes only sense for some signals, such as UserInterrupt
21567
94a058b905a5 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21038
diff changeset
  1138
     or AbortOperationRequest, because continuing after an exception without any cleanup
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1139
     often leads to followup-errors."
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1140
21856
8a95e50f7005 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21663
diff changeset
  1141
    ^ self handle:[:ex | ex proceed] do:aBlock.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1142
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1143
    "
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1144
     Object messageNotUnderstoodSignal ignoreIn:[
21567
94a058b905a5 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21038
diff changeset
  1145
        123 size open
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1146
     ]
21856
8a95e50f7005 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21663
diff changeset
  1147
8a95e50f7005 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21663
diff changeset
  1148
     DomainError ignoreIn:[ -1.0 log10 ]
4496
28f3f57dbe60 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4492
diff changeset
  1149
    "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1150
10239
a4c894b1b8f1 comment
Claus Gittinger <cg@exept.de>
parents: 10189
diff changeset
  1151
    "Created: / 23-07-1999 / 14:06:40 / stefan"
21567
94a058b905a5 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21038
diff changeset
  1152
    "Modified (comment): / 24-02-2017 / 11:15:44 / stefan"
21856
8a95e50f7005 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21663
diff changeset
  1153
    "Modified (comment): / 20-06-2017 / 13:35:03 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1154
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1155
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1156
!GenericException class methodsFor:'testing'!
6200
65f0631e5221 added #isControlInterrupt
Claus Gittinger <cg@exept.de>
parents: 6198
diff changeset
  1157
21038
700b08276e03 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 20800
diff changeset
  1158
isAbstract
700b08276e03 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 20800
diff changeset
  1159
    ^ self == GenericException
700b08276e03 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 20800
diff changeset
  1160
!
700b08276e03 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 20800
diff changeset
  1161
6200
65f0631e5221 added #isControlInterrupt
Claus Gittinger <cg@exept.de>
parents: 6198
diff changeset
  1162
isControlInterrupt
65f0631e5221 added #isControlInterrupt
Claus Gittinger <cg@exept.de>
parents: 6198
diff changeset
  1163
    ^ false
65f0631e5221 added #isControlInterrupt
Claus Gittinger <cg@exept.de>
parents: 6198
diff changeset
  1164
65f0631e5221 added #isControlInterrupt
Claus Gittinger <cg@exept.de>
parents: 6198
diff changeset
  1165
    "Created: / 16.11.2001 / 16:11:54 / cg"
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1166
!
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1167
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1168
isExceptionCreator
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1169
    "return true, if the receiver can create exceptions,
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1170
     this includes #raise, #raiseRequest as well as the behavior of
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1171
     an exception handler, such as the #accepts: and #handles: messages"
8254
73b6109ab982 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 8238
diff changeset
  1172
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1173
    ^ true
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1174
!
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1175
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1176
isExceptionHandler
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1177
    "return true, if the receiver responds to the exception handler protocol,
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1178
     especially to the #accepts: and #handles: messages"
8254
73b6109ab982 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 8238
diff changeset
  1179
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1180
    ^ true
8254
73b6109ab982 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 8238
diff changeset
  1181
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1182
    "Created: / 23.7.1999 / 13:49:59 / stefan"
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1183
!
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1184
20436
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1185
isProgramError
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1186
    "redefined in all exceptions which are programmer's errors,
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1187
     and which should probably not be ignored.
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1188
     I.e. a global error handler should reject and let a debugger get control."
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1189
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1190
    ^ false
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1191
!
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  1192
22068
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1193
isQuery
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1194
    "return true, if this is a query - always return false here"
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1195
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1196
    ^ false
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1197
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1198
    "Created: / 21-07-2017 / 00:53:29 / cg"
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1199
!
f1d1d5384374 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22067
diff changeset
  1200
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1201
isQuerySignal
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1202
    "return true, if this is a querySignal - always return false here"
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1203
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1204
    ^ false
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1205
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1206
    "Created: / 23.7.1999 / 13:50:16 / stefan"
5058
42e732f3497c added another useful handler
Claus Gittinger <cg@exept.de>
parents: 4936
diff changeset
  1207
!
42e732f3497c added another useful handler
Claus Gittinger <cg@exept.de>
parents: 4936
diff changeset
  1208
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1209
mayProceed
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1210
    "return true, if the exception handler is allowed to proceed
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
  1211
     the execution where the exception occurred.
8390
d78cd984f201 return values for #proceedWith:
Stefan Vogel <sv@exept.de>
parents: 8313
diff changeset
  1212
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1213
     Subclasses may redefine this."
5058
42e732f3497c added another useful handler
Claus Gittinger <cg@exept.de>
parents: 4936
diff changeset
  1214
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1215
    ^ true
5058
42e732f3497c added another useful handler
Claus Gittinger <cg@exept.de>
parents: 4936
diff changeset
  1216
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1217
    "Modified: / 23.7.1999 / 14:50:11 / stefan"
4936
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1218
! !
bc943fef0d96 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4758
diff changeset
  1219
14962
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1220
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 6945
diff changeset
  1221
!GenericException methodsFor:'Compatibility-ANSI'!
5680
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  1222
5933
af2939dac9bf added #pass for compatibility
Claus Gittinger <cg@exept.de>
parents: 5927
diff changeset
  1223
pass
16157
f4cb5106557f class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16148
diff changeset
  1224
    "same as reject - for ANSI compatibility"
f4cb5106557f class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16148
diff changeset
  1225
5933
af2939dac9bf added #pass for compatibility
Claus Gittinger <cg@exept.de>
parents: 5927
diff changeset
  1226
    ^ self reject
af2939dac9bf added #pass for compatibility
Claus Gittinger <cg@exept.de>
parents: 5927
diff changeset
  1227
!
af2939dac9bf added #pass for compatibility
Claus Gittinger <cg@exept.de>
parents: 5927
diff changeset
  1228
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1229
retry
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1230
    "same as #restart - ANSI & VW compatibility"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1231
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1232
    self restart
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1233
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1234
    "Created: / 7.9.2001 / 13:31:02 / cg"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1235
!
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1236
7674
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1237
retryUsing: alternativeBlock
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1238
    "Abort an exception handler and evaluate a new block in place of the handler's protected block."
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1239
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1240
    "/ self mustBeHandled ifFalse: [ ^self ].
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1241
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1242
    ^ self restartDo:alternativeBlock
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1243
!
73acec69e93c compatibility: +retryUsing:
Claus Gittinger <cg@exept.de>
parents: 7631
diff changeset
  1244
15123
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1245
signalWith:messageTextArg
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1246
    "raise a signal proceedable or nonproceedable (whichever is right).
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1247
     The argument is used as messageText.
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1248
     ANSI compatibility."
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1249
aa1c95f7808c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15101
diff changeset
  1250
    self messageText:messageTextArg.
8677
d09ee4c45c17 categories and comments
Stefan Vogel <sv@exept.de>
parents: 8617
diff changeset
  1251
    ^ self raise
5697
ce78c7d9ddbd raiseSignal / raiseSignal: / raiseSignal:with:
Claus Gittinger <cg@exept.de>
parents: 5684
diff changeset
  1252
! !
5680
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  1253
12559
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1254
!GenericException methodsFor:'Compatibility-Dolphin'!
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1255
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1256
stackTrace:numberOfFrames
12561
3ddfe512ada9 changed: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12560
diff changeset
  1257
    "return a backtrace information string"
12559
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1258
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1259
    |con|
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1260
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1261
    con := suspendedContext.
12560
779e4c0930fb changed: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12559
diff changeset
  1262
    ^ ((1 to:numberOfFrames)
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1263
	collect:[:idx |
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1264
	    |s|
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1265
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1266
	    s := con printString.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1267
	    con := con sender.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1268
	    s
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1269
	]) asStringWith:Character cr.
12559
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1270
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1271
    "
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1272
     Error handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1273
	(ex stackTrace:20) inspect.
12559
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1274
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1275
	self error
12559
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1276
     ].
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1277
    "
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1278
! !
3b0de1014cd7 added: #stackTrace:
Claus Gittinger <cg@exept.de>
parents: 12156
diff changeset
  1279
12572
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1280
!GenericException methodsFor:'Compatibility-Squeak'!
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1281
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1282
signalerContext
20699
70475d02b6d3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20436
diff changeset
  1283
    "return the context in which the raise occurred.
70475d02b6d3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20436
diff changeset
  1284
     Same as suspendedContext, for squeak compatibility"
70475d02b6d3 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20436
diff changeset
  1285
     
12572
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1286
    ^ self suspendedContext
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1287
! !
5357a310199b added: #signalerContext
Claus Gittinger <cg@exept.de>
parents: 12561
diff changeset
  1288
13055
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1289
!GenericException methodsFor:'Compatibility-V''Age'!
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1290
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1291
exitWith:value
16224
2194bc886b30 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16190
diff changeset
  1292
    "return with a value.
2194bc886b30 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16190
diff changeset
  1293
     V'AGE compatibility."
2194bc886b30 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16190
diff changeset
  1294
13055
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1295
    ^ self return:value
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1296
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1297
    "Created: / 28-08-2010 / 14:43:23 / cg"
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1298
! !
e1b9a8ca766e added: #exitWith:
Claus Gittinger <cg@exept.de>
parents: 13009
diff changeset
  1299
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1300
!GenericException methodsFor:'accessing'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1301
10777
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1302
catchInDebugger
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1303
    "if set, the debugger will handle this signal in its event loop and will close itself
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1304
     without asking for close-confirmation.
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1305
     This allows for debugged processes to be terminated without a user confirmation dialog
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1306
     (for now, this is used in expecco's hard-terminate function to shut down any open debuggers
11710
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1307
      together with the test-process).
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1308
     Dummy here"
10777
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1309
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1310
    ^ false
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1311
!
fcdf87d883f7 +catchInDebugger
ca
parents: 10753
diff changeset
  1312
11710
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1313
catchInDebugger:aBoolean
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1314
    "if set, the debugger will handle this signal in its event loop and will close itself
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1315
     without asking for close-confirmation.
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1316
     This allows for debugged processes to be terminated without a user confirmation dialog
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1317
     (for now, this is used in expecco's hard-terminate function to shut down any open debuggers
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1318
      together with the test-process).
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1319
     Dummy here"
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1320
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1321
    "/ ignored
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1322
!
8e6d1d366d30 added dummy catchInDebugger
Claus Gittinger <cg@exept.de>
parents: 11640
diff changeset
  1323
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1324
creator
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1325
    "return the creator of the exception.
16500
f23b937921c5 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16248
diff changeset
  1326
     For class based exceptions, that is the exception class;
f23b937921c5 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16248
diff changeset
  1327
     for signals, that is the signal itself.
18727
a780e761a158 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17293
diff changeset
  1328
     This used to be called 'signal' in earlier versions,
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
  1329
     but due to the conflict with VSE, Squeak and others,
18727
a780e761a158 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17293
diff changeset
  1330
     where 'signal' means 'raise', 'signal' was obsoleted by this method."
15336
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  1331
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  1332
    signal notNil ifTrue:[^ signal] ifFalse:[^ self class]
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1333
!
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1334
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1335
errorString
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1336
    "return the errorString passsed with the signal raise
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1337
     (or nil, if there was none).
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1338
     #errorString is the same as description,
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1339
     which returns the messageText plain or appended or prepended to the
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1340
     classes description string."
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1341
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1342
    ^ self description
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1343
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1344
    "Modified: / 12.3.1998 / 15:13:28 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1345
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1346
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1347
errorString:aString
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  1348
    "set the messageText.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  1349
     If it starts with a space, the signals messageText is prepended,
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1350
     if it ends with a space, it is appended.
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1351
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1352
     #errorString: does the same as messageText:,
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1353
     but should be used for errors and exceptions, 
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  1354
     whereas messageText: should be used for notifications and queries"
6859
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
  1355
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  1356
    messageText := aString
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1357
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1358
    "Created: / 5.3.1998 / 16:45:29 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1359
    "Modified: / 12.3.1998 / 15:30:45 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1360
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1361
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1362
handler
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1363
    "return the exception handler (Signal or SignalSet or ExceptionHandlerSet or Exception)
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1364
     that handles the exception.
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1365
     This is only valid during handler evaluation, and answers
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1366
     the object which accepted the actual exception."
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1367
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1368
    handlerContext isNil ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1369
	^ nil.
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1370
    ].
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1371
    ^ handlerContext receiver exceptionHandlerFor:self in:handlerContext.
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1372
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1373
    "
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1374
      [
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1375
	  2 // 0
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1376
      ] on:Error do:[:ex| ex handler inspect]
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1377
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1378
      [
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1379
	  2 // 0
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1380
      ] on:ArithmeticError, Error do:[:ex| ex handler inspect]
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1381
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1382
      [
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1383
	  2 // 0
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1384
      ] on:MessageNotUnderstood do:[:ex| ex handler inspect]
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1385
	on:Error do:[:ex| ex handler inspect]
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1386
    "
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1387
!
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1388
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1389
handlerContext
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1390
    "return the context of the handler"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1391
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1392
    ^ handlerContext
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1393
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1394
4483
55530226d243 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4481
diff changeset
  1395
handlingException
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1396
    <resource: #obsolete>
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  1397
    ^ self handler
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1398
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1399
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1400
isResumable
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1401
    "return true, if the exception is resumable"
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1402
16248
933761e57891 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 16224
diff changeset
  1403
    ^ self mayProceed
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1404
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1405
    "Modified: / 2.3.1998 / 12:20:43 / stefan"
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1406
!
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1407
7597
db72d9d640bc +isResumable: (VW compat.)
Claus Gittinger <cg@exept.de>
parents: 7560
diff changeset
  1408
isResumable:aBoolean
db72d9d640bc +isResumable: (VW compat.)
Claus Gittinger <cg@exept.de>
parents: 7560
diff changeset
  1409
    proceedable := aBoolean
db72d9d640bc +isResumable: (VW compat.)
Claus Gittinger <cg@exept.de>
parents: 7560
diff changeset
  1410
!
db72d9d640bc +isResumable: (VW compat.)
Claus Gittinger <cg@exept.de>
parents: 7560
diff changeset
  1411
5950
5757b9ba4ff2 added #messageText
Claus Gittinger <cg@exept.de>
parents: 5939
diff changeset
  1412
messageText
7808
824d0e2a3f5c fix spelling error
Stefan Vogel <sv@exept.de>
parents: 7753
diff changeset
  1413
    "return the explicit given messageText - nil, if signaler did not provide one."
5950
5757b9ba4ff2 added #messageText
Claus Gittinger <cg@exept.de>
parents: 5939
diff changeset
  1414
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  1415
    ^ messageText
5950
5757b9ba4ff2 added #messageText
Claus Gittinger <cg@exept.de>
parents: 5939
diff changeset
  1416
!
5757b9ba4ff2 added #messageText
Claus Gittinger <cg@exept.de>
parents: 5939
diff changeset
  1417
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1418
messageText:aString
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1419
    "set the messageText.
15584
64f0803fe869 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15403
diff changeset
  1420
     If it starts with a space, the signal's original messageText is prepended,
22533
b809fa3426cc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22532
diff changeset
  1421
     if it ends with a space, it is appended.
b809fa3426cc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22532
diff changeset
  1422
b809fa3426cc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22532
diff changeset
  1423
     messageText: does the same as errorString:,
b809fa3426cc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22532
diff changeset
  1424
     but should be used for notifications and queries, 
b809fa3426cc #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22532
diff changeset
  1425
     whereas errorString: should be used for errors and exceptions"
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1426
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  1427
    messageText := aString
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1428
15584
64f0803fe869 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15403
diff changeset
  1429
    "Created: / 05-03-1998 / 16:45:29 / stefan"
64f0803fe869 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15403
diff changeset
  1430
    "Modified: / 12-03-1998 / 15:30:45 / stefan"
64f0803fe869 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15403
diff changeset
  1431
    "Modified (comment): / 30-07-2013 / 21:04:43 / cg"
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1432
!
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1433
14962
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1434
originalSignal
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1435
    "return the signal/exception which was originally raised.
20417
9442c5afd845 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20261
diff changeset
  1436
     For noHandler, that is my unhandled signal; for others, that's the exception itself."
14962
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1437
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1438
    ^ self.
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1439
!
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  1440
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1441
originator
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1442
    "return the originator passsed with the signal raise
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1443
     (or nil, if there was none)"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1444
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1445
    ^ originator
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1446
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1447
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1448
originator:anObject
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1449
    "set the originator"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1450
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1451
    originator := anObject
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1452
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1453
    "Created: / 5.3.1998 / 16:34:56 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1454
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1455
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1456
parameter
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1457
    "return the parameter passsed with the signal raise
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1458
     (or nil, if there was none)"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1459
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1460
    ^ parameter
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1461
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1462
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1463
parameter:anObject
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1464
    "set the parameter of the exception"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1465
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1466
    parameter := anObject
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1467
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1468
    "Created: / 5.3.1998 / 16:34:22 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1469
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1470
6036
6b37c7a6f6b9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5985
diff changeset
  1471
proceedable:aBoolean
16507
89d48958d996 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16500
diff changeset
  1472
    "explicitly change the proceedability.
89d48958d996 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16500
diff changeset
  1473
     Normally this gets initialized from the classes idea of whether this makes sense"
89d48958d996 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16500
diff changeset
  1474
6036
6b37c7a6f6b9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5985
diff changeset
  1475
    proceedable := aBoolean
6b37c7a6f6b9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5985
diff changeset
  1476
!
6b37c7a6f6b9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5985
diff changeset
  1477
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1478
raiseContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1479
    ^ raiseContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1480
!
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1481
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1482
rejected
15681
3e8d83ce8f96 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15669
diff changeset
  1483
    "return true, if any other of the exception's handlers has rejected
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1484
     Uncertain, if this is really interesting to anybody.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1485
     This is only valid during handler execution.
15681
3e8d83ce8f96 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15669
diff changeset
  1486
     (i.e. an outer handler can find out, if any other handler has already rejected).
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1487
     Currently only used to change the 'unhandled-exception' messageText
11234
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  1488
     into 'rejected-exception' for the information, that there was a handler which rejected.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1489
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1490
4564
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1491
    ^ rejected == true
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1492
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1493
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1494
returnableSuspendedContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1495
    "return a nearest returnable context above suspendedContext in the sender chain.
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1496
     We know, that raiseContext is always returnable, so if suspendedContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1497
     is non-returnable, start there"
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1498
10389
e8972184a192 *** empty log message ***
ca
parents: 10239
diff changeset
  1499
    |returnableContext nextContext|
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1500
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1501
    returnableContext := suspendedContext.
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1502
    returnableContext canReturn ifFalse:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1503
        "the context that triggered the exception cannot return.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1504
         This is a fallback: return the context of the raise*.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1505
         We know, that this context is returnable"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1506
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1507
        returnableContext := nextContext := raiseContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1508
        "find the returnable context that is the nearest in the sender chain
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1509
         to suspendedContext...."
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1510
        [
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1511
            nextContext := nextContext sender.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1512
            nextContext isNil ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1513
                "suspendedContext appears to not exist on sender chain..."
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1514
                ^ raiseContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1515
            ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1516
            nextContext canReturn ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1517
                returnableContext := nextContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1518
            ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1519
            nextContext ~~ suspendedContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  1520
        ] whileTrue.
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1521
    ].
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1522
    ^ returnableContext
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1523
!
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1524
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1525
searchFrom:raisingContext
5697
ce78c7d9ddbd raiseSignal / raiseSignal: / raiseSignal:with:
Claus Gittinger <cg@exept.de>
parents: 5684
diff changeset
  1526
    suspendedContext := raisingContext
ce78c7d9ddbd raiseSignal / raiseSignal: / raiseSignal:with:
Claus Gittinger <cg@exept.de>
parents: 5684
diff changeset
  1527
!
ce78c7d9ddbd raiseSignal / raiseSignal: / raiseSignal:with:
Claus Gittinger <cg@exept.de>
parents: 5684
diff changeset
  1528
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1529
suspendedContext
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
  1530
    "return the context in which the raise occurred"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1531
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1532
    ^ suspendedContext
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1533
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1534
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1535
suspendedContext:something
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1536
    "set the value of the instance variable 'suspendedContext' (automatically generated)"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1537
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1538
    suspendedContext := something.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1539
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1540
    "Created: / 2.3.1998 / 12:43:20 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1541
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1542
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1543
willProceed
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1544
    "return true, if the exception is proceedable"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1545
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1546
    ^ self isResumable
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1547
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1548
    "Modified: / 2.3.1998 / 12:20:43 / stefan"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1549
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1550
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1551
!GenericException methodsFor:'copying'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1552
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1553
postCopy
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1554
    "set the internal state to nil"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1555
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1556
    raiseContext := suspendedContext := handlerContext := rejected := nil
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1557
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1558
    "Created: / 2.3.1998 / 12:30:06 / stefan"
8931
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1559
!
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1560
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1561
postDeepCopy
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1562
    "set the internal state to nil"
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1563
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1564
    suspendedContext := handlerContext := rejected := nil
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1565
10da5e5ddb8e +postDeepCopy
Claus Gittinger <cg@exept.de>
parents: 8774
diff changeset
  1566
    "Created: / 2.3.1998 / 12:30:06 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1567
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1568
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1569
!GenericException methodsFor:'default actions'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1570
4527
2ddbe34bab87 Make error classes public.
Stefan Vogel <sv@exept.de>
parents: 4521
diff changeset
  1571
defaultAction
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1572
    "perform a action for the exception if it hasn't been catched
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1573
     We arrive here, if either no handler was found, or none of the
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1574
     handlers did a return (i.e. every handler rejected).
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1575
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1576
     The default is to evaluate the signal's handlerBlock or
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1577
     to raise the noHandlerSignal.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1578
     Subclasses may redefine this."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1579
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1580
    <context: #return>
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1581
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1582
    |handlerBlock|
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1583
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1584
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1585
     try per signal handler
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1586
    "
15336
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  1587
    (handlerBlock := self creator handlerBlock) notNil ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1588
	"... and call it"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1589
	^ handlerBlock value:self.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1590
    ].
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1591
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1592
    ^ self noHandler.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1593
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1594
    "Created: / 23.7.1999 / 14:38:03 / stefan"
4517
8c539600fb63 Implement NoHandlerException etc. as class based exceptions.
Stefan Vogel <sv@exept.de>
parents: 4513
diff changeset
  1595
    "Modified: / 4.8.1999 / 08:11:05 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1596
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1597
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1598
mayProceed
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1599
    "return true, if the exception handler is allowed to proceed
20261
62a8dfe1c730 #OTHER by mawalch
mawalch
parents: 20186
diff changeset
  1600
     the execution where the exception occurred.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1601
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1602
     Subclasses may redefine this."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1603
6920
ff7892b5b41a no longer raise ProceedError
Claus Gittinger <cg@exept.de>
parents: 6859
diff changeset
  1604
    proceedable notNil ifTrue:[^ proceedable].
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  1605
    signal notNil ifTrue:[^ signal mayProceed].
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  1606
    ^ self class mayProceed.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  1607
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  1608
    "Created: / 23-07-1999 / 14:48:26 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  1609
    "Modified: / 10-08-2010 / 09:39:15 / cg"
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1610
!
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1611
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1612
noHandler
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1613
    "raise the NoHandlerError.
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1614
     NohandlerError redefines this method to avoid recursive invocations"
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1615
4564
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1616
    <context: #return>
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1617
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1618
    |msg|
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1619
4564
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1620
    rejected == true ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1621
	msg := 'unhandled (rejected)'
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1622
    ] ifFalse:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1623
	msg := 'unhandled'
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  1624
    ].
5295
f144309dab04 #errorString --> #description
Stefan Vogel <sv@exept.de>
parents: 5259
diff changeset
  1625
    msg := msg , ' exception: (' , self description , ')'.
4564
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1626
    self mayProceed ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1627
	^ NoHandlerError
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1628
	      raiseRequestWith:self
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1629
	      errorString:msg
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1630
	      in:suspendedContext.
4564
5401b0d1a6e3 NoHandlerSignal proceedability
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
  1631
    ].
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1632
    ^ NoHandlerError
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1633
	  raiseWith:self
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1634
	  errorString:msg
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1635
	  in:suspendedContext.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1636
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1637
5984
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1638
!GenericException methodsFor:'default values'!
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1639
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1640
defaultResumeValue
17270
f0c93e2cb389 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17106
diff changeset
  1641
    "the default answer, if no one handles the query and the exception is resumed"
f0c93e2cb389 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17106
diff changeset
  1642
5984
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1643
    ^ nil
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1644
!
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1645
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1646
defaultReturnValue
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1647
    ^ nil
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1648
! !
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1649
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1650
!GenericException methodsFor:'handler actions'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1651
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1652
exit
16224
2194bc886b30 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16190
diff changeset
  1653
    "either resume or return - depending on the receiver's resumability.
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1654
     VW compatibility."
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1655
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1656
    self isResumable ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1657
	self proceedWith:(self defaultResumeValue)
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1658
    ] ifFalse:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1659
	self return:(self defaultReturnValue)
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1660
    ]
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1661
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1662
    "Modified: / 7.9.2001 / 13:28:54 / cg"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1663
!
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1664
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1665
exit:value
16224
2194bc886b30 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16190
diff changeset
  1666
    "either resume or return - depending on the receiver's resumability.
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1667
     VW compatibility."
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1668
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1669
    self isResumable ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1670
	self proceedWith:value
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1671
    ] ifFalse:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1672
	self return:value
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1673
    ]
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1674
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1675
    "Created: / 7.9.2001 / 13:29:55 / cg"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1676
    "Modified: / 7.9.2001 / 13:30:00 / cg"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1677
!
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1678
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1679
proceed
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1680
    "Continue after the raise - the raise returns nil"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1681
5984
2d5c04c9fab6 ANSI; added #defaultResumeValue and #defaultReturnValue.
Claus Gittinger <cg@exept.de>
parents: 5950
diff changeset
  1682
    self proceedWith:(self defaultResumeValue).
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1683
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1684
    "cg: a strange example:
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1685
	there are two caught errors here - can you spot them ?
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1686
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1687
     Error handle:[:ex|
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1688
	 'proceeding' printCR.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1689
	 ex proceed
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1690
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1691
	 Error raiseRequest
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1692
     ].
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1693
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1694
4517
8c539600fb63 Implement NoHandlerException etc. as class based exceptions.
Stefan Vogel <sv@exept.de>
parents: 4513
diff changeset
  1695
    "Modified: / 4.8.1999 / 08:42:12 / stefan"
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1696
    "Modified: / 7.9.2001 / 13:29:08 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1697
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1698
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1699
proceedWith:value
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1700
    "Continue after the raise - the raise returns value"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1701
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1702
    |con rCon|
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1703
15636
b9f4e2491f51 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15584
diff changeset
  1704
    (StrictRaising and:[proceedable not]) ifTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1705
	"proceed from ProceedError to recover from this error"
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1706
	ProceedError raiseRequestWith:self.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1707
	proceedable := true.
15636
b9f4e2491f51 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15584
diff changeset
  1708
    ].
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1709
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1710
    thisContext evaluateUnwindActionsUpTo:suspendedContext.
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1711
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1712
    con := suspendedContext.
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1713
    rCon := raiseContext.
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1714
    handlerContext := suspendedContext := raiseContext := nil.
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1715
    con resumeIgnoringErrors:value.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1716
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1717
    "we arrive here, if suspendedContext is not resumable -
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1718
     resume our raise context ...
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1719
      ... consider this a fallBack kludge, for the case that
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1720
	  a raising context is not returnable."
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1721
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1722
    rCon return:value.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1723
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1724
    "Modified: / 27.3.1997 / 16:45:57 / cg"
4517
8c539600fb63 Implement NoHandlerException etc. as class based exceptions.
Stefan Vogel <sv@exept.de>
parents: 4513
diff changeset
  1725
    "Modified: / 4.8.1999 / 08:42:17 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1726
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1727
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1728
reject
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1729
    "handler decided not to handle this signal -
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1730
     system will look for another handler"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1731
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1732
    |con|
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1733
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1734
    "find the last doCallXX: context"
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1735
    con := Context findFirstSpecialHandle:false raise:true.
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1736
    [con notNil
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1737
     and:[con receiver ~~ self]] whileTrue:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1738
	con := con findSpecialHandle:false raise:true.
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1739
    ].
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1740
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1741
    "returning form the doCallXX: signals a reject"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1742
    rejected := true.
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1743
    con unwind:nil.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1744
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1745
    "
11775
96ee89315d1d example
Stefan Vogel <sv@exept.de>
parents: 11710
diff changeset
  1746
     Error handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1747
	'1' printCR.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1748
	ex reject
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1749
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1750
	Error handle:[:ex |
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1751
	    '2' printCR.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1752
	    ex reject
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1753
	] do:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1754
	    #() at:1
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1755
	]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1756
     ]
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1757
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1758
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1759
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1760
resignalAs:anotherException
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1761
    "resignal anotherException, as if it was raised in the first place"
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1762
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1763
    |con|
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1764
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1765
    con := self returnableSuspendedContext.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1766
    thisContext evaluateUnwindActionsUpTo:con.
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1767
    handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1768
    con returnDoing:[anotherException raiseSignal]
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1769
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1770
    "
6364
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1771
     |rslt|
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1772
7753
a4de4f3a203f comments
Stefan Vogel <sv@exept.de>
parents: 7674
diff changeset
  1773
     ZeroDivide handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1774
	ex resignalAs:DomainError
6364
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1775
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1776
	rslt := 5 // 0
6364
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1777
     ].
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1778
     rslt
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1779
    "
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1780
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1781
    "
b7d1a52ec256 Workaround for non-returnable contexts in #resignalAs:
Stefan Vogel <sv@exept.de>
parents: 6264
diff changeset
  1782
     |rslt|
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1783
7753
a4de4f3a203f comments
Stefan Vogel <sv@exept.de>
parents: 7674
diff changeset
  1784
     MessageNotUnderstood handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1785
	ex resignalAs:Number domainErrorSignal
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1786
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1787
	rslt := 1 perform:#foo
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1788
     ].
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1789
     rslt
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1790
    "
12156
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1791
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1792
    "
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1793
     |rslt firstTime|
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1794
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1795
     firstTime := true.
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1796
     ZeroDivide handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1797
	firstTime ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1798
	    Dialog information:'again...'.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1799
	    firstTime := false.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1800
	    ex resignalAs:ZeroDivide.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1801
	].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1802
	Dialog information:'arrived here again...'.
12156
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1803
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1804
	rslt := 5 // 0
12156
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1805
     ].
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1806
     rslt
175e2d1a1652 comment/format in: #resignalAs:
Claus Gittinger <cg@exept.de>
parents: 12085
diff changeset
  1807
    "
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1808
!
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  1809
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1810
restart
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1811
    "restart the handle:do: - usually after some repair work is done
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1812
     in the handler"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1813
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1814
    |con|
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1815
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1816
    con := handlerContext.
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1817
    handlerContext := suspendedContext := raiseContext := nil.
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1818
    con unwindAndRestart.
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1819
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1820
"/    thisContext evaluateUnwindActionsUpTo:con.
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1821
"/    handlerContext := suspendedContext := raiseContext := nil.
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1822
"/    con restart
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1823
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1824
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1825
     |rslt n|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1826
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1827
     Error handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1828
	Transcript showCR:'fixing divisor ...'.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1829
	n := 1.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1830
	ex restart.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1831
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1832
	rslt := 5 / n.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1833
     ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1834
     rslt
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1835
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1836
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1837
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1838
restartDo:aBlock
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1839
    "restart the handle:do: but execute the argument, aBlock instead of the
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1840
     original do-block - usually after some repair work is done in handler"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1841
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1842
    |con|
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1843
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1844
    con := handlerContext.
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1845
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1846
"/    handlerContext unwindThenDo:[
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1847
"/        handlerContext receiver
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1848
"/            handle:(handlerContext argAt:1)
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1849
"/            do:aBlock
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1850
"/    ].
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1851
4544
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
  1852
    con receiver handlerProtectedBlock:aBlock inContext:con.
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1853
"/    thisContext evaluateUnwindActionsUpTo:con.
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1854
"/    handlerContext := suspendedContext := raiseContext := nil.
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1855
"/    con restart
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1856
    handlerContext := suspendedContext := raiseContext := nil.
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1857
    con unwindAndRestart.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1858
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1859
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1860
     |sig rslt|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1861
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1862
     sig := Signal new.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1863
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1864
     sig handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1865
	Transcript showCR:'exchanging do-block ...'.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1866
	ex restartDo:[ rslt := 999 ]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1867
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1868
	rslt := 0.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1869
	sig raise
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1870
     ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1871
     Transcript showCR:rslt
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1872
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1873
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1874
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1875
     |sig rslt|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1876
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1877
     Object errorSignal handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1878
	ex restartDo:[ rslt := 999 ]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1879
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1880
	rslt := nil foo.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1881
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1882
     ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1883
     Transcript showCR:rslt
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1884
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1885
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1886
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1887
     |sig rslt|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1888
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1889
     Object errorSignal handle:[:ex |
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1890
	ex restartDo:[ 'handler' printCR. rslt := nil foo ]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1891
     ] do:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1892
	rslt := nil foo.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1893
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1894
     ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1895
     Transcript showCR:rslt
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1896
    "
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1897
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1898
    "Modified: / 8.11.1997 / 18:52:28 / cg"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1899
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1900
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1901
resume
11299
fd6de763433e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11234
diff changeset
  1902
    "Continue after the raise - the raise returns defaultResumeValue - ANSI"
fd6de763433e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11234
diff changeset
  1903
fd6de763433e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11234
diff changeset
  1904
    self proceedWith:(self defaultResumeValue)
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1905
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1906
    "Modified: / 2.3.1998 / 10:51:55 / stefan"
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1907
    "Modified: / 7.9.2001 / 13:28:34 / cg"
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1908
!
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1909
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1910
resume:value
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1911
    "Continue after the raise - the raise returns value - ANSI"
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1912
11299
fd6de763433e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11234
diff changeset
  1913
    self proceedWith:value
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1914
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1915
    "Modified: / 7.9.2001 / 13:28:49 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1916
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1917
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1918
resumeWith:value
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1919
    "Continue after the raise - the raise returns value - ANSI"
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  1920
11299
fd6de763433e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11234
diff changeset
  1921
    self proceedWith:value
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1922
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1923
    "Modified: / 2.3.1998 / 10:51:48 / stefan"
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1924
    "Modified: / 7.9.2001 / 13:29:26 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1925
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1926
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1927
return
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1928
    "Continue after the handle:do: - the handle:do: returns nil"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1929
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1930
    |con value|
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1931
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1932
    con := handlerContext.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1933
    "/ cg: moving the following clearing of the handlerContext
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1934
    "/ to before the evalUnwindActions allows for the exception
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1935
    "/ to be handled during the unwind.
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1936
    "/ It can be discussed, whether this is correct or not;
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1937
    "/ I think, that the unwind actions should behave just the same as
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1938
    "/ when a normal return is done. As unwind actions are called,
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1939
    "/ these are unmarkedForUnwind anyway, so there should be no danger
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1940
    "/ for endless recursion here... (i.e. each unwind action can at most
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1941
    "/ reraise that exception once).
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1942
    value := self defaultReturnValue.   "/ evaluate before unwinding
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1943
    handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1944
    thisContext evaluateUnwindActionsUpTo:con.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1945
    "/ handlerContext := suspendedContext := raiseContext := nil.
15321
2e79d57ea5ca class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15311
diff changeset
  1946
    con return:value
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1947
5985
4bffb803f9e8 more ANSI stuff
Claus Gittinger <cg@exept.de>
parents: 5984
diff changeset
  1948
    "Modified: / 7.9.2001 / 13:29:34 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1949
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1950
5939
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1951
return:value
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1952
    "Continue after the handle:do: - the handle:do: returns value"
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1953
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1954
    |con|
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1955
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1956
    con := handlerContext.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1957
    "/ cg: moving the following clearing of the handlerContext
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1958
    "/ to before the evalUnwindActions allows for the exception
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1959
    "/ to be handled during the unwind.
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1960
    "/ It can be discussed, whether this is correct or not;
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1961
    "/ I think, that the unwind actions should behave just the same as
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1962
    "/ when a normal return is done. As unwind actions are called,
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1963
    "/ these are unmarkedForUnwind anyway, so there should be no danger
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1964
    "/ for endless recursion here... (i.e. each unwind action can at most
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1965
    "/ reraise that exception once).
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1966
    handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1967
    thisContext evaluateUnwindActionsUpTo:con.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1968
    "/ handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1969
    con return:value.
5939
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1970
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1971
    "Modified: 27.3.1997 / 16:46:51 / cg"
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1972
!
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  1973
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1974
returnDoing:aBlock
4544
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
  1975
    "Continue after the handle:do: - the handle:do: returns aBlock value
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
  1976
     Be careful when debugging. You cannot see the context with #returnDoing:
2a0e3853d320 #returnDoing works for any exception handler.
Stefan Vogel <sv@exept.de>
parents: 4538
diff changeset
  1977
     in the debugger if aBlock raises a signal"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1978
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1979
    |con|
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1980
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  1981
    con := handlerContext.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1982
    "/ cg: moving the following clearing of the handlerContext
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1983
    "/ to before the evalUnwindActions allows for the exception
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1984
    "/ to be handled during the unwind.
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1985
    "/ It can be discussed, whether this is correct or not;
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1986
    "/ I think, that the unwind actions should behave just the same as
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1987
    "/ when a normal return is done. As unwind actions are called,
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1988
    "/ these are unmarkedForUnwind anyway, so there should be no danger
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1989
    "/ for endless recursion here... (i.e. each unwind action can at most
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1990
    "/ reraise that exception once).
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1991
    handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1992
    thisContext evaluateUnwindActionsUpTo:con.
15261
a4b1efbb3750 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15237
diff changeset
  1993
    "/ handlerContext := suspendedContext := raiseContext := nil.
13803
4adfe051c944 Fix the exception handler actions (#return, #restart, ...) to work
Stefan Vogel <sv@exept.de>
parents: 13305
diff changeset
  1994
    con returnDoing:aBlock
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1995
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  1996
    "
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1997
	[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1998
	    5 // 0
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  1999
	] on:Error do:[:ex|
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2000
	    ex returnDoing:[self halt. 47*11].
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2001
	]
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  2002
    "
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2003
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2004
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2005
returnWith:value
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2006
    "Continue after the handle:do: - the handle:do: returns value"
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2007
5939
cd677568dca6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5933
diff changeset
  2008
    self return:value
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2009
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2010
5570
e6e14f50d721 category change
Claus Gittinger <cg@exept.de>
parents: 5348
diff changeset
  2011
!GenericException methodsFor:'printing & storing'!
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2012
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2013
description
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2014
    "return the description string of the signal/exception.
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2015
     If a messageText has been set, that is returned plain, appended or prepended to the
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2016
     classes description string."
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2017
6248
1898c39ebdfa care for non-string description
Claus Gittinger <cg@exept.de>
parents: 6246
diff changeset
  2018
    |sigDescr|
1898c39ebdfa care for non-string description
Claus Gittinger <cg@exept.de>
parents: 6246
diff changeset
  2019
15336
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  2020
    sigDescr := self creator description.
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  2021
    (messageText isNil or:[messageText isString not])
6248
1898c39ebdfa care for non-string description
Claus Gittinger <cg@exept.de>
parents: 6246
diff changeset
  2022
    ifTrue:[
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2023
        ^ sigDescr
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2024
    ].
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2025
    (messageText startsWith:Character space) ifTrue:[
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2026
        ^ sigDescr, messageText.
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2027
    ].
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2028
    (messageText endsWith:Character space) ifTrue:[
22532
433d188c6654 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22495
diff changeset
  2029
        ^ messageText, sigDescr.
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2030
    ].
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2031
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2032
    ^ messageText
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2033
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2034
    "
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2035
      (Error new messageText:'bla') description
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2036
      (Error new messageText:' bla') description
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2037
      (Error new messageText:'bla ') description
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2038
    "
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2039
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2040
    "Modified: / 12.3.1998 / 15:13:28 / stefan"
6859
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
  2041
!
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
  2042
11234
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2043
descriptionForDebugger
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2044
    "return the description string of the signal which is used in the
11234
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2045
     debugger title area"
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2046
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2047
    ^ self description.
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2048
!
65c3be6b0d72 got rid of the \"unhandled...(\" prefix in the debugger;
Claus Gittinger <cg@exept.de>
parents: 11026
diff changeset
  2049
6859
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
  2050
printOn:aStream
8941
4b4c238d0e7b #printOn: and #printString now print the description (without "an Error())
Stefan Vogel <sv@exept.de>
parents: 8931
diff changeset
  2051
    aStream nextPutAll:self description
4562
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2052
! !
2cd0c20d8970 Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4556
diff changeset
  2053
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2054
!GenericException methodsFor:'private'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2055
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2056
checkProceedable
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2057
    "helper for all raiseRequest methods"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2058
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2059
    self mayProceed ifFalse:[
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2060
	StrictRaising ifTrue:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2061
	    "/ proceeding from wrongProceedabilitySignal grants the raiseRequest
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2062
	    WrongProceedabilityError raiseRequestWith:self creator.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2063
	] ifFalse:[
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2064
	    self class name infoPrint.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2065
	    ' [warning]: raised with wrong proceedability' infoPrintCR.
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2066
	]
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2067
    ].
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2068
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2069
    "Created: / 10-08-2010 / 09:54:41 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2070
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2071
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2072
doCallAction
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2073
    "call the action proper
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2074
     - needed an extra method to have a raise-marked context around
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2075
       i.e. do not inline this into #doRaise !!
15669
7f38f4a9fd43 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15636
diff changeset
  2076
       (see implementation of #reject and #proceed)."
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2077
4488
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2078
    <context: #return>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2079
    <exception: #raise>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2080
4527
2ddbe34bab87 Make error classes public.
Stefan Vogel <sv@exept.de>
parents: 4521
diff changeset
  2081
    ^ self defaultAction
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2082
!
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2083
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2084
doCallHandler:aHandlerBlock
15692
a88a02fdd218 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15681
diff changeset
  2085
    "call the handler proper - if the handler falls through, return the handler's value
8691
8b83b6cb00ac Use #argumentCount instead of #numArgs in #doCallHandler: - it is implemented in Object
Stefan Vogel <sv@exept.de>
parents: 8684
diff changeset
  2086
     - an extra method is needed to have a raise-marked context around.
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2087
       i.e. do not inline this into #doRaise !!
15669
7f38f4a9fd43 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15636
diff changeset
  2088
       (see implementation of #reject and #proceed).
7f38f4a9fd43 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 15636
diff changeset
  2089
     - also redefinable (see CascadingNotification)"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2090
4488
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2091
    <context: #return>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2092
    <exception: #raise>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2093
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2094
    |val|
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2095
21663
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2096
    (aHandlerBlock isBlockWithArgumentCount:1) ifTrue:[
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2097
        "1-arg handler - pass myself as exception argument"
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2098
        val := aHandlerBlock value:self.
6158
7fb96896ed4b support 0-arg handler blocks
Claus Gittinger <cg@exept.de>
parents: 6036
diff changeset
  2099
    ] ifFalse:[
21663
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2100
        "0-arg handler or any object - not interested in the exception argument"
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2101
        val := aHandlerBlock value
6158
7fb96896ed4b support 0-arg handler blocks
Claus Gittinger <cg@exept.de>
parents: 6036
diff changeset
  2102
    ].
7fb96896ed4b support 0-arg handler blocks
Claus Gittinger <cg@exept.de>
parents: 6036
diff changeset
  2103
8691
8b83b6cb00ac Use #argumentCount instead of #numArgs in #doCallHandler: - it is implemented in Object
Stefan Vogel <sv@exept.de>
parents: 8684
diff changeset
  2104
    "handler fall through - is just like a #return:(aHandlerBlock value)"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2105
8691
8b83b6cb00ac Use #argumentCount instead of #numArgs in #doCallHandler: - it is implemented in Object
Stefan Vogel <sv@exept.de>
parents: 8684
diff changeset
  2106
    self return:val
21663
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2107
1b566be1fc3f #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 21567
diff changeset
  2108
    "Modified: / 18-03-2017 / 18:08:40 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2109
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2110
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2111
doRaise
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2112
    "search through the context-calling chain for a handle-context
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2113
     to the raising signal, a parent of it, or a SignalSet which includes
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2114
     the raising signal.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2115
     If found, ask the receiver for the handler and evaluate
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2116
     it with the receiver exception as argument.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2117
     If no handler is found, perform the default #action method.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2118
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2119
     ATTENTION: the code below depends on being called by #raise or
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2120
     #raiseRequest for proper operation (it skips the sending context)."
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2121
4488
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2122
    <context: #return>
db914d752859 must mark returned contexts as returnable
Claus Gittinger <cg@exept.de>
parents: 4484
diff changeset
  2123
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2124
    |currentContext|
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2125
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2126
    "is nil a valid originator? If so, we need an extra
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2127
     instanceVariable to record the originator setting"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2128
    originator isNil ifTrue:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2129
        originator := suspendedContext homeReceiver
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2130
    ].
15336
e9db6bdf3f10 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15321
diff changeset
  2131
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2132
    signal isNil ifTrue:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2133
        signal := self class
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2134
    ] ifFalse:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2135
        signal isExceptionCreator ifFalse:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2136
            "not an exception or Signal - there is something wrong here..."
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2137
            SignalError raiseWith:signal errorString:'unexpected non-ExceptionCreator in calling context'.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2138
        ]
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2139
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2140
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2141
    "now, start searching for a handler.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2142
     Start search above the last active handler.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2143
     Skip raise contexts.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2144
     If nil, then there is no handler and we can directly proceed
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2145
     to the unhandled code below."
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2146
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2147
    currentContext := suspendedContext findExceptional.
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2148
    [currentContext notNil] whileTrue:[
20186
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2149
        (currentContext isRaiseContext) ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2150
            |ex1 con1|
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2151
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2152
            "skip all the contexts between the raise and the sender of #handle:do"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2153
            ex1 := currentContext receiver.     "exception, that has been raised"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2154
            con1 := ex1 handlerContext.         "the context of the #handle:do:"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2155
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2156
            con1 isNil ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2157
                "the handlerContext is nil if an exception's default action is performed.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2158
                 Start search at the sending context.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2159
                 Maybe we should better treat a default action like a #handle:do:
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2160
                 at the outest level. But the DebugView currently can't handle this,
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2161
                 because it tries to raise e.g. AbortOperationRequest even if it has bee invoked
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2162
                 by e.g. NoHandlerError.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2163
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2164
                 Note that if raiseContext is nil, the exception
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2165
                 did already return."
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2166
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2167
                (ex1 creator == signal and:[ex1 raiseContext notNil]) ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2168
                    "the same exception that has been caught by a default action is raised again.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2169
                     don't recurse"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2170
                    ^ self noHandler.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2171
                ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2172
            ] ifFalse:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2173
                "skip to the raised exception's handleContext"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2174
                currentContext := con1.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2175
            ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2176
            ex1 := con1 := nil.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2177
        ] ifFalse:[ "currentContext is a handleContext"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2178
            |r handler|
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2179
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2180
            "ask the receiver of the #handle:do: or #on:do: or whatever- message for the handler.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2181
             nil is returned, if the signal is not accepted"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2182
            r := currentContext receiver.     "receiver of #handle:do: or #on:do:"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2183
            (r notNil and:[(handler := r handlerForSignal:signal
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2184
                                         context:currentContext
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2185
                                         originator:originator) notNil]
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2186
            ) ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2187
                "call the handler"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2188
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2189
                handlerContext := currentContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2190
                currentContext := nil.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2191
                self doCallHandler:handler.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2192
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2193
                "if the handler rejects, we arrive here
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2194
                 continue search for another handler"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2195
                currentContext := handlerContext.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2196
                handler := handlerContext := nil.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2197
            ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2198
            r := handler := nil.
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2199
        ].
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2200
        currentContext notNil ifTrue:[
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2201
            currentContext := currentContext findSpecialHandle:true raise:true. "search starts at currentContext sender"
1e8814a54967 #OTHER by mawalch
mawalch
parents: 20095
diff changeset
  2202
        ].
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2203
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2204
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2205
    "
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2206
     we arrive here, if either no handler was found,
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2207
     or every handler rejected.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2208
    "
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2209
    ^ self doCallAction
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2210
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2211
    "Created: / 12-05-1996 / 15:09:39 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2212
    "Modified: / 03-08-1999 / 11:20:41 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2213
    "Modified: / 10-08-2010 / 09:26:14 / cg"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2214
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2215
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2216
!GenericException methodsFor:'raising'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2217
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2218
raise
4484
9476c82921d0 eliminated proceedBlock and rejectBlock;
Claus Gittinger <cg@exept.de>
parents: 4483
diff changeset
  2219
    "actually raise a non-proceedable exception"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2220
4556
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  2221
    <context: #return>
b654bb087103 new proceed code.
Claus Gittinger <cg@exept.de>
parents: 4554
diff changeset
  2222
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  2223
    raiseContext := thisContext.
17105
9622a6aa0b05 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16555
diff changeset
  2224
    (suspendedContext isNil or:[handlerContext notNil]) ifTrue:[
9622a6aa0b05 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16555
diff changeset
  2225
        suspendedContext := raiseContext sender
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2226
    ].
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2227
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2228
    proceedable := false.
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2229
    ^ self doRaise
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2230
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2231
    "Modified: / 12.5.1996 / 15:09:47 / cg"
4507
c15d849b1ddc Remove unused vars.
Stefan Vogel <sv@exept.de>
parents: 4504
diff changeset
  2232
    "Modified: / 3.8.1999 / 13:33:01 / stefan"
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2233
!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2234
19344
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2235
raiseErrorString:aString
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2236
    "raise the signal nonproceedable.
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2237
     The argument, aString is used as messageText"
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2238
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2239
    <context: #return>
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2240
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2241
    raiseContext := thisContext.
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2242
    suspendedContext := thisContext sender.
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2243
    messageText := aString.
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2244
    proceedable := false.
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2245
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2246
    ^ self doRaise
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2247
!
7ca957505652 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19210
diff changeset
  2248
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2249
raiseErrorString:aString in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2250
    "raise the signal nonproceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2251
     The argument, aString is used as messageText"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2252
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2253
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2254
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2255
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2256
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2257
    messageText := aString.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2258
    proceedable := false.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2259
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2260
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2261
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2262
    "Created: / 10-08-2010 / 09:33:43 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2263
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2264
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2265
raiseIn:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2266
    "actually raise a non-proceedable exception"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2267
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2268
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2269
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2270
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2271
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2272
    proceedable := false.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2273
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2274
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2275
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2276
    "Modified: / 03-08-1999 / 13:33:01 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2277
    "Created: / 10-08-2010 / 09:30:19 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2278
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2279
17106
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2280
raiseRequest
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2281
    "actually raise a proceedable exception."
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2282
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2283
    <context: #return>
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2284
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2285
    raiseContext := thisContext.
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2286
    (suspendedContext isNil or:[handlerContext notNil]) ifTrue:[
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2287
        handlerContext := nil.
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2288
        suspendedContext := raiseContext sender
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2289
    ].
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2290
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2291
    self checkProceedable.
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2292
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2293
    proceedable := true.
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2294
    ^ self doRaise
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2295
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2296
    "Modified: / 04-08-1999 / 08:05:12 / stefan"
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2297
    "Modified: / 10-08-2010 / 09:55:00 / cg"
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2298
!
6ebbc6148c6c class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17105
diff changeset
  2299
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2300
raiseRequestErrorString:errorString in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2301
    "actually raise a proceedable exception."
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2302
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2303
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2304
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2305
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2306
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2307
    messageText := errorString.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2308
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2309
    self checkProceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2310
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2311
    proceedable := true.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2312
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2313
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2314
    "Modified: / 04-08-1999 / 08:05:12 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2315
    "Created: / 10-08-2010 / 09:40:05 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2316
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2317
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2318
raiseRequestIn:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2319
    "actually raise a proceedable exception."
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2320
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2321
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2322
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2323
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2324
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2325
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2326
    self checkProceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2327
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2328
    proceedable := true.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2329
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2330
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2331
    "Modified: / 04-08-1999 / 08:05:12 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2332
    "Created: / 10-08-2010 / 09:36:45 / cg"
5680
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2333
!
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2334
8774
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2335
raiseRequestWith:aParameter errorString:aString
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2336
    "raise the signal proceedable.
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2337
     The argument, aString is used as messageText,
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2338
     aParameter is passed as exception parameter."
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2339
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2340
    <context: #return>
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2341
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2342
    ^ (self
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2343
	suspendedContext:thisContext sender parameter:aParameter errorString:aString)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2344
	raiseRequest.
8774
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2345
    "Created: / 23.7.1999 / 14:08:57 / stefan"
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2346
!
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2347
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2348
raiseRequestWith:aParameter errorString:aString in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2349
    "actually raise a proceedable exception."
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2350
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2351
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2352
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2353
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2354
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2355
    parameter := aParameter.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2356
    messageText := aString.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2357
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2358
    self checkProceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2359
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2360
    proceedable := true.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2361
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2362
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2363
    "Modified: / 04-08-1999 / 08:05:12 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2364
    "Created: / 10-08-2010 / 09:55:48 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2365
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2366
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2367
raiseRequestWith:aParameter in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2368
    "actually raise a proceedable exception."
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2369
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2370
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2371
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2372
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2373
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2374
    parameter := aParameter.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2375
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2376
    self checkProceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2377
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2378
    proceedable := true.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2379
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2380
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2381
    "Modified: / 04-08-1999 / 08:05:12 / stefan"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2382
    "Created: / 10-08-2010 / 09:53:51 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2383
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2384
5680
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2385
raiseSignal
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2386
    "actually raise an exception (whatever the proceedability is)."
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2387
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2388
    <context: #return>
15954
79784e354f4d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15692
diff changeset
  2389
    <resource: #skipInDebuggersWalkBack>
79784e354f4d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15692
diff changeset
  2390
9992
0774694cf9b3 - Add raiseContext as instance variable for faster #resume
Stefan Vogel <sv@exept.de>
parents: 9505
diff changeset
  2391
    raiseContext := thisContext.
17105
9622a6aa0b05 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16555
diff changeset
  2392
    (suspendedContext isNil or:[handlerContext notNil]) ifTrue:[
9622a6aa0b05 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 16555
diff changeset
  2393
        suspendedContext := raiseContext sender
5680
7c27d1de0c56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5590
diff changeset
  2394
    ].
8684
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2395
    proceedable := self mayProceed.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2396
    ^ self doRaise
15954
79784e354f4d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15692
diff changeset
  2397
79784e354f4d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15692
diff changeset
  2398
    "Modified: / 19-04-2013 / 09:37:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8774
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2399
!
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2400
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2401
raiseWith:aParameter errorString:aString
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2402
    "raise the signal nonproceedable.
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2403
     The argument, aString is used as messageText,
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2404
     aParameter is passed as exception parameter."
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2405
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2406
    <context: #return>
2bb732840713 +raiseWith / raiseRequestWith
Claus Gittinger <cg@exept.de>
parents: 8733
diff changeset
  2407
16555
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2408
    ^ (self
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2409
	suspendedContext:thisContext sender parameter:aParameter errorString:aString)
f84afc25df70 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 16507
diff changeset
  2410
	raise.
13009
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2411
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2412
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2413
raiseWith:aParameter errorString:aString in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2414
    "raise the signal nonproceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2415
     The argument, aString is used as messageText"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2416
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2417
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2418
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2419
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2420
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2421
    messageText := aString.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2422
    parameter := aParameter.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2423
    proceedable := false.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2424
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2425
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2426
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2427
    "Created: / 10-08-2010 / 09:51:51 / cg"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2428
!
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2429
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2430
raiseWith:aParameter in:aContext
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2431
    "raise the signal nonproceedable.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2432
     The argument, aString is used as messageText"
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2433
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2434
    <context: #return>
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2435
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2436
    raiseContext := thisContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2437
    suspendedContext := aContext.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2438
    parameter := aParameter.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2439
    proceedable := false.
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2440
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2441
    ^ self doRaise
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2442
e068f228a24b eliminated 1 to 2 message sends when raising
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
  2443
    "Created: / 10-08-2010 / 09:50:54 / cg"
5697
ce78c7d9ddbd raiseSignal / raiseSignal: / raiseSignal:with:
Claus Gittinger <cg@exept.de>
parents: 5684
diff changeset
  2444
! !
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2445
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2446
!GenericException methodsFor:'setup'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2447
15237
661c2ad1edb8 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15123
diff changeset
  2448
creator:aSignal
6945
9536335d243b use setSignal, to avoid conflict with dolphin signals
Claus Gittinger <cg@exept.de>
parents: 6920
diff changeset
  2449
    "set the fields usable for inspection by the handler
15237
661c2ad1edb8 class: GenericException
Stefan Vogel <sv@exept.de>
parents: 15123
diff changeset
  2450
     - only to be sent from the signal when raising."
6945
9536335d243b use setSignal, to avoid conflict with dolphin signals
Claus Gittinger <cg@exept.de>
parents: 6920
diff changeset
  2451
9536335d243b use setSignal, to avoid conflict with dolphin signals
Claus Gittinger <cg@exept.de>
parents: 6920
diff changeset
  2452
    signal := aSignal.
9536335d243b use setSignal, to avoid conflict with dolphin signals
Claus Gittinger <cg@exept.de>
parents: 6920
diff changeset
  2453
!
9536335d243b use setSignal, to avoid conflict with dolphin signals
Claus Gittinger <cg@exept.de>
parents: 6920
diff changeset
  2454
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2455
suspendedContext:sContext errorString:aString
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2456
    "set required fields
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2457
     - only to be sent from the signal when raising"
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2458
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2459
    messageText := aString.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2460
    suspendedContext := sContext.
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2461
!
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2462
8684
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2463
suspendedContext:aContext messageText:aString parameter:aParameter originator:anOriginator
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2464
    suspendedContext := aContext.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2465
    messageText := aString.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2466
    parameter := aParameter.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2467
    originator := anOriginator.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2468
!
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2469
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2470
suspendedContext:sContext parameter:aParameter
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2471
    "set required fields
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2472
     - only to be sent from the signal when raising"
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2473
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2474
    parameter := aParameter.
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2475
    suspendedContext := sContext.
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2476
!
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2477
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2478
suspendedContext:sContext parameter:aParameter errorString:aString
8617
5fb5a717deff *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8509
diff changeset
  2479
    "set required fields
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2480
     - only to be sent from the signal when raising"
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2481
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2482
    parameter := aParameter.
8313
2aa626e8e404 Fix do not execute an exception handler inside the do-block, when the
Stefan Vogel <sv@exept.de>
parents: 8254
diff changeset
  2483
    messageText := aString.
6430
9a1580465dd2 better impl. of #deferAfter:
Claus Gittinger <cg@exept.de>
parents: 6426
diff changeset
  2484
    suspendedContext := sContext.
8684
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2485
!
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2486
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2487
suspendedContext:aContext parameter:aParameter originator:anOriginator
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2488
    suspendedContext := aContext.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2489
    parameter := aParameter.
9c00854305f7 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 8681
diff changeset
  2490
    originator := anOriginator.
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2491
! !
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2492
6220
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2493
!GenericException methodsFor:'testing'!
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2494
23029
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2495
isBridgeException
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2496
    "do not make this an extension method of the Bridge-package"
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2497
    
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2498
    ^ false
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2499
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2500
    "Created: / 28-05-2018 / 12:53:43 / Claus Gittinger"
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2501
!
05833aa782e3 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22798
diff changeset
  2502
8065
23355398af34 isOpenError, isStreamError and isError queries added
Claus Gittinger <cg@exept.de>
parents: 7808
diff changeset
  2503
isError
23355398af34 isOpenError, isStreamError and isError queries added
Claus Gittinger <cg@exept.de>
parents: 7808
diff changeset
  2504
    ^ false
23355398af34 isOpenError, isStreamError and isError queries added
Claus Gittinger <cg@exept.de>
parents: 7808
diff changeset
  2505
!
23355398af34 isOpenError, isStreamError and isError queries added
Claus Gittinger <cg@exept.de>
parents: 7808
diff changeset
  2506
6220
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2507
isException
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2508
    ^ true
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2509
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2510
    "Created: / 17.11.2001 / 18:37:27 / cg"
8681
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  2511
!
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  2512
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  2513
isNotification
38aa963476a5 Support for Block>>#on:do:on:do:
Stefan Vogel <sv@exept.de>
parents: 8677
diff changeset
  2514
    ^ false
20436
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2515
!
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2516
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2517
isProgramError
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2518
    "redefined in all exceptions which are programmer's errors,
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2519
     and which should probably not be ignored.
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2520
     I.e. a global error handler should reject and let a debugger get control."
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2521
     
a4aae3f01bc1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20417
diff changeset
  2522
    ^ self class isProgramError
22067
c685c1804bed #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21856
diff changeset
  2523
!
c685c1804bed #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21856
diff changeset
  2524
c685c1804bed #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21856
diff changeset
  2525
isQuery
22103
4345a87555d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22074
diff changeset
  2526
    ^ self creator isQuerySignal
22067
c685c1804bed #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21856
diff changeset
  2527
c685c1804bed #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21856
diff changeset
  2528
    "Created: / 21-07-2017 / 00:43:38 / cg"
22074
e92d5d7c3731 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22068
diff changeset
  2529
    "Modified: / 21-07-2017 / 20:27:24 / cg"
22103
4345a87555d7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22074
diff changeset
  2530
    "Modified: / 25-07-2017 / 16:52:34 / stefan"
6220
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2531
! !
1b9aa02b02ef isException query
Claus Gittinger <cg@exept.de>
parents: 6200
diff changeset
  2532
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2533
!GenericException class methodsFor:'documentation'!
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2534
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2535
version
18727
a780e761a158 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17293
diff changeset
  2536
    ^ '$Header$'
12059
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  2537
!
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  2538
dc79a13a160a added: #evaluate:ifRaised:
Claus Gittinger <cg@exept.de>
parents: 11775
diff changeset
  2539
version_CVS
18727
a780e761a158 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 17293
diff changeset
  2540
    ^ '$Header$'
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2541
! !
6859
5ef85865e8db Print exception description with #printOn:
Stefan Vogel <sv@exept.de>
parents: 6630
diff changeset
  2542
14962
2d0932f775a2 class: GenericException
Claus Gittinger <cg@exept.de>
parents: 14241
diff changeset
  2543
4481
f3f7e1af7489 added GenericException in-between, to allow for some exceptions
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2544
GenericException initialize!