| Index: src/execution.cc
|
| diff --git a/src/execution.cc b/src/execution.cc
|
| index 850dec561f8151b66abd818831964c939e176a3e..2fd78721071360910ddd1925471aabcbd324dd83 100644
|
| --- a/src/execution.cc
|
| +++ b/src/execution.cc
|
| @@ -277,6 +277,34 @@ Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) {
|
| }
|
|
|
|
|
| +Handle<Object> Execution::TryGetConstructorDelegate(
|
| + Handle<Object> object,
|
| + bool* has_pending_exception) {
|
| + ASSERT(!object->IsJSFunction());
|
| + Isolate* isolate = Isolate::Current();
|
| +
|
| + // If you return a function from here, it will be called when an
|
| + // attempt is made to call the given object as a constructor.
|
| +
|
| + // Objects created through the API can have an instance-call handler
|
| + // that should be used when calling the object as a function.
|
| + if (object->IsHeapObject() &&
|
| + HeapObject::cast(*object)->map()->has_instance_call_handler()) {
|
| + return Handle<JSFunction>(
|
| + isolate->global_context()->call_as_constructor_delegate());
|
| + }
|
| +
|
| + // If the Object doesn't have an instance-call handler we should
|
| + // throw a non-callable exception.
|
| + i::Handle<i::Object> error_obj = isolate->factory()->NewTypeError(
|
| + "called_non_callable", i::HandleVector<i::Object>(&object, 1));
|
| + isolate->Throw(*error_obj);
|
| + *has_pending_exception = true;
|
| +
|
| + return isolate->factory()->undefined_value();
|
| +}
|
| +
|
| +
|
| bool StackGuard::IsStackOverflow() {
|
| ExecutionAccess access(isolate_);
|
| return (thread_local_.jslimit_ != kInterruptLimit &&
|
|
|