Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Unified Diff: src/ic.cc

Issue 12254007: Make the Isolate parameter mandatory for internal HandleScopes. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap.cc ('k') | src/isolate.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index e88ba7d75e10b455c95ea88c86143a1d7080e314..ea0a1b28073f331b8e882e9bfba9c266356adf8c 100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -64,15 +64,14 @@ void IC::TraceIC(const char* type,
State old_state,
Code* new_target) {
if (FLAG_trace_ic) {
- State new_state = StateFrom(new_target,
- HEAP->undefined_value(),
- HEAP->undefined_value());
+ Object* undef = new_target->GetHeap()->undefined_value();
+ State new_state = StateFrom(new_target, undef, undef);
PrintF("[%s in ", type);
- StackFrameIterator it;
+ Isolate* isolate = new_target->GetIsolate();
+ StackFrameIterator it(isolate);
while (it.frame()->fp() != this->fp()) it.Advance();
StackFrame* raw_frame = it.frame();
if (raw_frame->is_internal()) {
- Isolate* isolate = new_target->GetIsolate();
Code* apply_builtin = isolate->builtins()->builtin(
Builtins::kFunctionApply);
if (raw_frame->unchecked_code() == apply_builtin) {
@@ -81,7 +80,7 @@ void IC::TraceIC(const char* type,
raw_frame = it.frame();
}
}
- JavaScriptFrame::PrintTop(stdout, false, true);
+ JavaScriptFrame::PrintTop(isolate, stdout, false, true);
bool new_can_grow =
Code::GetKeyedAccessGrowMode(new_target->extra_ic_state()) ==
ALLOW_JSARRAY_GROWTH;
@@ -94,17 +93,17 @@ void IC::TraceIC(const char* type,
}
}
-#define TRACE_GENERIC_IC(type, reason) \
+#define TRACE_GENERIC_IC(isolate, type, reason) \
do { \
if (FLAG_trace_ic) { \
PrintF("[%s patching generic stub in ", type); \
- JavaScriptFrame::PrintTop(stdout, false, true); \
+ JavaScriptFrame::PrintTop(isolate, stdout, false, true); \
PrintF(" (%s)]\n", reason); \
} \
} while (false)
#else
-#define TRACE_GENERIC_IC(type, reason)
+#define TRACE_GENERIC_IC(isolate, type, reason)
#endif // DEBUG
#define TRACE_IC(type, name, old_state, new_target) \
@@ -128,7 +127,7 @@ IC::IC(FrameDepth depth, Isolate* isolate) : isolate_(isolate) {
fp = Memory::Address_at(fp + StandardFrameConstants::kCallerFPOffset);
}
#ifdef DEBUG
- StackFrameIterator it;
+ StackFrameIterator it(isolate);
for (int i = 0; i < depth + 1; i++) it.Advance();
StackFrame* frame = it.frame();
ASSERT(fp == frame->fp() && pc_address == frame->pc_address());
@@ -140,11 +139,11 @@ IC::IC(FrameDepth depth, Isolate* isolate) : isolate_(isolate) {
#ifdef ENABLE_DEBUGGER_SUPPORT
Address IC::OriginalCodeAddress() const {
- HandleScope scope;
+ HandleScope scope(isolate());
// Compute the JavaScript frame for the frame pointer of this IC
// structure. We need this to be able to find the function
// corresponding to the frame.
- StackFrameIterator it;
+ StackFrameIterator it(isolate());
while (it.frame()->fp() != this->fp()) it.Advance();
JavaScriptFrame* frame = JavaScriptFrame::cast(it.frame());
// Find the function on the stack and both the active code for the
@@ -453,7 +452,7 @@ Handle<Object> CallICBase::TryCallAsFunction(Handle<Object> object) {
// Patch the receiver and use the delegate as the function to
// invoke. This is used for invoking objects as if they were functions.
const int argc = target()->arguments_count();
- StackFrameLocator locator;
+ StackFrameLocator locator(isolate());
JavaScriptFrame* frame = locator.FindJavaScriptFrame(0);
int index = frame->ComputeExpressionsCount() - (argc + 1);
frame->SetExpression(index, *object);
@@ -481,7 +480,7 @@ void CallICBase::ReceiverToObjectIfRequired(Handle<Object> callee,
if (object->IsString() || object->IsNumber() || object->IsBoolean()) {
// Change the receiver to the result of calling ToObject on it.
const int argc = this->target()->arguments_count();
- StackFrameLocator locator;
+ StackFrameLocator locator(isolate());
JavaScriptFrame* frame = locator.FindJavaScriptFrame(0);
int index = frame->ComputeExpressionsCount() - (argc + 1);
frame->SetExpression(index, *isolate()->factory()->ToObject(object));
@@ -1162,7 +1161,7 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) {
// via megamorphic stubs, since they don't have a map in their relocation info
// and so the stubs can't be harvested for the object needed for a map check.
if (target()->type() != Code::NORMAL) {
- TRACE_GENERIC_IC("KeyedIC", "non-NORMAL target type");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "non-NORMAL target type");
return generic_stub();
}
@@ -1204,14 +1203,14 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) {
if (!AddOneReceiverMapIfMissing(&target_receiver_maps, receiver_map)) {
// If the miss wasn't due to an unseen map, a polymorphic stub
// won't help, use the generic stub.
- TRACE_GENERIC_IC("KeyedIC", "same map added twice");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "same map added twice");
return generic_stub();
}
// If the maximum number of receiver maps has been exceeded, use the generic
// version of the IC.
if (target_receiver_maps.length() > kMaxKeyedPolymorphism) {
- TRACE_GENERIC_IC("KeyedIC", "max polymorph exceeded");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "max polymorph exceeded");
return generic_stub();
}
@@ -1254,7 +1253,7 @@ MaybeObject* KeyedLoadIC::Load(State state,
}
}
} else {
- TRACE_GENERIC_IC("KeyedLoadIC", "force generic");
+ TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "force generic");
}
ASSERT(!stub.is_null());
set_target(*stub);
@@ -1542,7 +1541,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
// via megamorphic stubs, since they don't have a map in their relocation info
// and so the stubs can't be harvested for the object needed for a map check.
if (target()->type() != Code::NORMAL) {
- TRACE_GENERIC_IC("KeyedIC", "non-NORMAL target type");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "non-NORMAL target type");
return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
}
@@ -1597,14 +1596,14 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
if (!map_added) {
// If the miss wasn't due to an unseen map, a polymorphic stub
// won't help, use the generic stub.
- TRACE_GENERIC_IC("KeyedIC", "same map added twice");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "same map added twice");
return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
}
// If the maximum number of receiver maps has been exceeded, use the generic
// version of the IC.
if (target_receiver_maps.length() > kMaxKeyedPolymorphism) {
- TRACE_GENERIC_IC("KeyedIC", "max polymorph exceeded");
+ TRACE_GENERIC_IC(isolate(), "KeyedIC", "max polymorph exceeded");
return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
}
@@ -1753,7 +1752,7 @@ MaybeObject* KeyedStoreIC::Store(State state,
}
}
} else {
- TRACE_GENERIC_IC("KeyedStoreIC", "force generic");
+ TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "force generic");
}
ASSERT(!stub.is_null());
set_target(*stub);
@@ -1906,7 +1905,7 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedLoadIC_MissForceGeneric) {
// Used from ic-<arch>.cc.
RUNTIME_FUNCTION(MaybeObject*, StoreIC_Miss) {
- HandleScope scope;
+ HandleScope scope(isolate);
ASSERT(args.length() == 3);
StoreIC ic(isolate);
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
@@ -2149,7 +2148,7 @@ RUNTIME_FUNCTION(MaybeObject*, UnaryOp_Patch) {
if (!code.is_null()) {
if (FLAG_trace_ic) {
PrintF("[UnaryOpIC in ");
- JavaScriptFrame::PrintTop(stdout, false, true);
+ JavaScriptFrame::PrintTop(isolate, stdout, false, true);
PrintF(" (%s->%s)#%s @ %p]\n",
UnaryOpIC::GetName(previous_type),
UnaryOpIC::GetName(type),
@@ -2278,7 +2277,7 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
#ifdef DEBUG
if (FLAG_trace_ic) {
PrintF("[BinaryOpIC in ");
- JavaScriptFrame::PrintTop(stdout, false, true);
+ JavaScriptFrame::PrintTop(isolate, stdout, false, true);
PrintF(" ((%s+%s)->((%s+%s)->%s))#%s @ %p]\n",
BinaryOpIC::GetName(previous_left),
BinaryOpIC::GetName(previous_right),
@@ -2480,7 +2479,7 @@ CompareIC::State CompareIC::TargetState(State old_state,
void CompareIC::UpdateCaches(Handle<Object> x, Handle<Object> y) {
- HandleScope scope;
+ HandleScope scope(isolate());
State previous_left, previous_right, previous_state;
ICCompareStub::DecodeMinorKey(target()->stub_info(), &previous_left,
&previous_right, &previous_state, NULL);
@@ -2497,7 +2496,7 @@ void CompareIC::UpdateCaches(Handle<Object> x, Handle<Object> y) {
#ifdef DEBUG
if (FLAG_trace_ic) {
PrintF("[CompareIC in ");
- JavaScriptFrame::PrintTop(stdout, false, true);
+ JavaScriptFrame::PrintTop(isolate(), stdout, false, true);
PrintF(" ((%s+%s=%s)->(%s+%s=%s))#%s @ %p]\n",
GetStateName(previous_left),
GetStateName(previous_right),
« no previous file with comments | « src/heap.cc ('k') | src/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698