diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGNodeFlags.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGNodeFlags.cpp | 131 |
1 files changed, 40 insertions, 91 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGNodeFlags.cpp b/Source/JavaScriptCore/dfg/DFGNodeFlags.cpp index fb83c5a71..c5753d207 100644 --- a/Source/JavaScriptCore/dfg/DFGNodeFlags.cpp +++ b/Source/JavaScriptCore/dfg/DFGNodeFlags.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Apple Inc. All rights reserved. + * Copyright (C) 2012, 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,132 +28,81 @@ #if ENABLE(DFG_JIT) -#include <wtf/BoundsCheckedPointer.h> +#include <wtf/CommaPrinter.h> namespace JSC { namespace DFG { -const char* nodeFlagsAsString(NodeFlags flags) +void dumpNodeFlags(PrintStream& out, NodeFlags flags) { - if (!flags) - return "<empty>"; + if (!(flags ^ NodeDoesNotExit)) { + out.print("<empty>"); + return; + } - static const int size = 128; - static char description[size]; - BoundsCheckedPointer<char> ptr(description, size); - - bool hasPrinted = false; + CommaPrinter comma("|"); if (flags & NodeResultMask) { switch (flags & NodeResultMask) { case NodeResultJS: - ptr.strcat("JS"); + out.print(comma, "JS"); break; case NodeResultNumber: - ptr.strcat("Number"); + out.print(comma, "Number"); break; case NodeResultInt32: - ptr.strcat("Int32"); + out.print(comma, "Int32"); break; case NodeResultBoolean: - ptr.strcat("Boolean"); + out.print(comma, "Boolean"); break; case NodeResultStorage: - ptr.strcat("Storage"); + out.print(comma, "Storage"); break; default: - ASSERT_NOT_REACHED(); + RELEASE_ASSERT_NOT_REACHED(); break; } - hasPrinted = true; } - if (flags & NodeMustGenerate) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("MustGen"); - hasPrinted = true; - } + if (flags & NodeMustGenerate) + out.print(comma, "MustGen"); - if (flags & NodeHasVarArgs) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("VarArgs"); - hasPrinted = true; - } + if (flags & NodeHasVarArgs) + out.print(comma, "VarArgs"); - if (flags & NodeClobbersWorld) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("Clobbers"); - hasPrinted = true; - } + if (flags & NodeClobbersWorld) + out.print(comma, "Clobbers"); - if (flags & NodeMightClobber) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("MightClobber"); - hasPrinted = true; - } + if (flags & NodeMightClobber) + out.print(comma, "MightClobber"); if (flags & NodeResultMask) { - if (!(flags & NodeUsedAsNumber) && !(flags & NodeNeedsNegZero)) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("PureInt"); - hasPrinted = true; - } else if (!(flags & NodeUsedAsNumber)) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("PureInt(w/ neg zero)"); - hasPrinted = true; - } else if (!(flags & NodeNeedsNegZero)) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("PureNum"); - hasPrinted = true; - } - if (flags & NodeUsedAsOther) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("UseAsOther"); - hasPrinted = true; - } + if (!(flags & NodeUsedAsNumber) && !(flags & NodeNeedsNegZero)) + out.print(comma, "PureInt"); + else if (!(flags & NodeUsedAsNumber)) + out.print(comma, "PureInt(w/ neg zero)"); + else if (!(flags & NodeNeedsNegZero)) + out.print(comma, "PureNum"); + if (flags & NodeUsedAsOther) + out.print(comma, "UseAsOther"); } - if (flags & NodeMayOverflow) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("MayOverflow"); - hasPrinted = true; - } + if (flags & NodeMayOverflow) + out.print(comma, "MayOverflow"); - if (flags & NodeMayNegZero) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("MayNegZero"); - hasPrinted = true; - } + if (flags & NodeMayNegZero) + out.print(comma, "MayNegZero"); - if (flags & NodeUsedAsInt) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("UseAsInt"); - hasPrinted = true; - } + if (flags & NodeUsedAsInt) + out.print(comma, "UseAsInt"); - if (!(flags & NodeDoesNotExit)) { - if (hasPrinted) - ptr.strcat("|"); - ptr.strcat("CanExit"); - hasPrinted = true; - } - - *ptr++ = 0; + if (!(flags & NodeDoesNotExit)) + out.print(comma, "CanExit"); - return description; + if (flags & NodeExitsForward) + out.print(comma, "NodeExitsForward"); } - } } // namespace JSC::DFG #endif // ENABLE(DFG_JIT) |