| Index: src/objects-printer.cc
|
| diff --git a/src/objects-printer.cc b/src/objects-printer.cc
|
| index 7d8f133e88edcf3f3c2245d66c2f769ca8483ea2..d178c69ec1313ef84291657389264e9a3871fa35 100644
|
| --- a/src/objects-printer.cc
|
| +++ b/src/objects-printer.cc
|
| @@ -82,6 +82,9 @@ void HeapObject::HeapObjectPrint(FILE* out) {
|
| case HEAP_NUMBER_TYPE:
|
| HeapNumber::cast(this)->HeapNumberPrint(out);
|
| break;
|
| + case FIXED_DOUBLE_ARRAY_TYPE:
|
| + FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out);
|
| + break;
|
| case FIXED_ARRAY_TYPE:
|
| FixedArray::cast(this)->FixedArrayPrint(out);
|
| break;
|
| @@ -241,6 +244,53 @@ void ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) {
|
| PrintF(out, "external double array");
|
| }
|
|
|
| +static void PrintElementsKind(FILE* out, ElementsKind kind) {
|
| + switch (kind) {
|
| + case FAST_SMI_ONLY_ELEMENTS:
|
| + PrintF(out, "FAST_SMI_ONLY_ELEMENTS");
|
| + break;
|
| + case FAST_ELEMENTS:
|
| + PrintF(out, "FAST_ELEMENTS");
|
| + break;
|
| + case FAST_DOUBLE_ELEMENTS:
|
| + PrintF(out, "FAST_DOUBLE_ELEMENTS");
|
| + break;
|
| + case DICTIONARY_ELEMENTS:
|
| + PrintF(out, "DICTIONARY_ELEMENTS");
|
| + break;
|
| + case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| + PrintF(out, "NON_STRICT_ARGUMENTS_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_BYTE_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_BYTE_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_UNSIGNED_BYTE_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_SHORT_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_SHORT_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_UNSIGNED_SHORT_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_INT_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_INT_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_UNSIGNED_INT_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_UNSIGNED_INT_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_FLOAT_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_FLOAT_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_DOUBLE_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS");
|
| + break;
|
| + case EXTERNAL_PIXEL_ELEMENTS:
|
| + PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS");
|
| + break;
|
| + }
|
| +}
|
| +
|
|
|
| void JSObject::PrintProperties(FILE* out) {
|
| if (HasFastProperties()) {
|
| @@ -265,16 +315,19 @@ void JSObject::PrintProperties(FILE* out) {
|
| PrintF(out, " (callback)\n");
|
| break;
|
| case ELEMENTS_TRANSITION:
|
| - PrintF(out, " (elements transition)\n");
|
| + PrintF(out, "(elements transition to ");
|
| + PrintElementsKind(out,
|
| + Map::cast(descs->GetValue(i))->elements_kind());
|
| + PrintF(out, ")\n");
|
| break;
|
| case MAP_TRANSITION:
|
| - PrintF(out, " (map transition)\n");
|
| + PrintF(out, "(map transition)\n");
|
| break;
|
| case CONSTANT_TRANSITION:
|
| - PrintF(out, " (constant transition)\n");
|
| + PrintF(out, "(constant transition)\n");
|
| break;
|
| case NULL_DESCRIPTOR:
|
| - PrintF(out, " (null descriptor)\n");
|
| + PrintF(out, "(null descriptor)\n");
|
| break;
|
| default:
|
| UNREACHABLE();
|
| @@ -288,7 +341,10 @@ void JSObject::PrintProperties(FILE* out) {
|
|
|
|
|
| void JSObject::PrintElements(FILE* out) {
|
| - switch (GetElementsKind()) {
|
| + // Don't call GetElementsKind, it's validate code can cause the printer to
|
| + // fail when debugging.
|
| + switch (map()->elements_kind()) {
|
| + case FAST_SMI_ONLY_ELEMENTS:
|
| case FAST_ELEMENTS: {
|
| // Print in array notation for non-sparse arrays.
|
| FixedArray* p = FixedArray::cast(elements());
|
| @@ -396,8 +452,13 @@ void JSObject::PrintElements(FILE* out) {
|
|
|
| void JSObject::JSObjectPrint(FILE* out) {
|
| PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this));
|
| - PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map()));
|
| - PrintF(out, " - prototype = %p\n", reinterpret_cast<void*>(GetPrototype()));
|
| + PrintF(out, " - map = %p [", reinterpret_cast<void*>(map()));
|
| + // Don't call GetElementsKind, it's validate code can cause the printer to
|
| + // fail when debugging.
|
| + PrintElementsKind(out, this->map()->elements_kind());
|
| + PrintF(out,
|
| + "]\n - prototype = %p\n",
|
| + reinterpret_cast<void*>(GetPrototype()));
|
| PrintF(out, " {\n");
|
| PrintProperties(out);
|
| PrintElements(out);
|
| @@ -528,6 +589,16 @@ void FixedArray::FixedArrayPrint(FILE* out) {
|
| }
|
|
|
|
|
| +void FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) {
|
| + HeapObject::PrintHeader(out, "FixedDoubleArray");
|
| + PrintF(out, " - length: %d", length());
|
| + for (int i = 0; i < length(); i++) {
|
| + PrintF(out, "\n [%d]: %g", i, get_scalar(i));
|
| + }
|
| + PrintF(out, "\n");
|
| +}
|
| +
|
| +
|
| void JSValue::JSValuePrint(FILE* out) {
|
| HeapObject::PrintHeader(out, "ValueObject");
|
| value()->Print(out);
|
|
|