Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 312febc1aa5701d0de3d3a10534d809f0db74647..59d56375da1305e73c420dd4a78b59fca0887ae2 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -45,7 +45,8 @@ CodeStubInterfaceDescriptor::CodeStubInterfaceDescriptor() |
function_mode_(NOT_JS_FUNCTION_STUB_MODE), |
register_params_(NULL), |
deoptimization_handler_(NULL), |
- miss_handler_(IC_Utility(IC::kUnreachable), Isolate::Current()) { } |
+ miss_handler_(IC_Utility(IC::kUnreachable), Isolate::Current()), |
+ has_miss_handler_(false) { } |
bool CodeStub::FindCodeInCache(Code** code_out, Isolate* isolate) { |
@@ -410,6 +411,7 @@ void ICCompareStub::Generate(MacroAssembler* masm) { |
void CompareNilICStub::Record(Handle<Object> object) { |
ASSERT(types_ != Types::FullCompare()); |
+ Types old_types(types_); |
if (equality_kind_ == kStrictEquality) { |
// When testing for strict equality only one value will evaluate to true |
types_.RemoveAll(); |
@@ -430,6 +432,22 @@ void CompareNilICStub::Record(Handle<Object> object) { |
types_.Add(MONOMORPHIC_MAP); |
} |
} |
+ old_types.TraceTransition(types_); |
+} |
+ |
+ |
+void CompareNilICStub::Types::TraceTransition(Types to) const { |
+ if (!FLAG_trace_ic) return; |
+ char buffer[100]; |
+ NoAllocationStringAllocator allocator(buffer, |
+ static_cast<unsigned>(sizeof(buffer))); |
+ StringStream stream(&allocator); |
+ stream.Add("[CompareNilIC ("); |
+ Print(&stream); |
+ stream.Add("->"); |
+ to.Print(&stream); |
+ stream.Add(")]\n"); |
+ stream.OutputToStdOut(); |
} |