Commit 64da4755 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Turn message property of the error object into a data property.

R=svenpanne@chromium.org
BUG=

Review URL: https://chromiumcodereview.appspot.com/11368142

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12908 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent e4cbac8d
......@@ -155,7 +155,9 @@ Handle<String> MessageHandler::GetMessage(Handle<Object> data) {
JSFunction::cast(
Isolate::Current()->js_builtins_object()->
GetPropertyNoExceptionThrown(*fmt_str)));
Handle<Object> argv[] = { data };
Handle<JSMessageObject> message = Handle<JSMessageObject>::cast(data);
Handle<Object> argv[] = { Handle<Object>(message->type()),
Handle<Object>(message->arguments()) };
bool caught_exception;
Handle<Object> result =
......
This diff is collapsed.
......@@ -13101,33 +13101,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFromCache) {
}
RUNTIME_FUNCTION(MaybeObject*, Runtime_NewMessageObject) {
HandleScope scope(isolate);
CONVERT_ARG_HANDLE_CHECKED(String, type, 0);
CONVERT_ARG_HANDLE_CHECKED(JSArray, arguments, 1);
return *isolate->factory()->NewJSMessageObject(
type,
arguments,
0,
0,
isolate->factory()->undefined_value(),
isolate->factory()->undefined_value(),
isolate->factory()->undefined_value());
}
RUNTIME_FUNCTION(MaybeObject*, Runtime_MessageGetType) {
CONVERT_ARG_CHECKED(JSMessageObject, message, 0);
return message->type();
}
RUNTIME_FUNCTION(MaybeObject*, Runtime_MessageGetArguments) {
CONVERT_ARG_CHECKED(JSMessageObject, message, 0);
return message->arguments();
}
RUNTIME_FUNCTION(MaybeObject*, Runtime_MessageGetStartPosition) {
CONVERT_ARG_CHECKED(JSMessageObject, message, 0);
return Smi::FromInt(message->start_position());
......
......@@ -376,9 +376,6 @@ namespace internal {
F(GetFromCache, 2, 1) \
\
/* Message objects */ \
F(NewMessageObject, 2, 1) \
F(MessageGetType, 1, 1) \
F(MessageGetArguments, 1, 1) \
F(MessageGetStartPosition, 1, 1) \
F(MessageGetScript, 1, 1) \
\
......
// Copyright 2012 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Test that the message property of error objects is a data property.
var o;
// message is constructed using the constructor.
var error1 = new Error("custom message");
o = {};
o.__proto__ = error1;
assertEquals("custom message",
Object.getOwnPropertyDescriptor(error1, "message").value);
o.message = "another message";
assertEquals("another message", o.message);
assertEquals("custom message", error1.message);
// message is constructed by the runtime.
var error2;
try { x.x } catch (e) { error2 = e; }
o = {};
o.__proto__ = error2;
assertEquals("x is not defined",
Object.getOwnPropertyDescriptor(error2, "message").value);
o.message = "another message";
assertEquals("another message", o.message);
assertEquals("x is not defined", error2.message);
......@@ -649,6 +649,11 @@ function TestSetForDerived2(create, trap) {
TestSetForDerived(
function(k) {
// TODO(yangguo): issue 2398 - throwing an error causes formatting of
// the message string, which can be observable through this handler.
// We ignore keys that occur when formatting the message string.
if (k == "toString" || k == "valueOf") return;
key = k;
switch (k) {
case "p_writable": return {writable: true, configurable: true}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment