micropython

Annotated docs/exceptions.txt

334:662e6ce9a750
2010-06-12 Paul Boddie Fixed scope handling where names are imported into namespaces. Added a simple iter built-in function. Made the xrange test use the iteration protocol.
paul@57 1
Exception Handling
paul@232 2
==================
paul@232 3
paul@232 4
Active Exceptions
paul@232 5
=================
paul@232 6
paul@232 7
When an exception is raised, an exception instance is defined as the active
paul@232 8
exception. This active exception remains in force until either a new exception
paul@232 9
is raised in any handling of the exception, or upon exit of a handler where
paul@232 10
the active exception has been caught (thus resetting the active exception).
paul@232 11
paul@241 12
NOTE: Currently, if classes are used with "raise" statements, no instantiation
paul@241 13
NOTE: of such classes occurs. This should be remedied.
paul@241 14
paul@233 15
Instructions
paul@233 16
------------
paul@233 17
paul@233 18
StoreException records the current value reference using the exception
paul@233 19
register.
paul@233 20
paul@233 21
LoadException obtains the current exception and puts it in the value register.
paul@233 22
paul@233 23
CheckException checks the current exception against a class referenced by the
paul@233 24
current value.
paul@233 25
paul@233 26
ClearException resets the exception register.
paul@233 27
paul@232 28
Handlers
paul@232 29
========
paul@57 30
paul@109 31
An exception handler stack is defined such that when a try...except or
paul@109 32
try...finally block is entered, a new handler is defined.
paul@57 33
paul@109 34
When an exception is raised, the program jumps to the most recently defined
paul@109 35
handler. Inside the handler, the stack entry for the handler will be removed.
paul@57 36
paul@109 37
Depending on the nature of the handler and whether the exception is handled,
paul@109 38
the program may jump to the next most recent handler, and so on.
paul@57 39
paul@109 40
If no handler is defined when an exception is raised or re-raised, the program
paul@109 41
should terminate. This might be done by having a "handler #0" which explicitly
paul@109 42
terminates the program.
paul@232 43
paul@232 44
Instructions
paul@232 45
------------
paul@232 46
paul@232 47
PushHandler(block) defines an active handler at the location indicated by the
paul@232 48
given block.
paul@232 49
paul@232 50
PopHandler removes the active handler at or after the location indicated by
paul@232 51
the previously given block.