Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 3ca726ee7ed94fab56f2f15c2dfe90f3cbe80f9f..d63453676f4cbbb81b69a3b1176bc4ab7eff64c2 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -318,29 +318,6 @@ void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime( |
} |
} |
- |
-std::ostream& operator<<(std::ostream& os, const StringAddFlags& flags) { |
- switch (flags) { |
- case STRING_ADD_CHECK_NONE: |
- return os << "CheckNone"; |
- case STRING_ADD_CHECK_LEFT: |
- return os << "CheckLeft"; |
- case STRING_ADD_CHECK_RIGHT: |
- return os << "CheckRight"; |
- case STRING_ADD_CHECK_BOTH: |
- return os << "CheckBoth"; |
- case STRING_ADD_CONVERT_LEFT: |
- return os << "ConvertLeft"; |
- case STRING_ADD_CONVERT_RIGHT: |
- return os << "ConvertRight"; |
- case STRING_ADD_CONVERT: |
- break; |
- } |
- UNREACHABLE(); |
- return os; |
-} |
- |
- |
void StringAddStub::PrintBaseName(std::ostream& os) const { // NOLINT |
os << "StringAddStub_" << flags() << "_" << pretenure_flag(); |
} |
@@ -2357,27 +2334,6 @@ void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { |
os << ": " << from << "=>" << to << "]" << std::endl; |
} |
- |
-// TODO(svenpanne) Make this a real infix_ostream_iterator. |
-class SimpleListPrinter { |
- public: |
- explicit SimpleListPrinter(std::ostream& os) : os_(os), first_(true) {} |
- |
- void Add(const char* s) { |
- if (first_) { |
- first_ = false; |
- } else { |
- os_ << ","; |
- } |
- os_ << s; |
- } |
- |
- private: |
- std::ostream& os_; |
- bool first_; |
-}; |
- |
- |
void CallICStub::PrintState(std::ostream& os) const { // NOLINT |
os << state(); |
} |
@@ -3043,82 +2999,53 @@ void StoreFastElementStub::GenerateAheadOfTime(Isolate* isolate) { |
} |
bool ToBooleanICStub::UpdateStatus(Handle<Object> object) { |
- Types new_types = types(); |
- Types old_types = new_types; |
- bool to_boolean_value = new_types.UpdateStatus(isolate(), object); |
- TraceTransition(old_types, new_types); |
- set_sub_minor_key(TypesBits::update(sub_minor_key(), new_types.ToIntegral())); |
- return to_boolean_value; |
-} |
- |
-void ToBooleanICStub::PrintState(std::ostream& os) const { // NOLINT |
- os << types(); |
-} |
- |
-std::ostream& operator<<(std::ostream& os, const ToBooleanICStub::Types& s) { |
- os << "("; |
- SimpleListPrinter p(os); |
- if (s.IsEmpty()) p.Add("None"); |
- if (s.Contains(ToBooleanICStub::UNDEFINED)) p.Add("Undefined"); |
- if (s.Contains(ToBooleanICStub::BOOLEAN)) p.Add("Bool"); |
- if (s.Contains(ToBooleanICStub::NULL_TYPE)) p.Add("Null"); |
- if (s.Contains(ToBooleanICStub::SMI)) p.Add("Smi"); |
- if (s.Contains(ToBooleanICStub::SPEC_OBJECT)) p.Add("SpecObject"); |
- if (s.Contains(ToBooleanICStub::STRING)) p.Add("String"); |
- if (s.Contains(ToBooleanICStub::SYMBOL)) p.Add("Symbol"); |
- if (s.Contains(ToBooleanICStub::HEAP_NUMBER)) p.Add("HeapNumber"); |
- if (s.Contains(ToBooleanICStub::SIMD_VALUE)) p.Add("SimdValue"); |
- return os << ")"; |
-} |
- |
-bool ToBooleanICStub::Types::UpdateStatus(Isolate* isolate, |
- Handle<Object> object) { |
- if (object->IsUndefined(isolate)) { |
- Add(UNDEFINED); |
- return false; |
+ ToBooleanHints old_hints = hints(); |
+ ToBooleanHints new_hints = old_hints; |
+ bool to_boolean_value = false; // Dummy initialization. |
+ if (object->IsUndefined(isolate())) { |
+ new_hints |= ToBooleanHint::kUndefined; |
+ to_boolean_value = false; |
} else if (object->IsBoolean()) { |
- Add(BOOLEAN); |
- return object->IsTrue(isolate); |
- } else if (object->IsNull(isolate)) { |
- Add(NULL_TYPE); |
- return false; |
+ new_hints |= ToBooleanHint::kBoolean; |
+ to_boolean_value = object->IsTrue(isolate()); |
+ } else if (object->IsNull(isolate())) { |
+ new_hints |= ToBooleanHint::kNull; |
+ to_boolean_value = false; |
} else if (object->IsSmi()) { |
- Add(SMI); |
- return Smi::cast(*object)->value() != 0; |
+ new_hints |= ToBooleanHint::kSmallInteger; |
+ to_boolean_value = Smi::cast(*object)->value() != 0; |
} else if (object->IsJSReceiver()) { |
- Add(SPEC_OBJECT); |
- return !object->IsUndetectable(); |
+ new_hints |= ToBooleanHint::kReceiver; |
+ to_boolean_value = !object->IsUndetectable(); |
} else if (object->IsString()) { |
DCHECK(!object->IsUndetectable()); |
- Add(STRING); |
- return String::cast(*object)->length() != 0; |
+ new_hints |= ToBooleanHint::kString; |
+ to_boolean_value = String::cast(*object)->length() != 0; |
} else if (object->IsSymbol()) { |
- Add(SYMBOL); |
- return true; |
+ new_hints |= ToBooleanHint::kSymbol; |
+ to_boolean_value = true; |
} else if (object->IsHeapNumber()) { |
DCHECK(!object->IsUndetectable()); |
- Add(HEAP_NUMBER); |
+ new_hints |= ToBooleanHint::kHeapNumber; |
double value = HeapNumber::cast(*object)->value(); |
- return value != 0 && !std::isnan(value); |
+ to_boolean_value = value != 0 && !std::isnan(value); |
} else if (object->IsSimd128Value()) { |
- Add(SIMD_VALUE); |
- return true; |
+ new_hints |= ToBooleanHint::kSimdValue; |
+ to_boolean_value = true; |
} else { |
// We should never see an internal object at runtime here! |
UNREACHABLE(); |
- return true; |
+ to_boolean_value = true; |
} |
+ TraceTransition(old_hints, new_hints); |
+ set_sub_minor_key(HintsBits::update(sub_minor_key(), new_hints)); |
+ return to_boolean_value; |
} |
-bool ToBooleanICStub::Types::NeedsMap() const { |
- return Contains(ToBooleanICStub::SPEC_OBJECT) || |
- Contains(ToBooleanICStub::STRING) || |
- Contains(ToBooleanICStub::SYMBOL) || |
- Contains(ToBooleanICStub::HEAP_NUMBER) || |
- Contains(ToBooleanICStub::SIMD_VALUE); |
+void ToBooleanICStub::PrintState(std::ostream& os) const { // NOLINT |
+ os << hints(); |
} |
- |
void StubFailureTrampolineStub::GenerateAheadOfTime(Isolate* isolate) { |
StubFailureTrampolineStub stub1(isolate, NOT_JS_FUNCTION_STUB_MODE); |
StubFailureTrampolineStub stub2(isolate, JS_FUNCTION_STUB_MODE); |
@@ -3311,21 +3238,5 @@ ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) |
InternalArrayConstructorStub::InternalArrayConstructorStub(Isolate* isolate) |
: PlatformCodeStub(isolate) {} |
-Representation RepresentationFromMachineType(MachineType type) { |
- if (type == MachineType::Int32()) { |
- return Representation::Integer32(); |
- } |
- |
- if (type == MachineType::TaggedSigned()) { |
- return Representation::Smi(); |
- } |
- |
- if (type == MachineType::Pointer()) { |
- return Representation::External(); |
- } |
- |
- return Representation::Tagged(); |
-} |
- |
} // namespace internal |
} // namespace v8 |