]> git.saurik.com Git - apple/javascriptcore.git/blob - dfg/DFGNodeFlags.cpp
JavaScriptCore-1097.13.tar.gz
[apple/javascriptcore.git] / dfg / DFGNodeFlags.cpp
1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "config.h"
27 #include "DFGNodeFlags.h"
28
29 #if ENABLE(DFG_JIT)
30
31 #include <wtf/BoundsCheckedPointer.h>
32
33 namespace JSC { namespace DFG {
34
35 const char* nodeFlagsAsString(NodeFlags flags)
36 {
37 if (!flags)
38 return "<empty>";
39
40 static const int size = 128;
41 static char description[size];
42 BoundsCheckedPointer<char> ptr(description, size);
43
44 bool hasPrinted = false;
45
46 if (flags & NodeResultMask) {
47 switch (flags & NodeResultMask) {
48 case NodeResultJS:
49 ptr.strcat("ResultJS");
50 break;
51 case NodeResultNumber:
52 ptr.strcat("ResultNumber");
53 break;
54 case NodeResultInt32:
55 ptr.strcat("ResultInt32");
56 break;
57 case NodeResultBoolean:
58 ptr.strcat("ResultBoolean");
59 break;
60 case NodeResultStorage:
61 ptr.strcat("ResultStorage");
62 break;
63 default:
64 ASSERT_NOT_REACHED();
65 break;
66 }
67 hasPrinted = true;
68 }
69
70 if (flags & NodeMustGenerate) {
71 if (hasPrinted)
72 ptr.strcat("|");
73 ptr.strcat("MustGenerate");
74 hasPrinted = true;
75 }
76
77 if (flags & NodeHasVarArgs) {
78 if (hasPrinted)
79 ptr.strcat("|");
80 ptr.strcat("HasVarArgs");
81 hasPrinted = true;
82 }
83
84 if (flags & NodeClobbersWorld) {
85 if (hasPrinted)
86 ptr.strcat("|");
87 ptr.strcat("ClobbersWorld");
88 hasPrinted = true;
89 }
90
91 if (flags & NodeMightClobber) {
92 if (hasPrinted)
93 ptr.strcat("|");
94 ptr.strcat("MightClobber");
95 hasPrinted = true;
96 }
97
98 if (flags & NodeUsedAsNumber) {
99 if (hasPrinted)
100 ptr.strcat("|");
101 ptr.strcat("UsedAsNum");
102 hasPrinted = true;
103 }
104
105 if (flags & NodeNeedsNegZero) {
106 if (hasPrinted)
107 ptr.strcat("|");
108 ptr.strcat("NeedsNegZero");
109 hasPrinted = true;
110 }
111
112 if (flags & NodeMayOverflow) {
113 if (hasPrinted)
114 ptr.strcat("|");
115 ptr.strcat("MayOverflow");
116 hasPrinted = true;
117 }
118
119 if (flags & NodeMayNegZero) {
120 if (hasPrinted)
121 ptr.strcat("|");
122 ptr.strcat("MayNegZero");
123 hasPrinted = true;
124 }
125
126 if (flags & NodeUsedAsInt) {
127 if (hasPrinted)
128 ptr.strcat("|");
129 ptr.strcat("UsedAsInt");
130 hasPrinted = true;
131 }
132
133 *ptr++ = 0;
134
135 return description;
136 }
137
138
139 } } // namespace JSC::DFG
140
141 #endif // ENABLE(DFG_JIT)
142