Re: Uncatchable exceptions

Ehsan Akhgari <[email protected]>
Newsgroups gmane.comp.mozilla.devel.jseng
Message-ID <[email protected]>
On 2016-05-02 11:58 PM, Boris Zbarsky wrote:
> On 5/2/16 11:07 PM, Ehsan Akhgari wrote:
>> Hmm, not sure why we would need to do all of this...  Now that I think
>> about it, I think we can have a flag that we set in
>> js::InternalCallOrConstruct() if that function returns false.  I _think_
>> that's the only place where these false return values can originate from?
> 
> Hmm.  I don't think so, in general.
> 
> For example, say we have some C++ that does a JS_GetProperty on an
> object.  The property has a scripted getter, that scripted getter
> triggers the slow script dialog, the user opts to stop the script.
> JS_GetProperty will return false with no exception pending, indicating
> an uncatchable exception.
> 
> Or another example: running a toplevel script via JS_ExecuteScript never
> comes through js::InternalCallOrConstruct as far as I can tell.

Oh, right.  :(

>>> 2)  We restrict the use of JS_IsUncatchableExceptionPending to the
>>> situation when false is known to have been returned.  In that case it
>>> just becomes !cx->hasPendingException().
>>
>> Wouldn't that essentially be JS_IsExceptionPending()?
> 
> No.  The whole point is that the uncatchable exception case is currently
> characterized by the following:
> 
> 1)  false was returned.
> 2)  JS_IsExceptionPending() is _false_.

Oh, I see.

So, for an embedder, is it possible to implement this by recording false
return values from JS APIs that can run code and then assume an
uncatchable exception if JS_IsExceptionPending() would be false?

>> The goal here is to expose whether execution was terminated because of
>> an exception that
>> is not catchable in JS.
> 
> Execution of which?  Are we just talking about execution of individual
> functions and toplevel scripts, or do we need to worry about the
> JS_GetProperty case above?

All of the above.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.