Index: src/execution.cc |
diff --git a/src/execution.cc b/src/execution.cc |
index ecfa1db1ed83067c1c824777ca3c1a3fae6883ab..60756249b0c5774d08cf477a1afa10a510863fa6 100644 |
--- a/src/execution.cc |
+++ b/src/execution.cc |
@@ -156,8 +156,9 @@ Handle<Object> Execution::Call(Handle<Object> callable, |
bool convert_receiver) { |
*pending_exception = false; |
+ Isolate* isolate = Isolate::Current(); |
Sven Panne
2013/09/02 14:23:45
I think all callers have the Isolate already, so w
dcarney
2013/09/02 15:38:44
You missed nothing. I didn't want to transform th
|
if (!callable->IsJSFunction()) { |
- callable = TryGetFunctionDelegate(callable, pending_exception); |
+ callable = TryGetFunctionDelegate(isolate, callable, pending_exception); |
if (*pending_exception) return callable; |
} |
Handle<JSFunction> func = Handle<JSFunction>::cast(callable); |
@@ -174,7 +175,7 @@ Handle<Object> Execution::Call(Handle<Object> callable, |
receiver = Handle<Object>(global, func->GetIsolate()); |
} |
} else { |
- receiver = ToObject(receiver, pending_exception); |
+ receiver = ToObject(isolate, receiver, pending_exception); |
} |
if (*pending_exception) return callable; |
} |
@@ -234,9 +235,9 @@ Handle<Object> Execution::TryCall(Handle<JSFunction> func, |
} |
-Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) { |
+Handle<Object> Execution::GetFunctionDelegate(Isolate* isolate, |
+ Handle<Object> object) { |
ASSERT(!object->IsJSFunction()); |
- Isolate* isolate = Isolate::Current(); |
Factory* factory = isolate->factory(); |
// If you return a function from here, it will be called when an |
@@ -261,10 +262,10 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) { |
} |
-Handle<Object> Execution::TryGetFunctionDelegate(Handle<Object> object, |
+Handle<Object> Execution::TryGetFunctionDelegate(Isolate* isolate, |
+ Handle<Object> object, |
bool* has_pending_exception) { |
ASSERT(!object->IsJSFunction()); |
- Isolate* isolate = Isolate::Current(); |
// If object is a function proxy, get its handler. Iterate if necessary. |
Object* fun = *object; |
@@ -292,9 +293,9 @@ Handle<Object> Execution::TryGetFunctionDelegate(Handle<Object> object, |
} |
-Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) { |
+Handle<Object> Execution::GetConstructorDelegate(Isolate* isolate, |
+ Handle<Object> object) { |
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. |
@@ -319,10 +320,10 @@ Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) { |
Handle<Object> Execution::TryGetConstructorDelegate( |
+ Isolate* isolate, |
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. |
@@ -596,7 +597,6 @@ void StackGuard::InitThread(const ExecutionAccess& lock) { |
#define RETURN_NATIVE_CALL(name, args, has_pending_exception) \ |
do { \ |
- Isolate* isolate = Isolate::Current(); \ |
Handle<Object> argv[] = args; \ |
ASSERT(has_pending_exception != NULL); \ |
return Call(isolate->name##_fun(), \ |
@@ -606,44 +606,50 @@ void StackGuard::InitThread(const ExecutionAccess& lock) { |
} while (false) |
-Handle<Object> Execution::ToNumber(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToNumber( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_number, { obj }, exc); |
} |
-Handle<Object> Execution::ToString(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToString( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_string, { obj }, exc); |
} |
-Handle<Object> Execution::ToDetailString(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToDetailString( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_detail_string, { obj }, exc); |
} |
-Handle<Object> Execution::ToObject(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToObject( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
if (obj->IsSpecObject()) return obj; |
RETURN_NATIVE_CALL(to_object, { obj }, exc); |
} |
-Handle<Object> Execution::ToInteger(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToInteger( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_integer, { obj }, exc); |
} |
-Handle<Object> Execution::ToUint32(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToUint32( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_uint32, { obj }, exc); |
} |
-Handle<Object> Execution::ToInt32(Handle<Object> obj, bool* exc) { |
+Handle<Object> Execution::ToInt32( |
+ Isolate* isolate, Handle<Object> obj, bool* exc) { |
RETURN_NATIVE_CALL(to_int32, { obj }, exc); |
} |
-Handle<Object> Execution::NewDate(double time, bool* exc) { |
- Isolate* isolate = Isolate::Current(); |
+Handle<Object> Execution::NewDate(Isolate* isolate, double time, bool* exc) { |
Handle<Object> time_obj = isolate->factory()->NewNumber(time); |
RETURN_NATIVE_CALL(create_date, { time_obj }, exc); |
} |
@@ -749,10 +755,10 @@ Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data, |
} |
-void Execution::ConfigureInstance(Handle<Object> instance, |
+void Execution::ConfigureInstance(Isolate* isolate, |
+ Handle<Object> instance, |
Handle<Object> instance_template, |
bool* exc) { |
- Isolate* isolate = Isolate::Current(); |
Handle<Object> args[] = { instance, instance_template }; |
Execution::Call(isolate->configure_instance_fun(), |
isolate->js_builtins_object(), |
@@ -782,9 +788,7 @@ Handle<String> Execution::GetStackTraceLine(Handle<Object> recv, |
} |
-static Object* RuntimePreempt() { |
- Isolate* isolate = Isolate::Current(); |
- |
+static Object* RuntimePreempt(Isolate* isolate) { |
// Clear the preempt request flag. |
isolate->stack_guard()->Continue(PREEMPT); |
@@ -813,9 +817,7 @@ static Object* RuntimePreempt() { |
#ifdef ENABLE_DEBUGGER_SUPPORT |
-Object* Execution::DebugBreakHelper() { |
- Isolate* isolate = Isolate::Current(); |
- |
+Object* Execution::DebugBreakHelper(Isolate* isolate) { |
// Just continue if breaks are disabled. |
if (isolate->debug()->disable_break()) { |
return isolate->heap()->undefined_value(); |
@@ -861,15 +863,15 @@ Object* Execution::DebugBreakHelper() { |
// Clear the debug break request flag. |
isolate->stack_guard()->Continue(DEBUGBREAK); |
- ProcessDebugMessages(debug_command_only); |
+ ProcessDebugMessages(isolate, debug_command_only); |
// Return to continue execution. |
return isolate->heap()->undefined_value(); |
} |
-void Execution::ProcessDebugMessages(bool debug_command_only) { |
- Isolate* isolate = Isolate::Current(); |
+void Execution::ProcessDebugMessages(Isolate* isolate, |
+ bool debug_command_only) { |
// Clear the debug command request flag. |
isolate->stack_guard()->Continue(DEBUGCOMMAND); |
@@ -880,7 +882,7 @@ void Execution::ProcessDebugMessages(bool debug_command_only) { |
HandleScope scope(isolate); |
// Enter the debugger. Just continue if we fail to enter the debugger. |
- EnterDebugger debugger; |
+ EnterDebugger debugger(isolate); |
if (debugger.FailedToEnter()) { |
return; |
} |
@@ -911,10 +913,10 @@ MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) { |
isolate->runtime_profiler()->OptimizeNow(); |
#ifdef ENABLE_DEBUGGER_SUPPORT |
if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) { |
- DebugBreakHelper(); |
+ DebugBreakHelper(isolate); |
} |
#endif |
- if (stack_guard->IsPreempted()) RuntimePreempt(); |
+ if (stack_guard->IsPreempted()) RuntimePreempt(isolate); |
if (stack_guard->IsTerminateExecution()) { |
stack_guard->Continue(TERMINATE); |
return isolate->TerminateExecution(); |