Posted to tcl by sebres at Tue Sep 17 18:55:25 GMT 2019view pretty
# ---------------------------------------------------
# 1.a catch is main command - catch is in call stack:
# ---------------------------------------------------
% catch { \
\
\
proc foo {} { \
\
\
error test
}
foo
}; puts $::errorInfo
test
while executing
"error test"
(procedure "foo" line 1)
invoked from within
"foo"
invoked from within
"catch { \
\
\
proc foo {} { \
\
\
error test
}
foo
}"
# ---------------------------------------------------
# 1.b now put eval around - catch is NOT in call stack:
# ---------------------------------------------------
% eval {catch { \
\
\
proc foo {} { \
\
\
error test
}
foo
}; puts $::errorInfo}
test
while executing
"error test"
(procedure "foo" line 1)
invoked from within
"foo"
# =======================================================================================
# ---------------------------------------------------
# 2. info frame vs. proc - [info frame] is in line 4, [error] in line 1
# ---------------------------------------------------
% eval {catch { \
\
\
proc foo {} { \
\
\
error [info frame 0]
}
foo
}; puts $::errorInfo}
type proc line 4 cmd {info frame 0} proc ::foo level 0
while executing
"error [info frame 0]"
(procedure "foo" line 1)
invoked from within
"foo"
# =======================================================================================
# ---------------------------------------------------
# 3.1 file - error in file, line 9
# ---------------------------------------------------
$ echo '\
\
\
proc foo {} { \
\
\
error test
}
foo
' > /tmp/test | ./tcltest /tmp/test
test
while executing
"error test"
(procedure "foo" line 1)
invoked from within
"foo"
(file "/tmp/test" line 9)
# ---------------------------------------------------
# 3.2 file (with eval around) - error in file, line 1
# ---------------------------------------------------
$ echo 'eval {\
\
\
proc foo {} { \
\
\
error test
}
foo
}' > /tmp/test | ./tcltest /tmp/test
test
while executing
"error test"
(procedure "foo" line 1)
invoked from within
"foo"
("eval" body line 3)
invoked from within
"eval {\
\
\
proc foo {} { \
\
\
error test
}
foo
}"
(file "/tmp/test" line 1)