diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-01-24 10:43:22 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:39 +1000 |
commit | c52b491011be94e796ce8c28a16249ca62256084 (patch) | |
tree | 194336bdc3b89bd7a299174785938209a68127cf /tests/errors.tcl | |
parent | 16360e9b8aded842ab0d343969eb13354750b5bb (diff) | |
download | jimtcl-c52b491011be94e796ce8c28a16249ca62256084.zip jimtcl-c52b491011be94e796ce8c28a16249ca62256084.tar.gz jimtcl-c52b491011be94e796ce8c28a16249ca62256084.tar.bz2 |
Improve error handling
*: Improve stack trace handling on errors
*: Add 'info source'
*: Add 'info stacktrace'
*: Add errorInfo procedure to generate a human readable stack trace
*: Add tests for stacktrace
------------------------------------------------------------------------
Diffstat (limited to 'tests/errors.tcl')
-rw-r--r-- | tests/errors.tcl | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/errors.tcl b/tests/errors.tcl new file mode 100644 index 0000000..f6ecc32 --- /dev/null +++ b/tests/errors.tcl @@ -0,0 +1,58 @@ +# Package which can generate a variety of errors at known locations + +proc error_generator {type} { + switch $type \ + badcmd { + bogus command called + } \ + badvar { + incr bogus + } \ + error { + error bogus + } \ + interpbadvar { + set x "some $bogus text" + } \ + interpbadcmd { + set x "some $bogus text" + } \ + package { + package require dummy + } \ + source { + source dummy.tcl + } \ + badpackage { + package require bogus + } \ + default { + puts "Unknown type=$type" + } +} + + + + + + + +# line 40: Some empty lines above so that line numbers don't change +proc error_caller {type {method call}} { + switch $method \ + call { + error_generator $type + } \ + uplevel { + uplevel 1 [list error_generator $type] + } \ + eval { + eval [list error_generator $type] + } \ + evalstr { + eval error_generator $type + } \ + default { + puts "Unknown method=$method" + } +} |