Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (206869 => 206870)
--- trunk/Source/_javascript_Core/ChangeLog 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/_javascript_Core/ChangeLog 2016-10-06 17:59:33 UTC (rev 206870)
@@ -1,3 +1,25 @@
+2016-10-06 Yusuke Suzuki <[email protected]>
+
+ [WebCore][JSC] Use new @throwTypeError and @throwRangeError intrinsics
+ https://bugs.webkit.org/show_bug.cgi?id=163001
+
+ Reviewed by Keith Miller.
+
+ Previously, the argument of @throwXXXError intrinsics must be string literal.
+ But it is error-prone restriction. This patch relaxes the restriction to accept
+ arbitrary values. To keep emitted bytecode small, if the argument is string literal,
+ we generate the same bytecode as before. If the argument is not string literal,
+ we evaluate it and perform to_string before passing to throw_static_error.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitThrowStaticError):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwTypeError):
+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwRangeError):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+
2016-10-05 Yusuke Suzuki <[email protected]>
[JSC] Add @throwXXXError bytecode intrinsic
Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp (206869 => 206870)
--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp 2016-10-06 17:59:33 UTC (rev 206870)
@@ -3905,6 +3905,15 @@
return localScopeDepth() + m_finallyDepth;
}
+void BytecodeGenerator::emitThrowStaticError(ErrorType errorType, RegisterID* raw)
+{
+ RefPtr<RegisterID> message = newTemporary();
+ emitToString(message.get(), raw);
+ emitOpcode(op_throw_static_error);
+ instructions().append(message->index());
+ instructions().append(static_cast<unsigned>(errorType));
+}
+
void BytecodeGenerator::emitThrowStaticError(ErrorType errorType, const Identifier& message)
{
emitOpcode(op_throw_static_error);
Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h (206869 => 206870)
--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h 2016-10-06 17:59:33 UTC (rev 206870)
@@ -662,6 +662,7 @@
emitUnaryNoDstOp(op_throw, exc);
}
+ void emitThrowStaticError(ErrorType, RegisterID*);
void emitThrowStaticError(ErrorType, const Identifier& message);
void emitThrowReferenceError(const String& message);
void emitThrowTypeError(const String& message);
Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (206869 => 206870)
--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2016-10-06 17:59:33 UTC (rev 206870)
@@ -901,11 +901,14 @@
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_throwTypeError(BytecodeGenerator& generator, RegisterID* dst)
{
ArgumentListNode* node = m_args->m_listNode;
- ASSERT(node->m_expr->isString());
- const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();
ASSERT(!node->m_next);
-
- generator.emitThrowTypeError(ident);
+ if (node->m_expr->isString()) {
+ const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();
+ generator.emitThrowTypeError(ident);
+ } else {
+ RefPtr<RegisterID> message = generator.emitNode(node);
+ generator.emitThrowStaticError(ErrorType::TypeError, message.get());
+ }
return dst;
}
@@ -912,11 +915,15 @@
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_throwRangeError(BytecodeGenerator& generator, RegisterID* dst)
{
ArgumentListNode* node = m_args->m_listNode;
- ASSERT(node->m_expr->isString());
- const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();
ASSERT(!node->m_next);
+ if (node->m_expr->isString()) {
+ const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();
+ generator.emitThrowRangeError(ident);
+ } else {
+ RefPtr<RegisterID> message = generator.emitNode(node);
+ generator.emitThrowStaticError(ErrorType::RangeError, message.get());
+ }
- generator.emitThrowRangeError(ident);
return dst;
}
Modified: trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (206869 => 206870)
--- trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2016-10-06 17:59:33 UTC (rev 206870)
@@ -4660,6 +4660,7 @@
LAST_OPCODE(op_throw);
case op_throw_static_error:
+ addToGraph(Phantom, get(VirtualRegister(currentInstruction[1].u.operand))); // Keep argument live.
addToGraph(ThrowStaticError);
flushForTerminal();
addToGraph(Unreachable);
Modified: trunk/Source/WebCore/ChangeLog (206869 => 206870)
--- trunk/Source/WebCore/ChangeLog 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/ChangeLog 2016-10-06 17:59:33 UTC (rev 206870)
@@ -1,3 +1,54 @@
+2016-10-06 Yusuke Suzuki <[email protected]>
+
+ [WebCore][JSC] Use new @throwTypeError and @throwRangeError intrinsics
+ https://bugs.webkit.org/show_bug.cgi?id=163001
+
+ Reviewed by Keith Miller.
+
+ Replace `throw new @XXXError(...)` to @throwXXXError intrinsic.
+ It reduces the size of bytecode sequence and facilitate inlining.
+
+ No behavior change.
+
+ * Modules/fetch/FetchHeaders.js:
+ (initializeFetchHeaders):
+ * Modules/fetch/FetchInternals.js:
+ (fillFetchHeaders):
+ * Modules/fetch/FetchRequest.js:
+ (initializeFetchRequest):
+ * Modules/fetch/FetchResponse.js:
+ (initializeFetchResponse):
+ (clone):
+ * Modules/mediastream/NavigatorUserMedia.js:
+ (webkitGetUserMedia):
+ * Modules/mediastream/RTCPeerConnection.js:
+ (initializeRTCPeerConnection):
+ (getLocalStreams):
+ (getStreamById):
+ (addStream):
+ * Modules/streams/ReadableStream.js:
+ (initializeReadableStream):
+ (getReader):
+ * Modules/streams/ReadableStreamDefaultController.js:
+ (enqueue):
+ (error):
+ (close):
+ * Modules/streams/ReadableStreamDefaultReader.js:
+ (releaseLock):
+ * Modules/streams/ReadableStreamInternals.js:
+ (privateInitializeReadableStreamDefaultReader):
+ (privateInitializeReadableStreamDefaultController):
+ (doStructuredClone):
+ (readableStreamError):
+ * Modules/streams/StreamInternals.js:
+ (validateAndNormalizeQueuingStrategy):
+ (enqueueValueWithSize):
+ * Modules/streams/WritableStream.js:
+ (initializeWritableStream):
+ (state):
+ * xml/XMLHttpRequest.js:
+ (response):
+
2016-10-06 John Wilander <[email protected]>
Update Resource Load Statistics
Modified: trunk/Source/WebCore/Modules/fetch/FetchHeaders.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/fetch/FetchHeaders.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/fetch/FetchHeaders.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -33,7 +33,7 @@
return this;
if (!@isObject(headersInit))
- throw new @TypeError("headersInit must be an object");
+ @throwTypeError("headersInit must be an object");
@fillFetchHeaders(this, headersInit);
Modified: trunk/Source/WebCore/Modules/fetch/FetchInternals.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/fetch/FetchInternals.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/fetch/FetchInternals.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -39,7 +39,7 @@
for (let i = 0; i < headersInit.length; i++) {
let header = headersInit[i];
if (header.length !== 2)
- throw new @TypeError("headersInit sequence items should contain two values");
+ @throwTypeError("headersInit sequence items should contain two values");
@Headers.prototype.@appendFromJS.@call(headers, header[0], header[1]);
}
return this;
Modified: trunk/Source/WebCore/Modules/fetch/FetchRequest.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/fetch/FetchRequest.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/fetch/FetchRequest.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -32,7 +32,7 @@
if (init === @undefined)
init = { };
else if (!@isObject(init))
- throw new @TypeError("Request init must be an object");
+ @throwTypeError("Request init must be an object");
let headers = this.@initializeWith(input, init);
@assert(headers instanceof @Headers);
Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/fetch/FetchResponse.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -32,11 +32,11 @@
if (init === @undefined)
init = { };
else if (!@isObject(init))
- throw new @TypeError("Response init must be an object");
+ @throwTypeError("Response init must be an object");
let status = (init.status !== @undefined) ? @toNumber(init.status) : 200;
if (status < 200 || status > 599)
- throw new @RangeError("Status must be between 200 and 599");
+ @throwRangeError("Status must be between 200 and 599");
let statusText = (init.statusText !== @undefined) ? init.statusText : "OK";
@@ -47,7 +47,7 @@
if (body !== @undefined && body !== null) {
if (status == 101 || status == 204 || status == 205 || status == 304)
- throw new @TypeError("Response cannot have a body with the given status");
+ @throwTypeError("Response cannot have a body with the given status");
// FIXME: Use @isReadableStream once it is no longer guarded by READABLE_STREAM_API guard.
let isBodyReadableStream = (@isObject(body) && !!body.@readableStreamController);
@@ -95,7 +95,7 @@
throw @makeThisTypeError("Response", "clone");
if (@Response.prototype.@isDisturbed.@call(this) || (this.@body && @isReadableStreamLocked(this.@body)))
- throw new @TypeError("Cannot clone a disturbed Response");
+ @throwTypeError("Cannot clone a disturbed Response");
var cloned = @Response.prototype.@cloneForJS.@call(this);
Modified: trunk/Source/WebCore/Modules/mediastream/NavigatorUserMedia.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/mediastream/NavigatorUserMedia.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/mediastream/NavigatorUserMedia.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -34,15 +34,15 @@
throw @makeThisTypeError("Navigator", "webkitGetUserMedia");
if (arguments.length < 3)
- throw new @TypeError("Not enough arguments");
+ @throwTypeError("Not enough arguments");
if (options !== @Object(options))
- throw new @TypeError("Argument 1 (options) to Navigator.webkitGetUserMedia must be an object");
+ @throwTypeError("Argument 1 (options) to Navigator.webkitGetUserMedia must be an object");
if (typeof successCallback !== "function")
- throw new @TypeError("Argument 2 ('successCallback') to Navigator.webkitGetUserMedia must be a function");
+ @throwTypeError("Argument 2 ('successCallback') to Navigator.webkitGetUserMedia must be a function");
if (typeof errorCallback !== "function")
- throw new @TypeError("Argument 3 ('errorCallback') to Navigator.webkitGetUserMedia must be a function");
+ @throwTypeError("Argument 3 ('errorCallback') to Navigator.webkitGetUserMedia must be a function");
this.mediaDevices.@getUserMedia(options).@then(successCallback, errorCallback);
}
Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -35,10 +35,10 @@
"use strict";
if (arguments.length < 1)
- throw new @TypeError("Not enough arguments");
+ @throwTypeError("Not enough arguments");
if (!@isObject(configuration))
- throw new @TypeError("RTCPeerConnection argument must be a valid Dictionary");
+ @throwTypeError("RTCPeerConnection argument must be a valid Dictionary");
// FIXME: Handle errors in a better way than catching and re-throwing (http://webkit.org/b/158936)
try {
@@ -46,7 +46,7 @@
} catch (e) {
const message = e.name === "TypeMismatchError" ? "Invalid RTCPeerConnection constructor arguments"
: "Error creating RTCPeerConnection";
- throw new @TypeError(message);
+ @throwTypeError(message);
}
this.@operations = [];
@@ -60,7 +60,7 @@
"use strict";
if (!@isRTCPeerConnection(this))
- throw new @TypeError("Function should be called on an RTCPeerConnection");
+ @throwTypeError("Function should be called on an RTCPeerConnection");
return [email protected]();
}
@@ -70,10 +70,10 @@
"use strict";
if (!@isRTCPeerConnection(this))
- throw new @TypeError("Function should be called on an RTCPeerConnection");
+ @throwTypeError("Function should be called on an RTCPeerConnection");
if (arguments.length < 1)
- throw new @TypeError("Not enough arguments");
+ @throwTypeError("Not enough arguments");
const streamId = @String(streamIdArg);
@@ -87,13 +87,13 @@
"use strict";
if (!@isRTCPeerConnection(this))
- throw new @TypeError("Function should be called on an RTCPeerConnection");
+ @throwTypeError("Function should be called on an RTCPeerConnection");
if (arguments.length < 1)
- throw new @TypeError("Not enough arguments");
+ @throwTypeError("Not enough arguments");
if (!(stream instanceof @MediaStream))
- throw new @TypeError("Argument 1 ('stream') to RTCPeerConnection.addStream must be an instance of MediaStream");
+ @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.addStream must be an instance of MediaStream");
if ([email protected](localStream => localStream.id === stream.id))
return;
@@ -107,13 +107,13 @@
"use strict";
if (!@isRTCPeerConnection(this))
- throw new @TypeError("Function should be called on an RTCPeerConnection");
+ @throwTypeError("Function should be called on an RTCPeerConnection");
if (arguments.length < 1)
- throw new @TypeError("Not enough arguments");
+ @throwTypeError("Not enough arguments");
if (!(stream instanceof @MediaStream))
- throw new @TypeError("Argument 1 ('stream') to RTCPeerConnection.removeStream must be an instance of MediaStream");
+ @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.removeStream must be an instance of MediaStream");
const indexOfStreamToRemove = [email protected](localStream => localStream.id === stream.id);
if (indexOfStreamToRemove === -1)
Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/ReadableStream.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -36,10 +36,10 @@
strategy = { highWaterMark: 1, size: function() { return 1; } };
if (!@isObject(underlyingSource))
- throw new @TypeError("ReadableStream constructor takes an object as first argument");
+ @throwTypeError("ReadableStream constructor takes an object as first argument");
if (strategy !== @undefined && !@isObject(strategy))
- throw new @TypeError("ReadableStream constructor takes an object as second argument, if any");
+ @throwTypeError("ReadableStream constructor takes an object as second argument, if any");
this.@state = @streamReadable;
this.@reader = @undefined;
@@ -53,13 +53,13 @@
if (typeString === "bytes") {
// FIXME: Implement support of ReadableByteStreamController.
- throw new @TypeError("ReadableByteStreamController is not implemented");
+ @throwTypeError("ReadableByteStreamController is not implemented");
} else if (type === @undefined) {
if (strategy.highWaterMark === @undefined)
strategy.highWaterMark = 1;
this.@readableStreamController = new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark);
} else
- throw new @RangeError("Invalid type for underlying source");
+ @throwRangeError("Invalid type for underlying source");
return this;
}
@@ -89,13 +89,13 @@
if (options.mode === 'byob') {
// FIXME: Update once ReadableByteStreamContoller and ReadableStreamBYOBReader are implemented.
- throw new @TypeError("ReadableStreamBYOBReader is not implemented");
+ @throwTypeError("ReadableStreamBYOBReader is not implemented");
}
if (options.mode === @undefined)
return new @ReadableStreamDefaultReader(this);
- throw new @RangeError("Invalid mode is specified");
+ @throwRangeError("Invalid mode is specified");
}
function pipeThrough(streams, options)
Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -33,10 +33,10 @@
throw @makeThisTypeError("ReadableStreamDefaultController", "enqueue");
if (this.@closeRequested)
- throw new @TypeError("ReadableStreamDefaultController is requested to close");
+ @throwTypeError("ReadableStreamDefaultController is requested to close");
if (this.@controlledReadableStream.@state !== @streamReadable)
- throw new @TypeError("ReadableStream is not readable");
+ @throwTypeError("ReadableStream is not readable");
return @readableStreamDefaultControllerEnqueue(this, chunk);
}
@@ -50,7 +50,7 @@
const stream = this.@controlledReadableStream;
if (stream.@state !== @streamReadable)
- throw new @TypeError("ReadableStream is not readable");
+ @throwTypeError("ReadableStream is not readable");
@readableStreamError(stream, error);
}
@@ -63,10 +63,10 @@
throw @makeThisTypeError("ReadableStreamDefaultController", "close");
if (this.@closeRequested)
- throw new @TypeError("ReadableStreamDefaultController is already requested to close");
+ @throwTypeError("ReadableStreamDefaultController is already requested to close");
if (this.@controlledReadableStream.@state !== @streamReadable)
- throw new @TypeError("ReadableStream is not readable");
+ @throwTypeError("ReadableStream is not readable");
@readableStreamDefaultControllerClose(this);
}
Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -62,7 +62,7 @@
return;
if ([email protected])
- throw new @TypeError("There are still pending read requests, cannot release the lock");
+ @throwTypeError("There are still pending read requests, cannot release the lock");
if (stream.@state === @streamReadable)
this.@closedPromiseCapability.@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));
Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -32,9 +32,9 @@
"use strict";
if (!@isReadableStream(stream))
- throw new @TypeError("ReadableStreamDefaultReader needs a ReadableStream");
+ @throwTypeError("ReadableStreamDefaultReader needs a ReadableStream");
if (@isReadableStreamLocked(stream))
- throw new @TypeError("ReadableStream is locked");
+ @throwTypeError("ReadableStream is locked");
this.@readRequests = [];
this.@ownerReadableStream = stream;
@@ -58,11 +58,11 @@
"use strict";
if (!@isReadableStream(stream))
- throw new @TypeError("ReadableStreamDefaultController needs a ReadableStream");
+ @throwTypeError("ReadableStreamDefaultController needs a ReadableStream");
// readableStreamController is initialized with null value.
if (stream.@readableStreamController !== null)
- throw new @TypeError("ReadableStream already has a controller");
+ @throwTypeError("ReadableStream already has a controller");
this.@controlledReadableStream = stream;
this.@underlyingSource = underlyingSource;
@@ -157,7 +157,7 @@
if (@ArrayBuffer.@isView(object))
return @structuredCloneArrayBufferView(object);
- throw new @TypeError("structuredClone not implemented for: " + object);
+ @throwTypeError("structuredClone not implemented for: " + object);
}
function readableStreamTeePullFunction(teeState, reader, shouldClone)
@@ -269,7 +269,7 @@
reader.@readRequests = [];
} else
// FIXME: Implement ReadableStreamBYOBReader.
- throw new @TypeError("Only ReadableStreamDefaultReader is currently supported");
+ @throwTypeError("Only ReadableStreamDefaultReader is currently supported");
reader.@closedPromiseCapability.@reject.@call(@undefined, error);
}
Modified: trunk/Source/WebCore/Modules/streams/StreamInternals.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/StreamInternals.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/StreamInternals.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -79,7 +79,7 @@
"use strict";
if (size !== @undefined && typeof size !== "function")
- throw new @TypeError("size parameter must be a function");
+ @throwTypeError("size parameter must be a function");
const normalizedStrategy = { };
@@ -87,7 +87,7 @@
normalizedStrategy.highWaterMark = @Number(highWaterMark);
if (@isNaN(normalizedStrategy.highWaterMark) || normalizedStrategy.highWaterMark < 0)
- throw new @RangeError("highWaterMark value is negative or not a number");
+ @throwRangeError("highWaterMark value is negative or not a number");
return normalizedStrategy;
}
@@ -114,7 +114,7 @@
size = @Number(size);
if (!@isFinite(size) || size < 0)
- throw new @RangeError("size has an incorrect value");
+ @throwRangeError("size has an incorrect value");
queue.content.@push({ value: value, size: size });
queue.size += size;
}
Modified: trunk/Source/WebCore/Modules/streams/WritableStream.js (206869 => 206870)
--- trunk/Source/WebCore/Modules/streams/WritableStream.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/Modules/streams/WritableStream.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -36,10 +36,10 @@
strategy = { highWaterMark: 0, size: function() { return 1; } };
if (!@isObject(underlyingSink))
- throw new @TypeError("WritableStream constructor takes an object as first argument");
+ @throwTypeError("WritableStream constructor takes an object as first argument");
if (!@isObject(strategy))
- throw new @TypeError("WritableStream constructor takes an object as second argument, if any");
+ @throwTypeError("WritableStream constructor takes an object as second argument, if any");
this.@underlyingSink = underlyingSink;
this.@closedPromiseCapability = @newPromiseCapability(@Promise);
@@ -170,7 +170,7 @@
"use strict";
if (!@isWritableStream(this))
- throw new @TypeError("The WritableStream.state getter can only be used on instances of WritableStream");
+ @throwTypeError("The WritableStream.state getter can only be used on instances of WritableStream");
switch(this.@state) {
case @streamClosed:
Modified: trunk/Source/WebCore/xml/XMLHttpRequest.js (206869 => 206870)
--- trunk/Source/WebCore/xml/XMLHttpRequest.js 2016-10-06 17:40:12 UTC (rev 206869)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.js 2016-10-06 17:59:33 UTC (rev 206870)
@@ -29,7 +29,7 @@
// FIXME: Add a helper routine for that kind of checks.
if (!(this instanceof @XMLHttpRequest))
- throw new @TypeError("The XMLHttpRequest.response getter can only be used on instances of XMLHttpRequest");
+ @throwTypeError("The XMLHttpRequest.response getter can only be used on instances of XMLHttpRequest");
if (@XMLHttpRequest.prototype.@responseCacheIsValid.@call(this))
return this.@response;