Commit ff5c242a authored by rossberg@chromium.org's avatar rossberg@chromium.org

Test (and fix) all exception paths that can occur with proxies.

R=kmillikin@chromium.org
BUG=v8:1543
TEST=

Review URL: http://codereview.chromium.org/7623013

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9261 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 40cd59f2
...@@ -237,6 +237,7 @@ MaybeObject* Object::GetPropertyWithHandler(Object* receiver_raw, ...@@ -237,6 +237,7 @@ MaybeObject* Object::GetPropertyWithHandler(Object* receiver_raw,
// Extract trap function. // Extract trap function.
Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("get"); Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("get");
Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
if (isolate->has_pending_exception()) return Failure::Exception();
if (trap->IsUndefined()) { if (trap->IsUndefined()) {
// Get the derived `get' property. // Get the derived `get' property.
trap = isolate->derived_get_trap(); trap = isolate->derived_get_trap();
...@@ -2222,6 +2223,7 @@ bool JSProxy::HasPropertyWithHandler(String* name_raw) { ...@@ -2222,6 +2223,7 @@ bool JSProxy::HasPropertyWithHandler(String* name_raw) {
// Extract trap function. // Extract trap function.
Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("has"); Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("has");
Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
if (isolate->has_pending_exception()) return Failure::Exception();
if (trap->IsUndefined()) { if (trap->IsUndefined()) {
trap = isolate->derived_has_trap(); trap = isolate->derived_has_trap();
} }
...@@ -2252,6 +2254,7 @@ MUST_USE_RESULT MaybeObject* JSProxy::SetPropertyWithHandler( ...@@ -2252,6 +2254,7 @@ MUST_USE_RESULT MaybeObject* JSProxy::SetPropertyWithHandler(
// Extract trap function. // Extract trap function.
Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("set"); Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("set");
Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
if (isolate->has_pending_exception()) return Failure::Exception();
if (trap->IsUndefined()) { if (trap->IsUndefined()) {
trap = isolate->derived_set_trap(); trap = isolate->derived_set_trap();
} }
...@@ -2279,6 +2282,7 @@ MUST_USE_RESULT MaybeObject* JSProxy::DeletePropertyWithHandler( ...@@ -2279,6 +2282,7 @@ MUST_USE_RESULT MaybeObject* JSProxy::DeletePropertyWithHandler(
// Extract trap function. // Extract trap function.
Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("delete"); Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol("delete");
Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
if (isolate->has_pending_exception()) return Failure::Exception();
if (trap->IsUndefined()) { if (trap->IsUndefined()) {
Handle<Object> args[] = { handler, trap_name }; Handle<Object> args[] = { handler, trap_name };
Handle<Object> error = isolate->factory()->NewTypeError( Handle<Object> error = isolate->factory()->NewTypeError(
...@@ -2321,6 +2325,7 @@ MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler( ...@@ -2321,6 +2325,7 @@ MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
Handle<String> trap_name = Handle<String> trap_name =
isolate->factory()->LookupAsciiSymbol("getPropertyDescriptor"); isolate->factory()->LookupAsciiSymbol("getPropertyDescriptor");
Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
if (isolate->has_pending_exception()) return NONE;
if (trap->IsUndefined()) { if (trap->IsUndefined()) {
Handle<Object> args[] = { handler, trap_name }; Handle<Object> args[] = { handler, trap_name };
Handle<Object> error = isolate->factory()->NewTypeError( Handle<Object> error = isolate->factory()->NewTypeError(
......
This diff is collapsed.
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