To elaborate a little more on André's comment:
$lzsc$thrownError is an error that was thrown from a block where
`#pragma "throwsErrors=true" was used to _prevent_ reporting (and
catching) of the error. (I refer to this as "guarding" the error
below.)
So, if the error we catch matches that "guarded" error, we _don't_
report it, we just immediately re-throw it. Any other error would
mean that the error is _not_ guarded (either it is the original error,
or it superseded a guarded error), so that error _will_ be reported by
the debugger (and then fall through and be re-thrown).
There is a slight inefficiency here. The debugger uses a separate
memo to avoid re-reporting unguarded errors, but we could optimize
that by, once the debugger has reported the error, then setting $lzsc
$thrownError to the reported error, to avoid recalling the exception
code as the error percolates up the stack.
On 2009-09-21, at 15:11, André Bargull wrote:
The error is only discarded if "catcherrors" is enabled (and the
"throwsError" pragma isn't used).
I was looking at the as3 generated code for an onclick handler
which came
from this source code
<button onclick="canvas.test(1)">click me </button>
It looks like this, when compiled in debug mode
public function $lzc$handle_onclick$$args$2Elzx_11_41_$m492 ($lzc
$ignore_$1)
{
try {
canvas.test(1);
}
catch ($lzsc$e) {
if ($lzsc$e is Error) {
if (lz["$lzsc$thrownError"] === $lzsc$e) {
throw $lzsc$e;
};
$lzsc$runtime.reportException("args.lzx", 11, $lzsc$e);
};
throw $lzsc$e;
}
}
If some error is thrown in the call to "test", this wrapper looks
like it
will always catch and then
rethrow it. Is this the expected behavior? I sort of thought we
were going
to catch and report the error
to our debugger, and then discard it rather than rethrowing it, in
this case
(debugger on)?
--
Henry Minsky
Software Architect
hminsky at laszlosystems.com <http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>