diff options
Diffstat (limited to 'Source/JavaScriptCore/bytecode/ArrayProfile.cpp')
-rw-r--r-- | Source/JavaScriptCore/bytecode/ArrayProfile.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/bytecode/ArrayProfile.cpp b/Source/JavaScriptCore/bytecode/ArrayProfile.cpp index 3ba974d74..de7f67887 100644 --- a/Source/JavaScriptCore/bytecode/ArrayProfile.cpp +++ b/Source/JavaScriptCore/bytecode/ArrayProfile.cpp @@ -26,8 +26,44 @@ #include "config.h" #include "ArrayProfile.h" +#include <wtf/StringExtras.h> + namespace JSC { +const char* arrayModesToString(ArrayModes arrayModes) +{ + if (!arrayModes) + return "0:<empty>"; + + if (arrayModes == ALL_ARRAY_MODES) + return "TOP"; + + bool isNonArray = !!(arrayModes & NonArray); + bool isNonArrayWithContiguous = !!(arrayModes & NonArrayWithContiguous); + bool isNonArrayWithArrayStorage = !!(arrayModes & NonArrayWithArrayStorage); + bool isNonArrayWithSlowPutArrayStorage = !!(arrayModes & NonArrayWithSlowPutArrayStorage); + bool isArray = !!(arrayModes & ArrayClass); + bool isArrayWithContiguous = !!(arrayModes & ArrayWithContiguous); + bool isArrayWithArrayStorage = !!(arrayModes & ArrayWithArrayStorage); + bool isArrayWithSlowPutArrayStorage = !!(arrayModes & ArrayWithSlowPutArrayStorage); + + static char result[256]; + snprintf( + result, sizeof(result), + "%u:%s%s%s%s%s%s%s%s", + arrayModes, + isNonArray ? "NonArray" : "", + isNonArrayWithContiguous ? "NonArrayWithContiguous" : "", + isNonArrayWithArrayStorage ? " NonArrayWithArrayStorage" : "", + isNonArrayWithSlowPutArrayStorage ? "NonArrayWithSlowPutArrayStorage" : "", + isArray ? "ArrayClass" : "", + isArrayWithContiguous ? "ArrayWithContiguous" : "", + isArrayWithArrayStorage ? " ArrayWithArrayStorage" : "", + isArrayWithSlowPutArrayStorage ? "ArrayWithSlowPutArrayStorage" : ""); + + return result; +} + void ArrayProfile::computeUpdatedPrediction(OperationInProgress operation) { if (m_lastSeenStructure) { |