Hi JÄ™drek.

(C)
if (exception) {
if (exec->hadException()) {
*exception = toRef(exec, exec->exception());
exec->clearException();
} else
*exception = 0;
} else
exec->clearException();

In this case exception handler is always set correctly. Would it make sense to change the behavior?

As you said, this suggestion is slightly less efficient than the current behavior.

As Darin said, this change might lead to incorrect behavior if a developer tested against the newest JavaScriptCore but deployed on systems with older JavaScriptCores.

Another downside to this change is that a programmer who called two API functions in a row, forgetting to check for an exception between them, will not see the exception at all, since the second call will reset the exception value to 0.

I'm not sure that these three downsides are overwhelming. But what's the upside to weigh against them? It's slightly inconvenient to initialize the exception value to 0, but, assuming no exception is thrown, a programmer only has to do that once per block of code:

JSValueRef exception = 0;
a(..., &exception);
b(..., &exception);
c(..., &exception);

Do you have a use case where you end up initializing the exception value over and over again?

Or is your goal to save programmers who forget to initialize exception to 0?

Geoff