<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[242596] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/242596">242596</a></dd>
<dt>Author</dt> <dd>mark.lam@apple.com</dd>
<dt>Date</dt> <dd>2019-03-07 02:16:58 -0800 (Thu, 07 Mar 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Exception is a JSCell, not a JSObject.
https://bugs.webkit.org/show_bug.cgi?id=195392

Reviewed by Saam Barati.

Source/JavaScriptCore:

Exception is a VM implementation construct to carry a stack trace for the point
where it is thrown from.  As a reminder, an Exception is needed because:
1. JS code can throw primitives as well that are non-cells.
2. Error objects capture the stack trace at the point where they are constructed,
   which is not always the same as the point where they are thrown (if they are
   thrown).

Hence, Exception should not be visible to JS code, and therefore should not be a
JSObject.  Hence, it should not inherit from JSDestructibleObject.

This patch changes the following:

1. Exception now inherits directly from JSCell instead.

2. Places where we return an Exception masquerading as a JSObject* are now
   updated to return a nullptr when we encounter an exception.

3. We still return Exception* as JSValue or EncodedJSValue when we encounter an
   exception in functions that return JSValue or EncodedJSValue.  This is because
   the number that implements the following pattern is too numerous:

        return throw<Some Error>(...)

   We'll leave these as is for now.

* bytecode/CodeBlock.h:
(JSC::ScriptExecutable::prepareForExecution):
* interpreter/Interpreter.cpp:
(JSC::Interpreter::executeProgram):
(JSC::Interpreter::executeCall):
(JSC::Interpreter::executeConstruct):
(JSC::Interpreter::prepareForRepeatCall):
(JSC::Interpreter::execute):
(JSC::Interpreter::executeModuleProgram):
* jit/JITOperations.cpp:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::setUpCall):
* runtime/ConstructData.cpp:
(JSC::construct):
* runtime/Error.cpp:
(JSC::throwConstructorCannotBeCalledAsFunctionTypeError):
(JSC::throwTypeError):
(JSC::throwSyntaxError):
* runtime/Error.h:
(JSC::throwRangeError):
* runtime/Exception.cpp:
(JSC::Exception::createStructure):
* runtime/Exception.h:
* runtime/ExceptionHelpers.cpp:
(JSC::throwOutOfMemoryError):
(JSC::throwStackOverflowError):
(JSC::throwTerminatedExecutionException):
* runtime/ExceptionHelpers.h:
* runtime/FunctionConstructor.cpp:
(JSC::constructFunction):
(JSC::constructFunctionSkippingEvalEnabledCheck):
* runtime/IntlPluralRules.cpp:
(JSC::IntlPluralRules::resolvedOptions):
* runtime/JSGenericTypedArrayViewConstructorInlines.h:
(JSC::constructGenericTypedArrayViewWithArguments):
* runtime/JSObject.h:
* runtime/ObjectConstructor.cpp:
(JSC::objectConstructorSeal):
(JSC::objectConstructorFreeze):
* runtime/ProgramExecutable.cpp:
(JSC::ProgramExecutable::initializeGlobalProperties):
* runtime/RegExpConstructor.cpp:
(JSC::regExpCreate):
(JSC::constructRegExp):
* runtime/ScriptExecutable.cpp:
(JSC::ScriptExecutable::newCodeBlockFor):
(JSC::ScriptExecutable::prepareForExecutionImpl):
* runtime/ScriptExecutable.h:
* runtime/ThrowScope.cpp:
(JSC::ThrowScope::throwException):
* runtime/ThrowScope.h:
(JSC::ThrowScope::throwException):
(JSC::throwException):
* runtime/VM.cpp:
(JSC::VM::throwException):
* runtime/VM.h:

Source/WebCore:

* bridge/objc/objc_utility.h:
* bridge/objc/objc_utility.mm:
(JSC::Bindings::throwError):
* bridge/runtime_object.cpp:
(JSC::Bindings::RuntimeObject::throwInvalidAccessError):
* bridge/runtime_object.h:

Source/WebKit:

* WebProcess/Plugins/Netscape/JSNPObject.cpp:
(WebKit::JSNPObject::throwInvalidAccessError):
* WebProcess/Plugins/Netscape/JSNPObject.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockh">trunk/Source/JavaScriptCore/bytecode/CodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterInterpretercpp">trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeConstructDatacpp">trunk/Source/JavaScriptCore/runtime/ConstructData.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorcpp">trunk/Source/JavaScriptCore/runtime/Error.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorh">trunk/Source/JavaScriptCore/runtime/Error.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExceptioncpp">trunk/Source/JavaScriptCore/runtime/Exception.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExceptionh">trunk/Source/JavaScriptCore/runtime/Exception.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExceptionHelperscpp">trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExceptionHelpersh">trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeIntlPluralRulescpp">trunk/Source/JavaScriptCore/runtime/IntlPluralRules.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewConstructorInlinesh">trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeObjectConstructorcpp">trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeProgramExecutablecpp">trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeScriptExecutablecpp">trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeScriptExecutableh">trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeThrowScopecpp">trunk/Source/JavaScriptCore/runtime/ThrowScope.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeThrowScopeh">trunk/Source/JavaScriptCore/runtime/ThrowScope.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMcpp">trunk/Source/JavaScriptCore/runtime/VM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMh">trunk/Source/JavaScriptCore/runtime/VM.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebridgeobjcobjc_utilityh">trunk/Source/WebCore/bridge/objc/objc_utility.h</a></li>
<li><a href="#trunkSourceWebCorebridgeobjcobjc_utilitymm">trunk/Source/WebCore/bridge/objc/objc_utility.mm</a></li>
<li><a href="#trunkSourceWebCorebridgeruntime_objectcpp">trunk/Source/WebCore/bridge/runtime_object.cpp</a></li>
<li><a href="#trunkSourceWebCorebridgeruntime_objecth">trunk/Source/WebCore/bridge/runtime_object.h</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitWebProcessPluginsNetscapeJSNPObjectcpp">trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.cpp</a></li>
<li><a href="#trunkSourceWebKitWebProcessPluginsNetscapeJSNPObjecth">trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog    2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/ChangeLog       2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,3 +1,92 @@
</span><ins>+2019-03-06  Mark Lam  <mark.lam@apple.com>
+
+        Exception is a JSCell, not a JSObject.
+        https://bugs.webkit.org/show_bug.cgi?id=195392
+
+        Reviewed by Saam Barati.
+
+        Exception is a VM implementation construct to carry a stack trace for the point
+        where it is thrown from.  As a reminder, an Exception is needed because:
+        1. JS code can throw primitives as well that are non-cells.
+        2. Error objects capture the stack trace at the point where they are constructed,
+           which is not always the same as the point where they are thrown (if they are
+           thrown).
+
+        Hence, Exception should not be visible to JS code, and therefore should not be a
+        JSObject.  Hence, it should not inherit from JSDestructibleObject.
+
+        This patch changes the following:
+
+        1. Exception now inherits directly from JSCell instead.
+
+        2. Places where we return an Exception masquerading as a JSObject* are now
+           updated to return a nullptr when we encounter an exception.
+
+        3. We still return Exception* as JSValue or EncodedJSValue when we encounter an
+           exception in functions that return JSValue or EncodedJSValue.  This is because
+           the number that implements the following pattern is too numerous:
+
+                return throw<Some Error>(...)
+
+           We'll leave these as is for now.
+
+        * bytecode/CodeBlock.h:
+        (JSC::ScriptExecutable::prepareForExecution):
+        * interpreter/Interpreter.cpp:
+        (JSC::Interpreter::executeProgram):
+        (JSC::Interpreter::executeCall):
+        (JSC::Interpreter::executeConstruct):
+        (JSC::Interpreter::prepareForRepeatCall):
+        (JSC::Interpreter::execute):
+        (JSC::Interpreter::executeModuleProgram):
+        * jit/JITOperations.cpp:
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::setUpCall):
+        * runtime/ConstructData.cpp:
+        (JSC::construct):
+        * runtime/Error.cpp:
+        (JSC::throwConstructorCannotBeCalledAsFunctionTypeError):
+        (JSC::throwTypeError):
+        (JSC::throwSyntaxError):
+        * runtime/Error.h:
+        (JSC::throwRangeError):
+        * runtime/Exception.cpp:
+        (JSC::Exception::createStructure):
+        * runtime/Exception.h:
+        * runtime/ExceptionHelpers.cpp:
+        (JSC::throwOutOfMemoryError):
+        (JSC::throwStackOverflowError):
+        (JSC::throwTerminatedExecutionException):
+        * runtime/ExceptionHelpers.h:
+        * runtime/FunctionConstructor.cpp:
+        (JSC::constructFunction):
+        (JSC::constructFunctionSkippingEvalEnabledCheck):
+        * runtime/IntlPluralRules.cpp:
+        (JSC::IntlPluralRules::resolvedOptions):
+        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
+        (JSC::constructGenericTypedArrayViewWithArguments):
+        * runtime/JSObject.h:
+        * runtime/ObjectConstructor.cpp:
+        (JSC::objectConstructorSeal):
+        (JSC::objectConstructorFreeze):
+        * runtime/ProgramExecutable.cpp:
+        (JSC::ProgramExecutable::initializeGlobalProperties):
+        * runtime/RegExpConstructor.cpp:
+        (JSC::regExpCreate):
+        (JSC::constructRegExp):
+        * runtime/ScriptExecutable.cpp:
+        (JSC::ScriptExecutable::newCodeBlockFor):
+        (JSC::ScriptExecutable::prepareForExecutionImpl):
+        * runtime/ScriptExecutable.h:
+        * runtime/ThrowScope.cpp:
+        (JSC::ThrowScope::throwException):
+        * runtime/ThrowScope.h:
+        (JSC::ThrowScope::throwException):
+        (JSC::throwException):
+        * runtime/VM.cpp:
+        (JSC::VM::throwException):
+        * runtime/VM.h:
+
</ins><span class="cx"> 2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>
</span><span class="cx"> 
</span><span class="cx">         [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.h 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.h    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1034,7 +1034,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template <typename ExecutableType>
</span><del>-JSObject* ScriptExecutable::prepareForExecution(VM& vm, JSFunction* function, JSScope* scope, CodeSpecializationKind kind, CodeBlock*& resultCodeBlock)
</del><ins>+Exception* ScriptExecutable::prepareForExecution(VM& vm, JSFunction* function, JSScope* scope, CodeSpecializationKind kind, CodeBlock*& resultCodeBlock)
</ins><span class="cx"> {
</span><span class="cx">     if (hasJITCodeFor(kind)) {
</span><span class="cx">         if (std::is_same<ExecutableType, EvalExecutable>::value)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterInterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp  2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp     2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -808,8 +808,8 @@
</span><span class="cx">     ProgramCodeBlock* codeBlock;
</span><span class="cx">     {
</span><span class="cx">         CodeBlock* tempCodeBlock;
</span><del>-        JSObject* error = program->prepareForExecution<ProgramExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
</del><ins>+        Exception* error = program->prepareForExecution<ProgramExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
+        EXCEPTION_ASSERT(throwScope.exception() == error);
</ins><span class="cx">         if (UNLIKELY(error))
</span><span class="cx">             return checkedReturn(error);
</span><span class="cx">         codeBlock = jsCast<ProgramCodeBlock*>(tempCodeBlock);
</span><span class="lines">@@ -866,8 +866,8 @@
</span><span class="cx"> 
</span><span class="cx">     if (isJSCall) {
</span><span class="cx">         // Compile the callee:
</span><del>-        JSObject* compileError = callData.js.functionExecutable->prepareForExecution<FunctionExecutable>(vm, jsCast<JSFunction*>(function), scope, CodeForCall, newCodeBlock);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(compileError));
</del><ins>+        Exception* compileError = callData.js.functionExecutable->prepareForExecution<FunctionExecutable>(vm, jsCast<JSFunction*>(function), scope, CodeForCall, newCodeBlock);
+        EXCEPTION_ASSERT(throwScope.exception() == compileError);
</ins><span class="cx">         if (UNLIKELY(!!compileError))
</span><span class="cx">             return checkedReturn(compileError);
</span><span class="cx"> 
</span><span class="lines">@@ -909,8 +909,10 @@
</span><span class="cx">     ASSERT(!vm.isCollectorBusyOnCurrentThread());
</span><span class="cx">     // We throw in this case because we have to return something "valid" but we're
</span><span class="cx">     // already in an invalid state.
</span><del>-    if (vm.isCollectorBusyOnCurrentThread())
-        return checkedReturn(throwStackOverflowError(callFrame, throwScope));
</del><ins>+    if (UNLIKELY(vm.isCollectorBusyOnCurrentThread())) {
+        throwStackOverflowError(callFrame, throwScope);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     bool isJSConstruct = (constructType == ConstructType::JS);
</span><span class="cx">     JSScope* scope = nullptr;
</span><span class="lines">@@ -928,15 +930,17 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     VMEntryScope entryScope(vm, globalObject);
</span><del>-    if (UNLIKELY(!vm.isSafeToRecurseSoft()))
-        return checkedReturn(throwStackOverflowError(callFrame, throwScope));
</del><ins>+    if (UNLIKELY(!vm.isSafeToRecurseSoft())) {
+        throwStackOverflowError(callFrame, throwScope);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     if (isJSConstruct) {
</span><span class="cx">         // Compile the callee:
</span><del>-        JSObject* compileError = constructData.js.functionExecutable->prepareForExecution<FunctionExecutable>(vm, jsCast<JSFunction*>(constructor), scope, CodeForConstruct, newCodeBlock);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(compileError));
</del><ins>+        Exception* compileError = constructData.js.functionExecutable->prepareForExecution<FunctionExecutable>(vm, jsCast<JSFunction*>(constructor), scope, CodeForConstruct, newCodeBlock);
+        EXCEPTION_ASSERT(throwScope.exception() == compileError);
</ins><span class="cx">         if (UNLIKELY(!!compileError))
</span><del>-            return checkedReturn(compileError);
</del><ins>+            return nullptr;
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(!!newCodeBlock);
</span><span class="cx">         newCodeBlock->m_shouldAlwaysBeInlined = false;
</span><span class="lines">@@ -946,7 +950,7 @@
</span><span class="cx">     VMTraps::Mask mask(VMTraps::NeedTermination, VMTraps::NeedWatchdogCheck);
</span><span class="cx">     if (UNLIKELY(vm.needTrapHandling(mask))) {
</span><span class="cx">         vm.handleTraps(callFrame, mask);
</span><del>-        RETURN_IF_EXCEPTION(throwScope, throwScope.exception());
</del><ins>+        RETURN_IF_EXCEPTION(throwScope, nullptr);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ProtoCallFrame protoCallFrame;
</span><span class="lines">@@ -981,8 +985,8 @@
</span><span class="cx"> 
</span><span class="cx">     // Compile the callee:
</span><span class="cx">     CodeBlock* newCodeBlock;
</span><del>-    JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(vm, function, scope, CodeForCall, newCodeBlock);
-    EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
</del><ins>+    Exception* error = functionExecutable->prepareForExecution<FunctionExecutable>(vm, function, scope, CodeForCall, newCodeBlock);
+    EXCEPTION_ASSERT(throwScope.exception() == error);
</ins><span class="cx">     if (UNLIKELY(error))
</span><span class="cx">         return CallFrameClosure();
</span><span class="cx">     newCodeBlock->m_shouldAlwaysBeInlined = false;
</span><span class="lines">@@ -1039,8 +1043,8 @@
</span><span class="cx">     EvalCodeBlock* codeBlock;
</span><span class="cx">     {
</span><span class="cx">         CodeBlock* tempCodeBlock;
</span><del>-        JSObject* compileError = eval->prepareForExecution<EvalExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(compileError));
</del><ins>+        Exception* compileError = eval->prepareForExecution<EvalExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
+        EXCEPTION_ASSERT(throwScope.exception() == compileError);
</ins><span class="cx">         if (UNLIKELY(!!compileError))
</span><span class="cx">             return checkedReturn(compileError);
</span><span class="cx">         codeBlock = jsCast<EvalCodeBlock*>(tempCodeBlock);
</span><span class="lines">@@ -1163,8 +1167,8 @@
</span><span class="cx">     ModuleProgramCodeBlock* codeBlock;
</span><span class="cx">     {
</span><span class="cx">         CodeBlock* tempCodeBlock;
</span><del>-        JSObject* compileError = executable->prepareForExecution<ModuleProgramExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(compileError));
</del><ins>+        Exception* compileError = executable->prepareForExecution<ModuleProgramExecutable>(vm, nullptr, scope, CodeForCall, tempCodeBlock);
+        EXCEPTION_ASSERT(throwScope.exception() == compileError);
</ins><span class="cx">         if (UNLIKELY(!!compileError))
</span><span class="cx">             return checkedReturn(compileError);
</span><span class="cx">         codeBlock = jsCast<ModuleProgramCodeBlock*>(tempCodeBlock);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp   2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1042,9 +1042,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         CodeBlock** codeBlockSlot = execCallee->addressOfCodeBlock();
</span><del>-        JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, *codeBlockSlot);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
-        if (error)
</del><ins>+        Exception* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, *codeBlockSlot);
+        EXCEPTION_ASSERT(throwScope.exception() == error);
+        if (UNLIKELY(error))
</ins><span class="cx">             return handleThrowException();
</span><span class="cx">         codeBlock = *codeBlockSlot;
</span><span class="cx">         ArityCheckMode arity;
</span><span class="lines">@@ -1098,9 +1098,9 @@
</span><span class="cx"> 
</span><span class="cx">         RELEASE_ASSERT(isCall(kind) || functionExecutable->constructAbility() != ConstructAbility::CannotConstruct);
</span><span class="cx">         
</span><del>-        JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, codeBlock);
-        EXCEPTION_ASSERT_UNUSED(throwScope, throwScope.exception() == reinterpret_cast<Exception*>(error));
-        if (error)
</del><ins>+        Exception* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, codeBlock);
+        EXCEPTION_ASSERT_UNUSED(throwScope, throwScope.exception() == error);
+        if (UNLIKELY(error))
</ins><span class="cx">             return;
</span><span class="cx">         unsigned argumentStackSlots = callLinkInfo->maxNumArguments();
</span><span class="cx">         if (argumentStackSlots < static_cast<size_t>(codeBlock->numParameters()))
</span><span class="lines">@@ -1147,9 +1147,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         CodeBlock** codeBlockSlot = execCallee->addressOfCodeBlock();
</span><del>-        JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, function, scope, kind, *codeBlockSlot);
-        EXCEPTION_ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
-        if (error) {
</del><ins>+        Exception* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, function, scope, kind, *codeBlockSlot);
+        EXCEPTION_ASSERT(throwScope.exception() == error);
+        if (UNLIKELY(error)) {
</ins><span class="cx">             return encodeResult(
</span><span class="cx">                 vm->getCTIStub(throwExceptionFromCallSlowPathGenerator).retaggedCode<JSEntryPtrTag>().executableAddress(),
</span><span class="cx">                 reinterpret_cast<void*>(KeepTheFrame));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp     2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1527,7 +1527,7 @@
</span><span class="cx">             LLINT_CALL_THROW(exec, createNotAConstructorError(exec, callee));
</span><span class="cx"> 
</span><span class="cx">         CodeBlock** codeBlockSlot = execCallee->addressOfCodeBlock();
</span><del>-        JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(vm, callee, scope, kind, *codeBlockSlot);
</del><ins>+        Exception* error = functionExecutable->prepareForExecution<FunctionExecutable>(vm, callee, scope, kind, *codeBlockSlot);
</ins><span class="cx">         EXCEPTION_ASSERT(throwScope.exception() == error);
</span><span class="cx">         if (UNLIKELY(error))
</span><span class="cx">             LLINT_CALL_THROW(exec, error);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeConstructDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ConstructData.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ConstructData.cpp    2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ConstructData.cpp       2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008, 2016 Apple Inc. All Rights Reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All Rights Reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -41,8 +41,10 @@
</span><span class="cx"> 
</span><span class="cx">     ConstructData constructData;
</span><span class="cx">     ConstructType constructType = getConstructData(vm, constructorObject, constructData);
</span><del>-    if (constructType == ConstructType::None)
-        return throwTypeError(exec, scope, errorMessage);
</del><ins>+    if (UNLIKELY(constructType == ConstructType::None)) {
+        throwTypeError(exec, scope, errorMessage);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     RELEASE_AND_RETURN(scope, construct(exec, constructorObject, constructType, constructData, args, constructorObject));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Error.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Error.cpp    2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/Error.cpp       2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
</span><span class="cx">  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
</span><del>- *  Copyright (C) 2003-2017 Apple Inc. All rights reserved.
</del><ins>+ *  Copyright (C) 2003-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *  Copyright (C) 2007 Eric Seidel (eric@webkit.org)
</span><span class="cx">  *
</span><span class="cx">  *  This library is free software; you can redistribute it and/or
</span><span class="lines">@@ -260,32 +260,32 @@
</span><span class="cx">     return error;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwConstructorCannotBeCalledAsFunctionTypeError(ExecState* exec, ThrowScope& scope, const char* constructorName)
</del><ins>+Exception* throwConstructorCannotBeCalledAsFunctionTypeError(ExecState* exec, ThrowScope& scope, const char* constructorName)
</ins><span class="cx"> {
</span><span class="cx">     return throwTypeError(exec, scope, makeString("calling ", constructorName, " constructor without new is invalid"));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwTypeError(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* throwTypeError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createTypeError(exec));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwTypeError(ExecState* exec, ThrowScope& scope, ASCIILiteral errorMessage)
</del><ins>+Exception* throwTypeError(ExecState* exec, ThrowScope& scope, ASCIILiteral errorMessage)
</ins><span class="cx"> {
</span><span class="cx">     return throwTypeError(exec, scope, String(errorMessage));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwTypeError(ExecState* exec, ThrowScope& scope, const String& message)
</del><ins>+Exception* throwTypeError(ExecState* exec, ThrowScope& scope, const String& message)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createTypeError(exec, message));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwSyntaxError(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* throwSyntaxError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createSyntaxError(exec, "Syntax error"_s));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwSyntaxError(ExecState* exec, ThrowScope& scope, const String& message)
</del><ins>+Exception* throwSyntaxError(ExecState* exec, ThrowScope& scope, const String& message)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createSyntaxError(exec, message));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Error.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Error.h      2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/Error.h 2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
</span><span class="cx">  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
</span><del>- *  Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
</del><ins>+ *  Copyright (C) 2003-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  *  This library is free software; you can redistribute it and/or
</span><span class="cx">  *  modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include "ErrorInstance.h"
</span><span class="cx"> #include "ErrorType.h"
</span><ins>+#include "Exception.h"
</ins><span class="cx"> #include "InternalFunction.h"
</span><span class="cx"> #include "JSObject.h"
</span><span class="cx"> #include "ThrowScope.h"
</span><span class="lines">@@ -76,13 +77,13 @@
</span><span class="cx"> // Methods to throw Errors.
</span><span class="cx"> 
</span><span class="cx"> // Convenience wrappers, create an throw an exception with a default message.
</span><del>-JS_EXPORT_PRIVATE JSObject* throwConstructorCannotBeCalledAsFunctionTypeError(ExecState*, ThrowScope&, const char* constructorName);
-JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&);
-JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, ASCIILiteral errorMessage);
-JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, const String& errorMessage);
-JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&);
-JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&, const String& errorMessage);
-inline JSObject* throwRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return throwException(state, scope, createRangeError(state, errorMessage)); }
</del><ins>+JS_EXPORT_PRIVATE Exception* throwConstructorCannotBeCalledAsFunctionTypeError(ExecState*, ThrowScope&, const char* constructorName);
+JS_EXPORT_PRIVATE Exception* throwTypeError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE Exception* throwTypeError(ExecState*, ThrowScope&, ASCIILiteral errorMessage);
+JS_EXPORT_PRIVATE Exception* throwTypeError(ExecState*, ThrowScope&, const String& errorMessage);
+JS_EXPORT_PRIVATE Exception* throwSyntaxError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE Exception* throwSyntaxError(ExecState*, ThrowScope&, const String& errorMessage);
+inline Exception* throwRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return throwException(state, scope, createRangeError(state, errorMessage)); }
</ins><span class="cx"> JS_EXPORT_PRIVATE JSValue throwDOMAttributeGetterTypeError(ExecState*, ThrowScope&, const ClassInfo*, PropertyName);
</span><span class="cx"> 
</span><span class="cx"> // Convenience wrappers, wrap result as an EncodedJSValue.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Exception.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Exception.cpp        2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/Exception.cpp   2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-const ClassInfo Exception::s_info = { "Exception", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(Exception) };
</del><ins>+const ClassInfo Exception::s_info = { "Exception", nullptr, nullptr, nullptr, CREATE_METHOD_TABLE(Exception) };
</ins><span class="cx"> 
</span><span class="cx"> Exception* Exception::create(VM& vm, JSValue thrownValue, StackCaptureAction action)
</span><span class="cx"> {
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx"> Structure* Exception::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
</span><span class="cx"> {
</span><del>-    return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
</del><ins>+    return Structure::create(vm, globalObject, prototype, TypeInfo(CellType, StructureFlags), info());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Exception::visitChildren(JSCell* cell, SlotVisitor& visitor)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Exception.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Exception.h  2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/Exception.h     2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -31,10 +31,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx">     
</span><del>-class Exception final : public JSDestructibleObject {
</del><ins>+class Exception final : public JSCell {
</ins><span class="cx"> public:
</span><del>-    typedef JSDestructibleObject Base;
</del><ins>+    using Base = JSCell;
</ins><span class="cx">     static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
</span><ins>+    static const bool needsDestruction = true;
</ins><span class="cx"> 
</span><span class="cx">     enum StackCaptureAction {
</span><span class="cx">         CaptureStack,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExceptionHelperscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008-2017 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -324,12 +324,12 @@
</span><span class="cx">     return createReferenceError(exec, "Cannot access uninitialized variable.");
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwOutOfMemoryError(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* throwOutOfMemoryError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createOutOfMemoryError(exec));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwStackOverflowError(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* throwStackOverflowError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     VM& vm = exec->vm();
</span><span class="cx">     ErrorHandlingScope errorScope(vm);
</span><span class="lines">@@ -336,7 +336,7 @@
</span><span class="cx">     return throwException(exec, scope, createStackOverflowError(exec));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* throwTerminatedExecutionException(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* throwTerminatedExecutionException(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     VM& vm = exec->vm();
</span><span class="cx">     ErrorHandlingScope errorScope(vm);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExceptionHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.h   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.h      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "ErrorInstance.h"
</span><ins>+#include "Exception.h"
</ins><span class="cx"> #include "JSObject.h"
</span><span class="cx"> #include "ThrowScope.h"
</span><span class="cx"> 
</span><span class="lines">@@ -55,9 +56,9 @@
</span><span class="cx"> JSObject* createErrorForInvalidGlobalAssignment(ExecState*, const String&);
</span><span class="cx"> JSString* errorDescriptionForValue(ExecState*, JSValue);
</span><span class="cx"> 
</span><del>-JS_EXPORT_PRIVATE JSObject* throwOutOfMemoryError(ExecState*, ThrowScope&);
-JS_EXPORT_PRIVATE JSObject* throwStackOverflowError(ExecState*, ThrowScope&);
-JS_EXPORT_PRIVATE JSObject* throwTerminatedExecutionException(ExecState*, ThrowScope&);
</del><ins>+JS_EXPORT_PRIVATE Exception* throwOutOfMemoryError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE Exception* throwStackOverflowError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE Exception* throwTerminatedExecutionException(ExecState*, ThrowScope&);
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class TerminatedExecutionError final : public JSNonFinalObject {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp      2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp 2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
</span><del>- *  Copyright (C) 2003-2017 Apple Inc. All rights reserved.
</del><ins>+ *  Copyright (C) 2003-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  *  This library is free software; you can redistribute it and/or
</span><span class="cx">  *  modify it under the terms of the GNU Lesser General Public
</span><span class="lines">@@ -69,8 +69,10 @@
</span><span class="cx">     VM& vm = exec->vm();
</span><span class="cx">     auto scope = DECLARE_THROW_SCOPE(vm);
</span><span class="cx"> 
</span><del>-    if (!globalObject->evalEnabled())
-        return throwException(exec, scope, createEvalError(exec, globalObject->evalDisabledErrorMessage()));
</del><ins>+    if (UNLIKELY(!globalObject->evalEnabled())) {
+        throwException(exec, scope, createEvalError(exec, globalObject->evalDisabledErrorMessage()));
+        return nullptr;
+    }
</ins><span class="cx">     RELEASE_AND_RETURN(scope, constructFunctionSkippingEvalEnabledCheck(exec, globalObject, args, functionName, sourceOrigin, sourceURL, position, -1, functionConstructionMode, newTarget));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -145,9 +147,10 @@
</span><span class="cx">     SourceCode source = makeSource(program, sourceOrigin, URL({ }, sourceURL), position);
</span><span class="cx">     JSObject* exception = nullptr;
</span><span class="cx">     FunctionExecutable* function = FunctionExecutable::fromGlobalCode(functionName, *exec, source, exception, overrideLineNumber, functionConstructorParametersEndPosition);
</span><del>-    if (!function) {
</del><ins>+    if (UNLIKELY(!function)) {
</ins><span class="cx">         ASSERT(exception);
</span><del>-        return throwException(exec, scope, exception);
</del><ins>+        throwException(exec, scope, exception);
+        return nullptr;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     Structure* structure = nullptr;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeIntlPluralRulescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/IntlPluralRules.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/IntlPluralRules.cpp  2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/IntlPluralRules.cpp     2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2018 Andy VanWagoner (andy@vanwagoner.family)
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -200,8 +201,10 @@
</span><span class="cx"> 
</span><span class="cx">     // 13.4.4 Intl.PluralRules.prototype.resolvedOptions ()
</span><span class="cx">     // https://tc39.github.io/ecma402/#sec-intl.pluralrules.prototype.resolvedoptions
</span><del>-    if (!m_initializedPluralRules)
-        return throwTypeError(&exec, scope, "Intl.PluralRules.prototype.resolvedOptions called on value that's not an object initialized as a PluralRules"_s);
</del><ins>+    if (UNLIKELY(!m_initializedPluralRules)) {
+        throwTypeError(&exec, scope, "Intl.PluralRules.prototype.resolvedOptions called on value that's not an object initialized as a PluralRules"_s);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     JSObject* options = constructEmptyObject(&exec);
</span><span class="cx">     options->putDirect(vm, vm.propertyNames->locale, jsNontrivialString(&exec, m_locale));
</span><span class="lines">@@ -217,8 +220,10 @@
</span><span class="cx"> #if HAVE(ICU_PLURALRULES_KEYWORDS)
</span><span class="cx">     JSGlobalObject* globalObject = exec.jsCallee()->globalObject(vm);
</span><span class="cx">     JSArray* categories = JSArray::tryCreate(vm, globalObject->arrayStructureForIndexingTypeDuringAllocation(ArrayWithContiguous), 0);
</span><del>-    if (!categories)
-        return throwOutOfMemoryError(&exec, scope);
</del><ins>+    if (UNLIKELY(!categories)) {
+        throwOutOfMemoryError(&exec, scope);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     UErrorCode status = U_ZERO_ERROR;
</span><span class="cx">     auto keywords = std::unique_ptr<UEnumeration, UEnumerationDeleter>(uplrules_getKeywords(m_pluralRules.get(), &status));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewConstructorInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h  2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h     2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013-2017 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -128,8 +128,10 @@
</span><span class="cx">         if (lengthOpt)
</span><span class="cx">             length = lengthOpt.value();
</span><span class="cx">         else {
</span><del>-            if ((buffer->byteLength() - offset) % ViewClass::elementSize)
-                return throwRangeError(exec, scope, "ArrayBuffer length minus the byteOffset is not a multiple of the element size"_s);
</del><ins>+            if (UNLIKELY((buffer->byteLength() - offset) % ViewClass::elementSize)) {
+                throwRangeError(exec, scope, "ArrayBuffer length minus the byteOffset is not a multiple of the element size"_s);
+                return nullptr;
+            }
</ins><span class="cx">             length = (buffer->byteLength() - offset) / ViewClass::elementSize;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -137,8 +139,10 @@
</span><span class="cx">     }
</span><span class="cx">     ASSERT(!offset && !lengthOpt);
</span><span class="cx">     
</span><del>-    if (ViewClass::TypedArrayStorageType == TypeDataView)
-        return throwTypeError(exec, scope, "Expected ArrayBuffer for the first argument."_s);
</del><ins>+    if (UNLIKELY(ViewClass::TypedArrayStorageType == TypeDataView)) {
+        throwTypeError(exec, scope, "Expected ArrayBuffer for the first argument."_s);
+        return nullptr;
+    }
</ins><span class="cx">     
</span><span class="cx">     // For everything but DataView, we allow construction with any of:
</span><span class="cx">     // - Another array. This creates a copy of the of that array.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
</span><span class="cx">  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
</span><del>- *  Copyright (C) 2003-2018 Apple Inc. All rights reserved.
</del><ins>+ *  Copyright (C) 2003-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  *  This library is free software; you can redistribute it and/or
</span><span class="cx">  *  modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -58,6 +58,7 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+class Exception;
</ins><span class="cx"> class GetterSetter;
</span><span class="cx"> class InternalFunction;
</span><span class="cx"> class JSFunction;
</span><span class="lines">@@ -70,7 +71,7 @@
</span><span class="cx"> struct HashTable;
</span><span class="cx"> struct HashTableValue;
</span><span class="cx"> 
</span><del>-JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, const String&);
</del><ins>+JS_EXPORT_PRIVATE Exception* throwTypeError(ExecState*, ThrowScope&, const String&);
</ins><span class="cx"> extern JS_EXPORT_PRIVATE const ASCIILiteral NonExtensibleObjectPropertyDefineError;
</span><span class="cx"> extern JS_EXPORT_PRIVATE const ASCIILiteral ReadonlyPropertyWriteError;
</span><span class="cx"> extern JS_EXPORT_PRIVATE const ASCIILiteral ReadonlyPropertyChangeError;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeObjectConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp        2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp   2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -778,8 +778,10 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = setIntegrityLevel<IntegrityLevel::Sealed>(exec, vm, object);
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, nullptr);
</span><del>-    if (UNLIKELY(!success))
-        return throwTypeError(exec, scope, "Unable to prevent extension in Object.seal"_s);
</del><ins>+    if (UNLIKELY(!success)) {
+        throwTypeError(exec, scope, "Unable to prevent extension in Object.seal"_s);
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     return object;
</span><span class="cx"> }
</span><span class="lines">@@ -809,8 +811,10 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = setIntegrityLevel<IntegrityLevel::Frozen>(exec, vm, object);
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, nullptr);
</span><del>-    if (!success)
-        return throwTypeError(exec, scope, "Unable to prevent extension in Object.freeze"_s);
</del><ins>+    if (UNLIKELY(!success)) {
+        throwTypeError(exec, scope, "Unable to prevent extension in Object.freeze"_s);
+        return nullptr;
+    }
</ins><span class="cx">     return object;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeProgramExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp        2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp   2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009-2017 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx">         for (auto& entry : lexicalDeclarations) {
</span><span class="cx">             // The ES6 spec says that RestrictedGlobalProperty can't be shadowed.
</span><span class="cx">             GlobalPropertyLookUpStatus status = hasRestrictedGlobalProperty(exec, globalObject, entry.key.get());
</span><del>-            RETURN_IF_EXCEPTION(throwScope, throwScope.exception());
</del><ins>+            RETURN_IF_EXCEPTION(throwScope, nullptr);
</ins><span class="cx">             switch (status) {
</span><span class="cx">             case GlobalPropertyLookUpStatus::NonConfigurable:
</span><span class="cx">                 return createSyntaxError(exec, makeString("Can't create duplicate variable that shadows a global property: '", String(entry.key.get()), "'"));
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             bool hasProperty = globalLexicalEnvironment->hasProperty(exec, entry.key.get());
</span><del>-            RETURN_IF_EXCEPTION(throwScope, throwScope.exception());
</del><ins>+            RETURN_IF_EXCEPTION(throwScope, nullptr);
</ins><span class="cx">             if (hasProperty) {
</span><span class="cx">                 if (UNLIKELY(entry.value.isConst() && !vm.globalConstRedeclarationShouldThrow() && !isStrictMode())) {
</span><span class="cx">                     // We only allow "const" duplicate declarations under this setting.
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">         if (!globalLexicalEnvironment->isEmpty()) {
</span><span class="cx">             for (auto& entry : variableDeclarations) {
</span><span class="cx">                 bool hasProperty = globalLexicalEnvironment->hasProperty(exec, entry.key.get());
</span><del>-                RETURN_IF_EXCEPTION(throwScope, throwScope.exception());
</del><ins>+                RETURN_IF_EXCEPTION(throwScope, nullptr);
</ins><span class="cx">                 if (hasProperty)
</span><span class="cx">                     return createSyntaxError(exec, makeString("Can't create duplicate variable: '", String(entry.key.get()), "'"));
</span><span class="cx">             }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp   2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
</span><del>- *  Copyright (C) 2003, 2007-2008, 2016 Apple Inc. All Rights Reserved.
</del><ins>+ *  Copyright (C) 2003-2019 Apple Inc. All Rights Reserved.
</ins><span class="cx">  *  Copyright (C) 2009 Torch Mobile, Inc.
</span><span class="cx">  *
</span><span class="cx">  *  This library is free software; you can redistribute it and/or
</span><span class="lines">@@ -210,8 +210,10 @@
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     RegExp* regExp = RegExp::create(vm, pattern, flags);
</span><del>-    if (!regExp->isValid())
-        return throwException(exec, scope, regExp->errorToThrow(exec));
</del><ins>+    if (UNLIKELY(!regExp->isValid())) {
+        throwException(exec, scope, regExp->errorToThrow(exec));
+        return nullptr;
+    }
</ins><span class="cx"> 
</span><span class="cx">     Structure* structure = getRegExpStructure(exec, globalObject, newTarget);
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, nullptr);
</span><span class="lines">@@ -250,8 +252,10 @@
</span><span class="cx">                 return nullptr;
</span><span class="cx">             regExp = RegExp::create(vm, regExp->pattern(), flags);
</span><span class="cx"> 
</span><del>-            if (!regExp->isValid())
-                return throwException(exec, scope, regExp->errorToThrow(exec));
</del><ins>+            if (UNLIKELY(!regExp->isValid())) {
+                throwException(exec, scope, regExp->errorToThrow(exec));
+                return nullptr;
+            }
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return RegExpObject::create(vm, structure, regExp);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeScriptExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -252,7 +252,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> CodeBlock* ScriptExecutable::newCodeBlockFor(
</span><del>-    CodeSpecializationKind kind, JSFunction* function, JSScope* scope, JSObject*& exception)
</del><ins>+    CodeSpecializationKind kind, JSFunction* function, JSScope* scope, Exception*& exception)
</ins><span class="cx"> {
</span><span class="cx">     VM* vm = scope->vm();
</span><span class="cx">     auto throwScope = DECLARE_THROW_SCOPE(*vm);
</span><span class="lines">@@ -402,18 +402,18 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* ScriptExecutable::prepareForExecutionImpl(
</del><ins>+Exception* ScriptExecutable::prepareForExecutionImpl(
</ins><span class="cx">     VM& vm, JSFunction* function, JSScope* scope, CodeSpecializationKind kind, CodeBlock*& resultCodeBlock)
</span><span class="cx"> {
</span><span class="cx">     auto throwScope = DECLARE_THROW_SCOPE(vm);
</span><span class="cx">     DeferGCForAWhile deferGC(vm.heap);
</span><span class="cx"> 
</span><del>-    if (vm.getAndClearFailNextNewCodeBlock()) {
</del><ins>+    if (UNLIKELY(vm.getAndClearFailNextNewCodeBlock())) {
</ins><span class="cx">         auto& state = *scope->globalObject(vm)->globalExec();
</span><span class="cx">         return throwException(&state, throwScope, createError(&state, "Forced Failure"_s));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JSObject* exception = nullptr;
</del><ins>+    Exception* exception = nullptr;
</ins><span class="cx">     CodeBlock* codeBlock = newCodeBlockFor(kind, function, scope, exception);
</span><span class="cx">     resultCodeBlock = codeBlock;
</span><span class="cx">     EXCEPTION_ASSERT(!!throwScope.exception() == !codeBlock);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeScriptExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> 
</span><span class="cx">     void installCode(CodeBlock*);
</span><span class="cx">     void installCode(VM&, CodeBlock*, CodeType, CodeSpecializationKind);
</span><del>-    CodeBlock* newCodeBlockFor(CodeSpecializationKind, JSFunction*, JSScope*, JSObject*& exception);
</del><ins>+    CodeBlock* newCodeBlockFor(CodeSpecializationKind, JSFunction*, JSScope*, Exception*&);
</ins><span class="cx">     CodeBlock* newReplacementCodeBlockFor(CodeSpecializationKind);
</span><span class="cx"> 
</span><span class="cx">     void clearCode(IsoCellSet&);
</span><span class="lines">@@ -120,11 +120,11 @@
</span><span class="cx">     // to point to it. This forces callers to have a CodeBlock* in a register or on the stack that will be marked
</span><span class="cx">     // by conservative GC if a GC happens after we create the CodeBlock.
</span><span class="cx">     template <typename ExecutableType>
</span><del>-    JSObject* prepareForExecution(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*& resultCodeBlock);
</del><ins>+    Exception* prepareForExecution(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*& resultCodeBlock);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     friend class ExecutableBase;
</span><del>-    JSObject* prepareForExecutionImpl(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*&);
</del><ins>+    Exception* prepareForExecutionImpl(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*&);
</ins><span class="cx"> 
</span><span class="cx">     bool hasClearableCode(VM&) const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeThrowScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ThrowScope.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ThrowScope.cpp       2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ThrowScope.cpp  2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -70,15 +70,15 @@
</span><span class="cx">         simulateThrow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ThrowScope::throwException(ExecState* exec, Exception* exception)
</del><ins>+Exception* ThrowScope::throwException(ExecState* exec, Exception* exception)
</ins><span class="cx"> {
</span><span class="cx">     if (m_vm.exception() && m_vm.exception() != exception)
</span><span class="cx">         m_vm.verifyExceptionCheckNeedIsSatisfied(m_recursionDepth, m_location);
</span><span class="cx">     
</span><del>-    m_vm.throwException(exec, exception);
</del><ins>+    return m_vm.throwException(exec, exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue ThrowScope::throwException(ExecState* exec, JSValue error)
</del><ins>+Exception* ThrowScope::throwException(ExecState* exec, JSValue error)
</ins><span class="cx"> {
</span><span class="cx">     if (!error.isCell() || !jsDynamicCast<Exception*>(m_vm, error.asCell()))
</span><span class="cx">         m_vm.verifyExceptionCheckNeedIsSatisfied(m_recursionDepth, m_location);
</span><span class="lines">@@ -86,11 +86,9 @@
</span><span class="cx">     return m_vm.throwException(exec, error);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* ThrowScope::throwException(ExecState* exec, JSObject* obj)
</del><ins>+Exception* ThrowScope::throwException(ExecState* exec, JSObject* obj)
</ins><span class="cx"> {
</span><del>-    if (!jsDynamicCast<Exception*>(m_vm, obj))
-        m_vm.verifyExceptionCheckNeedIsSatisfied(m_recursionDepth, m_location);
-    
</del><ins>+    m_vm.verifyExceptionCheckNeedIsSatisfied(m_recursionDepth, m_location);
</ins><span class="cx">     return m_vm.throwException(exec, obj);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeThrowScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ThrowScope.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ThrowScope.h 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/ThrowScope.h    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -47,9 +47,9 @@
</span><span class="cx">     ThrowScope(const ThrowScope&) = delete;
</span><span class="cx">     ThrowScope(ThrowScope&&) = default;
</span><span class="cx"> 
</span><del>-    JS_EXPORT_PRIVATE void throwException(ExecState*, Exception*);
-    JS_EXPORT_PRIVATE JSValue throwException(ExecState*, JSValue);
-    JS_EXPORT_PRIVATE JSObject* throwException(ExecState*, JSObject*);
</del><ins>+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, Exception*);
+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, JSValue);
+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, JSObject*);
</ins><span class="cx"> 
</span><span class="cx">     void release() { m_isReleased = true; }
</span><span class="cx"> 
</span><span class="lines">@@ -77,9 +77,9 @@
</span><span class="cx">     ThrowScope(const ThrowScope&) = delete;
</span><span class="cx">     ThrowScope(ThrowScope&&) = default;
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE void throwException(ExecState* exec, Exception* exception) { m_vm.throwException(exec, exception); }
-    ALWAYS_INLINE JSValue throwException(ExecState* exec, JSValue value) { return m_vm.throwException(exec, value); }
-    ALWAYS_INLINE JSObject* throwException(ExecState* exec, JSObject* obj) { return m_vm.throwException(exec, obj); }
</del><ins>+    ALWAYS_INLINE Exception* throwException(ExecState* exec, Exception* exception) { return m_vm.throwException(exec, exception); }
+    ALWAYS_INLINE Exception* throwException(ExecState* exec, JSValue value) { return m_vm.throwException(exec, value); }
+    ALWAYS_INLINE Exception* throwException(ExecState* exec, JSObject* obj) { return m_vm.throwException(exec, obj); }
</ins><span class="cx"> 
</span><span class="cx">     ALWAYS_INLINE void release() { }
</span><span class="cx"> };
</span><span class="lines">@@ -89,17 +89,17 @@
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(EXCEPTION_SCOPE_VERIFICATION)
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE void throwException(ExecState* exec, ThrowScope& scope, Exception* exception)
</del><ins>+ALWAYS_INLINE Exception* throwException(ExecState* exec, ThrowScope& scope, Exception* exception)
</ins><span class="cx"> {
</span><del>-    scope.throwException(exec, exception);
</del><ins>+    return scope.throwException(exec, exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE JSValue throwException(ExecState* exec, ThrowScope& scope, JSValue value)
</del><ins>+ALWAYS_INLINE Exception* throwException(ExecState* exec, ThrowScope& scope, JSValue value)
</ins><span class="cx"> {
</span><span class="cx">     return scope.throwException(exec, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE JSObject* throwException(ExecState* exec, ThrowScope& scope, JSObject* obj)
</del><ins>+ALWAYS_INLINE Exception* throwException(ExecState* exec, ThrowScope& scope, JSObject* obj)
</ins><span class="cx"> {
</span><span class="cx">     return scope.throwException(exec, obj);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.cpp       2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/VM.cpp  2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -811,7 +811,7 @@
</span><span class="cx">     sourceProviderCacheMap.clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void VM::throwException(ExecState* exec, Exception* exception)
</del><ins>+Exception* VM::throwException(ExecState* exec, Exception* exception)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(exec == topCallFrame || exec->isGlobalExec() || exec == exec->lexicalGlobalObject()->callFrameAtDebuggerEntry());
</span><span class="cx">     CallFrame* throwOriginFrame = exec->isGlobalExec() ? exec : topJSCallFrame();
</span><span class="lines">@@ -830,9 +830,10 @@
</span><span class="cx">     m_nativeStackTraceOfLastThrow = StackTrace::captureStackTrace(Options::unexpectedExceptionStackTraceLimit());
</span><span class="cx">     m_throwingThread = &Thread::current();
</span><span class="cx"> #endif
</span><ins>+    return exception;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSValue VM::throwException(ExecState* exec, JSValue thrownValue)
</del><ins>+Exception* VM::throwException(ExecState* exec, JSValue thrownValue)
</ins><span class="cx"> {
</span><span class="cx">     VM& vm = *this;
</span><span class="cx">     Exception* exception = jsDynamicCast<Exception*>(vm, thrownValue);
</span><span class="lines">@@ -839,13 +840,12 @@
</span><span class="cx">     if (!exception)
</span><span class="cx">         exception = Exception::create(*this, thrownValue);
</span><span class="cx"> 
</span><del>-    throwException(exec, exception);
-    return JSValue(exception);
</del><ins>+    return throwException(exec, exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* VM::throwException(ExecState* exec, JSObject* error)
</del><ins>+Exception* VM::throwException(ExecState* exec, JSObject* error)
</ins><span class="cx"> {
</span><del>-    return asObject(throwException(exec, JSValue(error)));
</del><ins>+    return throwException(exec, JSValue(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void VM::setStackPointerAtVMEntry(void* sp)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.h 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/JavaScriptCore/runtime/VM.h    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -946,9 +946,9 @@
</span><span class="cx">     bool isSafeToRecurseSoftCLoop() const;
</span><span class="cx"> #endif // ENABLE(C_LOOP)
</span><span class="cx"> 
</span><del>-    JS_EXPORT_PRIVATE void throwException(ExecState*, Exception*);
-    JS_EXPORT_PRIVATE JSValue throwException(ExecState*, JSValue);
-    JS_EXPORT_PRIVATE JSObject* throwException(ExecState*, JSObject*);
</del><ins>+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, Exception*);
+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, JSValue);
+    JS_EXPORT_PRIVATE Exception* throwException(ExecState*, JSObject*);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(EXCEPTION_SCOPE_VERIFICATION)
</span><span class="cx">     void verifyExceptionCheckNeedIsSatisfied(unsigned depth, ExceptionEventLocation&);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebCore/ChangeLog      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2019-03-06  Mark Lam  <mark.lam@apple.com>
+
+        Exception is a JSCell, not a JSObject.
+        https://bugs.webkit.org/show_bug.cgi?id=195392
+
+        Reviewed by Saam Barati.
+
+        * bridge/objc/objc_utility.h:
+        * bridge/objc/objc_utility.mm:
+        (JSC::Bindings::throwError):
+        * bridge/runtime_object.cpp:
+        (JSC::Bindings::RuntimeObject::throwInvalidAccessError):
+        * bridge/runtime_object.h:
+
</ins><span class="cx"> 2019-03-07  Devin Rousso  <drousso@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Canvas: lazily create the agent
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeobjcobjc_utilityh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/objc/objc_utility.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/objc/objc_utility.h  2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebCore/bridge/objc/objc_utility.h     2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2004-2019 Apple Inc.  All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx"> JSValue convertObjcValueToValue(ExecState*, void* buffer, ObjcValueType, RootObject*);
</span><span class="cx"> ObjcValueType objcValueTypeForType(const char *type);
</span><span class="cx"> 
</span><del>-JSObject *throwError(ExecState*, ThrowScope&, NSString *message);
</del><ins>+Exception *throwError(ExecState*, ThrowScope&, NSString *message);
</ins><span class="cx"> 
</span><span class="cx"> } // namespace Bindings
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeobjcobjc_utilitymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/objc/objc_utility.mm (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/objc/objc_utility.mm 2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebCore/bridge/objc/objc_utility.mm    2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004-2018 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2004-2019 Apple Inc.  All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -313,11 +313,10 @@
</span><span class="cx">     return objcValueType;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject *throwError(ExecState *exec, ThrowScope& scope, NSString *message)
</del><ins>+Exception *throwError(ExecState *exec, ThrowScope& scope, NSString *message)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(message);
</span><del>-    JSObject *error = throwException(exec, scope, JSC::createError(exec, String(message)));
-    return error;
</del><ins>+    return throwException(exec, scope, JSC::createError(exec, String(message)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeruntime_objectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/runtime_object.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/runtime_object.cpp   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebCore/bridge/runtime_object.cpp      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -292,7 +292,7 @@
</span><span class="cx">     instance->end();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* RuntimeObject::throwInvalidAccessError(ExecState* exec, ThrowScope& scope)
</del><ins>+Exception* RuntimeObject::throwInvalidAccessError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createReferenceError(exec, "Trying to access object from destroyed plug-in."));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeruntime_objecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/runtime_object.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/runtime_object.h     2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebCore/bridge/runtime_object.h        2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> 
</span><span class="cx">     Instance* getInternalInstance() const { return m_instance.get(); }
</span><span class="cx"> 
</span><del>-    static JSObject* throwInvalidAccessError(ExecState*, ThrowScope&);
</del><ins>+    static Exception* throwInvalidAccessError(ExecState*, ThrowScope&);
</ins><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebKit/ChangeLog       2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2019-03-06  Mark Lam  <mark.lam@apple.com>
+
+        Exception is a JSCell, not a JSObject.
+        https://bugs.webkit.org/show_bug.cgi?id=195392
+
+        Reviewed by Saam Barati.
+
+        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
+        (WebKit::JSNPObject::throwInvalidAccessError):
+        * WebProcess/Plugins/Netscape/JSNPObject.h:
+
</ins><span class="cx"> 2019-03-07  Commit Queue  <commit-queue@webkit.org>
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r242354.
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessPluginsNetscapeJSNPObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.cpp (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.cpp   2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.cpp      2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2010-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -523,7 +523,7 @@
</span><span class="cx">     return JSValue::encode(JSNPMethod::create(exec, thisObj->globalObject(), propertyName.publicName(), npIdentifier));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSObject* JSNPObject::throwInvalidAccessError(ExecState* exec, ThrowScope& scope)
</del><ins>+JSC::Exception* JSNPObject::throwInvalidAccessError(ExecState* exec, ThrowScope& scope)
</ins><span class="cx"> {
</span><span class="cx">     return throwException(exec, scope, createReferenceError(exec, "Trying to access object from destroyed plug-in."));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessPluginsNetscapeJSNPObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.h (242595 => 242596)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.h     2019-03-07 09:28:42 UTC (rev 242595)
+++ trunk/Source/WebKit/WebProcess/Plugins/Netscape/JSNPObject.h        2019-03-07 10:16:58 UTC (rev 242596)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010-2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2010-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -104,7 +104,7 @@
</span><span class="cx"> 
</span><span class="cx">     static JSC::EncodedJSValue propertyGetter(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx">     static JSC::EncodedJSValue methodGetter(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><del>-    static JSC::JSObject* throwInvalidAccessError(JSC::ExecState*, JSC::ThrowScope&);
</del><ins>+    static JSC::Exception* throwInvalidAccessError(JSC::ExecState*, JSC::ThrowScope&);
</ins><span class="cx"> 
</span><span class="cx">     NPRuntimeObjectMap* m_objectMap;
</span><span class="cx">     NPObject* m_npObject;
</span></span></pre>
</div>
</div>

</body>
</html>