Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/objects-printer.cc b/src/objects-printer.cc
index 551beb2..464177b 100644
--- a/src/objects-printer.cc
+++ b/src/objects-printer.cc
@@ -106,6 +106,8 @@
case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
case JS_GENERATOR_OBJECT_TYPE:
case JS_PROMISE_TYPE:
+ case JS_ARGUMENTS_TYPE:
+ case JS_ERROR_TYPE:
JSObject::cast(this)->JSObjectPrint(os);
break;
case JS_ARRAY_TYPE:
@@ -380,8 +382,7 @@
case DICTIONARY_ELEMENTS:
case SLOW_STRING_WRAPPER_ELEMENTS:
- os << "\n - elements: ";
- elements()->Print(os);
+ SeededNumberDictionary::cast(elements())->Print(os);
break;
case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: {
@@ -424,10 +425,14 @@
static void JSObjectPrintBody(std::ostream& os, JSObject* obj, // NOLINT
bool print_elements = true) {
- os << "\n {";
+ os << "\n - properties = {";
obj->PrintProperties(os);
- if (print_elements) obj->PrintElements(os);
os << "\n }\n";
+ if (print_elements && obj->elements()->length() > 0) {
+ os << " - elements = {";
+ obj->PrintElements(os);
+ os << "\n }\n";
+ }
}
@@ -462,7 +467,7 @@
HeapObject::PrintHeader(os, "Symbol");
os << "\n - hash: " << Hash();
os << "\n - name: " << Brief(name());
- if (name()->IsUndefined()) {
+ if (name()->IsUndefined(GetIsolate())) {
os << " (" << PrivateSymbolToName() << ")";
}
os << "\n - private: " << is_private();
@@ -575,6 +580,40 @@
os << "\n";
}
+template void FeedbackVectorSpecBase<StaticFeedbackVectorSpec>::Print();
+template void FeedbackVectorSpecBase<FeedbackVectorSpec>::Print();
+
+template <typename Derived>
+void FeedbackVectorSpecBase<Derived>::Print() {
+ OFStream os(stdout);
+ FeedbackVectorSpecPrint(os);
+ os << std::flush;
+}
+
+template <typename Derived>
+void FeedbackVectorSpecBase<Derived>::FeedbackVectorSpecPrint(
+ std::ostream& os) { // NOLINT
+ int slot_count = This()->slots();
+ os << " - slot_count: " << slot_count;
+ if (slot_count == 0) {
+ os << " (empty)\n";
+ return;
+ }
+
+ for (int slot = 0, name_index = 0; slot < slot_count;) {
+ FeedbackVectorSlotKind kind = This()->GetKind(slot);
+ int entry_size = TypeFeedbackMetadata::GetSlotSize(kind);
+ DCHECK_LT(0, entry_size);
+
+ os << "\n Slot #" << slot << " " << kind;
+ if (TypeFeedbackMetadata::SlotRequiresName(kind)) {
+ os << ", " << Brief(*This()->GetName(name_index++));
+ }
+
+ slot += entry_size;
+ }
+ os << "\n";
+}
void TypeFeedbackMetadata::Print() {
OFStream os(stdout);
@@ -591,12 +630,16 @@
os << " (empty)\n";
return;
}
+ os << "\n - slot_count: " << slot_count();
TypeFeedbackMetadataIterator iter(this);
while (iter.HasNext()) {
FeedbackVectorSlot slot = iter.Next();
FeedbackVectorSlotKind kind = iter.kind();
os << "\n Slot " << slot << " " << kind;
+ if (TypeFeedbackMetadata::SlotRequiresName(kind)) {
+ os << ", " << Brief(iter.name());
+ }
}
os << "\n";
}
@@ -622,13 +665,22 @@
FeedbackVectorSlot slot = iter.Next();
FeedbackVectorSlotKind kind = iter.kind();
- os << "\n Slot " << slot << " " << kind << " ";
+ os << "\n Slot " << slot << " " << kind;
+ if (TypeFeedbackMetadata::SlotRequiresName(kind)) {
+ os << ", " << Brief(iter.name());
+ }
+ os << " ";
switch (kind) {
case FeedbackVectorSlotKind::LOAD_IC: {
LoadICNexus nexus(this, slot);
os << Code::ICState2String(nexus.StateFromFeedback());
break;
}
+ case FeedbackVectorSlotKind::LOAD_GLOBAL_IC: {
+ LoadGlobalICNexus nexus(this, slot);
+ os << Code::ICState2String(nexus.StateFromFeedback());
+ break;
+ }
case FeedbackVectorSlotKind::KEYED_LOAD_IC: {
KeyedLoadICNexus nexus(this, slot);
os << Code::ICState2String(nexus.StateFromFeedback());
@@ -716,8 +768,6 @@
void Name::NamePrint(std::ostream& os) { // NOLINT
if (IsString()) {
String::cast(this)->StringPrint(os);
- } else if (IsSymbol()) {
- Symbol::cast(this)->name()->Print(os);
} else {
os << Brief(this);
}
@@ -875,6 +925,8 @@
<< shared()->internal_formal_parameter_count();
if (shared()->is_generator()) {
os << "\n - generator";
+ } else if (shared()->is_async()) {
+ os << "\n - async";
}
os << "\n - context = " << Brief(context());
os << "\n - literals = " << Brief(literals());
@@ -916,9 +968,10 @@
os << "\n - end position = " << end_position();
os << "\n - debug info = " << Brief(debug_info());
os << "\n - length = " << length();
+ os << "\n - num_literals = " << num_literals();
os << "\n - optimized_code_map = " << Brief(optimized_code_map());
- os << "\n - feedback_vector = ";
- feedback_vector()->TypeFeedbackVectorPrint(os);
+ os << "\n - feedback_metadata = ";
+ feedback_metadata()->TypeFeedbackMetadataPrint(os);
if (HasBytecodeArray()) {
os << "\n - bytecode_array = " << bytecode_array();
}
@@ -1032,9 +1085,9 @@
void AccessCheckInfo::AccessCheckInfoPrint(std::ostream& os) { // NOLINT
HeapObject::PrintHeader(os, "AccessCheckInfo");
- os << "\n - named_callback: " << Brief(named_callback());
- os << "\n - indexed_callback: " << Brief(indexed_callback());
os << "\n - callback: " << Brief(callback());
+ os << "\n - named_interceptor: " << Brief(named_interceptor());
+ os << "\n - indexed_interceptor: " << Brief(indexed_interceptor());
os << "\n - data: " << Brief(data());
os << "\n";
}
@@ -1187,7 +1240,7 @@
void LayoutDescriptor::Print(std::ostream& os) { // NOLINT
os << "Layout descriptor: ";
- if (IsUninitialized()) {
+ if (IsOddball() && IsUninitialized(HeapObject::cast(this)->GetIsolate())) {
os << "<uninitialized>";
} else if (IsFastPointerLayout()) {
os << "<all tagged>";
@@ -1218,7 +1271,7 @@
} else {
DCHECK(this->IsSymbol());
Symbol* s = Symbol::cast(this);
- if (s->name()->IsUndefined()) {
+ if (s->name()->IsUndefined(GetIsolate())) {
PrintF("#<%s>", s->PrivateSymbolToName());
} else {
PrintF("<%s>", String::cast(s->name())->ToCString().get());
@@ -1233,7 +1286,7 @@
} else {
DCHECK(this->IsSymbol());
Symbol* s = Symbol::cast(this);
- if (s->name()->IsUndefined()) {
+ if (s->name()->IsUndefined(GetIsolate())) {
return SNPrintF(str, "#<%s>", s->PrivateSymbolToName());
} else {
return SNPrintF(str, "<%s>", String::cast(s->name())->ToCString().get());