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 >




Reply via email to