OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file defines all of the flags. It is separated into different section, | 5 // This file defines all of the flags. It is separated into different section, |
6 // for Debug, Release, Logging and Profiling, etc. To add a new flag, find the | 6 // for Debug, Release, Logging and Profiling, etc. To add a new flag, find the |
7 // correct section, and use one of the DEFINE_ macros, without a trailing ';'. | 7 // correct section, and use one of the DEFINE_ macros, without a trailing ';'. |
8 // | 8 // |
9 // This include does not have a guard, because it is a template-style include, | 9 // This include does not have a guard, because it is a template-style include, |
10 // which can be included multiple times in different modes. It expects to have | 10 // which can be included multiple times in different modes. It expects to have |
11 // a mode defined before it's included. The modes are FLAG_MODE_... below: | 11 // a mode defined before it's included. The modes are FLAG_MODE_... below: |
12 | 12 |
13 // We want to declare the names of the variables for the header file. Normally | 13 // We want to declare the names of the variables for the header file. Normally |
14 // this will just be an extern declaration, but for a readonly flag we let the | 14 // this will just be an extern declaration, but for a readonly flag we let the |
15 // compiler make better optimizations by giving it the value. | 15 // compiler make better optimizations by giving it the value. |
16 #if defined(FLAG_MODE_DECLARE) | 16 #if defined(FLAG_MODE_DECLARE) |
17 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ | 17 #define FLAG_FULL(ftype, ctype, nam, def, cmt) extern ctype FLAG_##nam; |
18 extern ctype FLAG_##nam; | |
19 #define FLAG_READONLY(ftype, ctype, nam, def, cmt) \ | 18 #define FLAG_READONLY(ftype, ctype, nam, def, cmt) \ |
20 static ctype const FLAG_##nam = def; | 19 static ctype const FLAG_##nam = def; |
21 | 20 |
22 // We want to supply the actual storage and value for the flag variable in the | 21 // We want to supply the actual storage and value for the flag variable in the |
23 // .cc file. We only do this for writable flags. | 22 // .cc file. We only do this for writable flags. |
24 #elif defined(FLAG_MODE_DEFINE) | 23 #elif defined(FLAG_MODE_DEFINE) |
25 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ | 24 #define FLAG_FULL(ftype, ctype, nam, def, cmt) ctype FLAG_##nam = def; |
26 ctype FLAG_##nam = def; | |
27 | 25 |
28 // We need to define all of our default values so that the Flag structure can | 26 // We need to define all of our default values so that the Flag structure can |
29 // access them by pointer. These are just used internally inside of one .cc, | 27 // access them by pointer. These are just used internally inside of one .cc, |
30 // for MODE_META, so there is no impact on the flags interface. | 28 // for MODE_META, so there is no impact on the flags interface. |
31 #elif defined(FLAG_MODE_DEFINE_DEFAULTS) | 29 #elif defined(FLAG_MODE_DEFINE_DEFAULTS) |
32 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ | 30 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ |
33 static ctype const FLAGDEFAULT_##nam = def; | 31 static ctype const FLAGDEFAULT_##nam = def; |
34 | 32 |
35 // We want to write entries into our meta data table, for internal parsing and | 33 // We want to write entries into our meta data table, for internal parsing and |
36 // printing / etc in the flag parser code. We only do this for writable flags. | 34 // printing / etc in the flag parser code. We only do this for writable flags. |
37 #elif defined(FLAG_MODE_META) | 35 #elif defined(FLAG_MODE_META) |
38 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ | 36 #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ |
39 { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt, false }, | 37 { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt, false } \ |
40 #define FLAG_ALIAS(ftype, ctype, alias, nam) \ | 38 , |
41 { Flag::TYPE_##ftype, #alias, &FLAG_##nam, &FLAGDEFAULT_##nam, \ | 39 #define FLAG_ALIAS(ftype, ctype, alias, nam) \ |
42 "alias for --"#nam, false }, | 40 { \ |
| 41 Flag::TYPE_##ftype, #alias, &FLAG_##nam, &FLAGDEFAULT_##nam, \ |
| 42 "alias for --" #nam, false \ |
| 43 } \ |
| 44 , |
43 | 45 |
44 // We produce the code to set flags when it is implied by another flag. | 46 // We produce the code to set flags when it is implied by another flag. |
45 #elif defined(FLAG_MODE_DEFINE_IMPLICATIONS) | 47 #elif defined(FLAG_MODE_DEFINE_IMPLICATIONS) |
46 #define DEFINE_implication(whenflag, thenflag) \ | 48 #define DEFINE_IMPLICATION(whenflag, thenflag) \ |
47 if (FLAG_##whenflag) FLAG_##thenflag = true; | 49 if (FLAG_##whenflag) FLAG_##thenflag = true; |
48 | 50 |
49 #define DEFINE_neg_implication(whenflag, thenflag) \ | 51 #define DEFINE_NEG_IMPLICATION(whenflag, thenflag) \ |
50 if (FLAG_##whenflag) FLAG_##thenflag = false; | 52 if (FLAG_##whenflag) FLAG_##thenflag = false; |
51 | 53 |
52 #else | 54 #else |
53 #error No mode supplied when including flags.defs | 55 #error No mode supplied when including flags.defs |
54 #endif | 56 #endif |
55 | 57 |
56 // Dummy defines for modes where it is not relevant. | 58 // Dummy defines for modes where it is not relevant. |
57 #ifndef FLAG_FULL | 59 #ifndef FLAG_FULL |
58 #define FLAG_FULL(ftype, ctype, nam, def, cmt) | 60 #define FLAG_FULL(ftype, ctype, nam, def, cmt) |
59 #endif | 61 #endif |
60 | 62 |
61 #ifndef FLAG_READONLY | 63 #ifndef FLAG_READONLY |
62 #define FLAG_READONLY(ftype, ctype, nam, def, cmt) | 64 #define FLAG_READONLY(ftype, ctype, nam, def, cmt) |
63 #endif | 65 #endif |
64 | 66 |
65 #ifndef FLAG_ALIAS | 67 #ifndef FLAG_ALIAS |
66 #define FLAG_ALIAS(ftype, ctype, alias, nam) | 68 #define FLAG_ALIAS(ftype, ctype, alias, nam) |
67 #endif | 69 #endif |
68 | 70 |
69 #ifndef DEFINE_implication | 71 #ifndef DEFINE_IMPLICATION |
70 #define DEFINE_implication(whenflag, thenflag) | 72 #define DEFINE_IMPLICATION(whenflag, thenflag) |
71 #endif | 73 #endif |
72 | 74 |
73 #ifndef DEFINE_neg_implication | 75 #ifndef DEFINE_NEG_IMPLICATION |
74 #define DEFINE_neg_implication(whenflag, thenflag) | 76 #define DEFINE_NEG_IMPLICATION(whenflag, thenflag) |
75 #endif | 77 #endif |
76 | 78 |
77 #define COMMA , | 79 #define COMMA , |
78 | 80 |
79 #ifdef FLAG_MODE_DECLARE | 81 #ifdef FLAG_MODE_DECLARE |
80 // Structure used to hold a collection of arguments to the JavaScript code. | 82 // Structure used to hold a collection of arguments to the JavaScript code. |
81 struct JSArguments { | 83 struct JSArguments { |
82 public: | 84 public: |
83 inline const char*& operator[] (int idx) const { | 85 inline const char*& operator[](int idx) const { return argv[idx]; } |
84 return argv[idx]; | |
85 } | |
86 static JSArguments Create(int argc, const char** argv) { | 86 static JSArguments Create(int argc, const char** argv) { |
87 JSArguments args; | 87 JSArguments args; |
88 args.argc = argc; | 88 args.argc = argc; |
89 args.argv = argv; | 89 args.argv = argv; |
90 return args; | 90 return args; |
91 } | 91 } |
92 int argc; | 92 int argc; |
93 const char** argv; | 93 const char** argv; |
94 }; | 94 }; |
95 | 95 |
96 struct MaybeBoolFlag { | 96 struct MaybeBoolFlag { |
97 static MaybeBoolFlag Create(bool has_value, bool value) { | 97 static MaybeBoolFlag Create(bool has_value, bool value) { |
98 MaybeBoolFlag flag; | 98 MaybeBoolFlag flag; |
99 flag.has_value = has_value; | 99 flag.has_value = has_value; |
100 flag.value = value; | 100 flag.value = value; |
101 return flag; | 101 return flag; |
102 } | 102 } |
103 bool has_value; | 103 bool has_value; |
104 bool value; | 104 bool value; |
105 }; | 105 }; |
106 #endif | 106 #endif |
107 | 107 |
108 #if (defined CAN_USE_VFP3_INSTRUCTIONS) || !(defined ARM_TEST_NO_FEATURE_PROBE) | 108 #if (defined CAN_USE_VFP3_INSTRUCTIONS) || !(defined ARM_TEST_NO_FEATURE_PROBE) |
109 # define ENABLE_VFP3_DEFAULT true | 109 #define ENABLE_VFP3_DEFAULT true |
110 #else | 110 #else |
111 # define ENABLE_VFP3_DEFAULT false | 111 #define ENABLE_VFP3_DEFAULT false |
112 #endif | 112 #endif |
113 #if (defined CAN_USE_ARMV7_INSTRUCTIONS) || !(defined ARM_TEST_NO_FEATURE_PROBE) | 113 #if (defined CAN_USE_ARMV7_INSTRUCTIONS) || !(defined ARM_TEST_NO_FEATURE_PROBE) |
114 # define ENABLE_ARMV7_DEFAULT true | 114 #define ENABLE_ARMV7_DEFAULT true |
115 #else | 115 #else |
116 # define ENABLE_ARMV7_DEFAULT false | 116 #define ENABLE_ARMV7_DEFAULT false |
117 #endif | 117 #endif |
118 #if (defined CAN_USE_VFP32DREGS) || !(defined ARM_TEST_NO_FEATURE_PROBE) | 118 #if (defined CAN_USE_VFP32DREGS) || !(defined ARM_TEST_NO_FEATURE_PROBE) |
119 # define ENABLE_32DREGS_DEFAULT true | 119 #define ENABLE_32DREGS_DEFAULT true |
120 #else | 120 #else |
121 # define ENABLE_32DREGS_DEFAULT false | 121 #define ENABLE_32DREGS_DEFAULT false |
122 #endif | 122 #endif |
123 #if (defined CAN_USE_NEON) || !(defined ARM_TEST_NO_FEATURE_PROBE) | 123 #if (defined CAN_USE_NEON) || !(defined ARM_TEST_NO_FEATURE_PROBE) |
124 # define ENABLE_NEON_DEFAULT true | 124 # define ENABLE_NEON_DEFAULT true |
125 #else | 125 #else |
126 # define ENABLE_NEON_DEFAULT false | 126 # define ENABLE_NEON_DEFAULT false |
127 #endif | 127 #endif |
128 | 128 |
129 #define DEFINE_bool(nam, def, cmt) FLAG(BOOL, bool, nam, def, cmt) | 129 #define DEFINE_BOOL(nam, def, cmt) FLAG(BOOL, bool, nam, def, cmt) |
130 #define DEFINE_maybe_bool(nam, cmt) FLAG(MAYBE_BOOL, MaybeBoolFlag, nam, \ | 130 #define DEFINE_MAYBE_BOOL(nam, cmt) \ |
131 { false COMMA false }, cmt) | 131 FLAG(MAYBE_BOOL, MaybeBoolFlag, nam, {false COMMA false}, cmt) |
132 #define DEFINE_int(nam, def, cmt) FLAG(INT, int, nam, def, cmt) | 132 #define DEFINE_INT(nam, def, cmt) FLAG(INT, int, nam, def, cmt) |
133 #define DEFINE_float(nam, def, cmt) FLAG(FLOAT, double, nam, def, cmt) | 133 #define DEFINE_FLOAT(nam, def, cmt) FLAG(FLOAT, double, nam, def, cmt) |
134 #define DEFINE_string(nam, def, cmt) FLAG(STRING, const char*, nam, def, cmt) | 134 #define DEFINE_STRING(nam, def, cmt) FLAG(STRING, const char*, nam, def, cmt) |
135 #define DEFINE_args(nam, cmt) FLAG(ARGS, JSArguments, nam, \ | 135 #define DEFINE_ARGS(nam, cmt) FLAG(ARGS, JSArguments, nam, {0 COMMA NULL}, cmt) |
136 { 0 COMMA NULL }, cmt) | |
137 | 136 |
138 #define DEFINE_ALIAS_bool(alias, nam) FLAG_ALIAS(BOOL, bool, alias, nam) | 137 #define DEFINE_ALIAS_BOOL(alias, nam) FLAG_ALIAS(BOOL, bool, alias, nam) |
139 #define DEFINE_ALIAS_int(alias, nam) FLAG_ALIAS(INT, int, alias, nam) | 138 #define DEFINE_ALIAS_INT(alias, nam) FLAG_ALIAS(INT, int, alias, nam) |
140 #define DEFINE_ALIAS_float(alias, nam) FLAG_ALIAS(FLOAT, double, alias, nam) | 139 #define DEFINE_ALIAS_FLOAT(alias, nam) FLAG_ALIAS(FLOAT, double, alias, nam) |
141 #define DEFINE_ALIAS_string(alias, nam) \ | 140 #define DEFINE_ALIAS_STRING(alias, nam) \ |
142 FLAG_ALIAS(STRING, const char*, alias, nam) | 141 FLAG_ALIAS(STRING, const char*, alias, nam) |
143 #define DEFINE_ALIAS_args(alias, nam) FLAG_ALIAS(ARGS, JSArguments, alias, nam) | 142 #define DEFINE_ALIAS_ARGS(alias, nam) FLAG_ALIAS(ARGS, JSArguments, alias, nam) |
144 | 143 |
145 // | 144 // |
146 // Flags in all modes. | 145 // Flags in all modes. |
147 // | 146 // |
148 #define FLAG FLAG_FULL | 147 #define FLAG FLAG_FULL |
149 | 148 |
150 // Flags for language modes and experimental language features. | 149 // Flags for language modes and experimental language features. |
151 DEFINE_bool(use_strict, false, "enforce strict mode") | 150 DEFINE_BOOL(use_strict, false, "enforce strict mode") |
152 DEFINE_bool(es_staging, false, "enable upcoming ES6+ features") | 151 DEFINE_BOOL(es_staging, false, "enable upcoming ES6+ features") |
153 | 152 |
154 DEFINE_bool(harmony_typeof, false, "enable harmony semantics for typeof") | 153 DEFINE_BOOL(harmony_typeof, false, "enable harmony semantics for typeof") |
155 DEFINE_bool(harmony_scoping, false, "enable harmony block scoping") | 154 DEFINE_BOOL(harmony_scoping, false, "enable harmony block scoping") |
156 DEFINE_bool(harmony_modules, false, | 155 DEFINE_BOOL(harmony_modules, false, |
157 "enable harmony modules (implies block scoping)") | 156 "enable harmony modules (implies block scoping)") |
158 DEFINE_bool(harmony_symbols, false, "enable harmony symbols") | 157 DEFINE_BOOL(harmony_symbols, false, "enable harmony symbols") |
159 DEFINE_bool(harmony_proxies, false, "enable harmony proxies") | 158 DEFINE_BOOL(harmony_proxies, false, "enable harmony proxies") |
160 DEFINE_bool(harmony_collections, false, | 159 DEFINE_BOOL(harmony_collections, false, |
161 "enable harmony collections (sets, maps)") | 160 "enable harmony collections (sets, maps)") |
162 DEFINE_bool(harmony_generators, false, "enable harmony generators") | 161 DEFINE_BOOL(harmony_generators, false, "enable harmony generators") |
163 DEFINE_bool(harmony_iteration, false, "enable harmony iteration (for-of)") | 162 DEFINE_BOOL(harmony_iteration, false, "enable harmony iteration (for-of)") |
164 DEFINE_bool(harmony_numeric_literals, false, | 163 DEFINE_BOOL(harmony_numeric_literals, false, |
165 "enable harmony numeric literals (0o77, 0b11)") | 164 "enable harmony numeric literals (0o77, 0b11)") |
166 DEFINE_bool(harmony_strings, false, "enable harmony string") | 165 DEFINE_BOOL(harmony_strings, false, "enable harmony string") |
167 DEFINE_bool(harmony_arrays, false, "enable harmony arrays") | 166 DEFINE_BOOL(harmony_arrays, false, "enable harmony arrays") |
168 DEFINE_bool(harmony_maths, false, "enable harmony math functions") | 167 DEFINE_BOOL(harmony_maths, false, "enable harmony math functions") |
169 DEFINE_bool(harmony, false, "enable all harmony features (except typeof)") | 168 DEFINE_BOOL(harmony, false, "enable all harmony features (except typeof)") |
170 | 169 |
171 DEFINE_implication(harmony, harmony_scoping) | 170 DEFINE_IMPLICATION(harmony, harmony_scoping) |
172 DEFINE_implication(harmony, harmony_modules) | 171 DEFINE_IMPLICATION(harmony, harmony_modules) |
173 DEFINE_implication(harmony, harmony_proxies) | 172 DEFINE_IMPLICATION(harmony, harmony_proxies) |
174 DEFINE_implication(harmony, harmony_collections) | 173 DEFINE_IMPLICATION(harmony, harmony_collections) |
175 DEFINE_implication(harmony, harmony_generators) | 174 DEFINE_IMPLICATION(harmony, harmony_generators) |
176 DEFINE_implication(harmony, harmony_iteration) | 175 DEFINE_IMPLICATION(harmony, harmony_iteration) |
177 DEFINE_implication(harmony, harmony_numeric_literals) | 176 DEFINE_IMPLICATION(harmony, harmony_numeric_literals) |
178 DEFINE_implication(harmony, harmony_strings) | 177 DEFINE_IMPLICATION(harmony, harmony_strings) |
179 DEFINE_implication(harmony, harmony_arrays) | 178 DEFINE_IMPLICATION(harmony, harmony_arrays) |
180 DEFINE_implication(harmony_modules, harmony_scoping) | 179 DEFINE_IMPLICATION(harmony_modules, harmony_scoping) |
181 DEFINE_implication(harmony_collections, harmony_symbols) | 180 DEFINE_IMPLICATION(harmony_collections, harmony_symbols) |
182 DEFINE_implication(harmony_generators, harmony_symbols) | 181 DEFINE_IMPLICATION(harmony_generators, harmony_symbols) |
183 DEFINE_implication(harmony_iteration, harmony_symbols) | 182 DEFINE_IMPLICATION(harmony_iteration, harmony_symbols) |
184 | 183 |
185 DEFINE_implication(harmony, es_staging) | 184 DEFINE_IMPLICATION(harmony, es_staging) |
186 DEFINE_implication(es_staging, harmony_maths) | 185 DEFINE_IMPLICATION(es_staging, harmony_maths) |
187 DEFINE_implication(es_staging, harmony_symbols) | 186 DEFINE_IMPLICATION(es_staging, harmony_symbols) |
188 DEFINE_implication(es_staging, harmony_collections) | 187 DEFINE_IMPLICATION(es_staging, harmony_collections) |
189 | 188 |
190 // Flags for experimental implementation features. | 189 // Flags for experimental implementation features. |
191 DEFINE_bool(packed_arrays, true, "optimizes arrays that have no holes") | 190 DEFINE_BOOL(packed_arrays, true, "optimizes arrays that have no holes") |
192 DEFINE_bool(smi_only_arrays, true, "tracks arrays with only smi values") | 191 DEFINE_BOOL(smi_only_arrays, true, "tracks arrays with only smi values") |
193 DEFINE_bool(compiled_keyed_dictionary_loads, true, | 192 DEFINE_BOOL(compiled_keyed_dictionary_loads, true, |
194 "use optimizing compiler to generate keyed dictionary load stubs") | 193 "use optimizing compiler to generate keyed dictionary load stubs") |
195 DEFINE_bool(compiled_keyed_generic_loads, false, | 194 DEFINE_BOOL(compiled_keyed_generic_loads, false, |
196 "use optimizing compiler to generate keyed generic load stubs") | 195 "use optimizing compiler to generate keyed generic load stubs") |
197 DEFINE_bool(clever_optimizations, true, | 196 DEFINE_BOOL(clever_optimizations, true, |
198 "Optimize object size, Array shift, DOM strings and string +") | 197 "Optimize object size, Array shift, DOM strings and string +") |
199 // TODO(hpayer): We will remove this flag as soon as we have pretenuring | 198 // TODO(hpayer): We will remove this flag as soon as we have pretenuring |
200 // support for specific allocation sites. | 199 // support for specific allocation sites. |
201 DEFINE_bool(pretenuring_call_new, false, "pretenure call new") | 200 DEFINE_BOOL(pretenuring_call_new, false, "pretenure call new") |
202 DEFINE_bool(allocation_site_pretenuring, true, | 201 DEFINE_BOOL(allocation_site_pretenuring, true, |
203 "pretenure with allocation sites") | 202 "pretenure with allocation sites") |
204 DEFINE_bool(trace_pretenuring, false, | 203 DEFINE_BOOL(trace_pretenuring, false, |
205 "trace pretenuring decisions of HAllocate instructions") | 204 "trace pretenuring decisions of HAllocate instructions") |
206 DEFINE_bool(trace_pretenuring_statistics, false, | 205 DEFINE_BOOL(trace_pretenuring_statistics, false, |
207 "trace allocation site pretenuring statistics") | 206 "trace allocation site pretenuring statistics") |
208 DEFINE_bool(track_fields, true, "track fields with only smi values") | 207 DEFINE_BOOL(track_fields, true, "track fields with only smi values") |
209 DEFINE_bool(track_double_fields, true, "track fields with double values") | 208 DEFINE_BOOL(track_double_fields, true, "track fields with double values") |
210 DEFINE_bool(track_heap_object_fields, true, "track fields with heap values") | 209 DEFINE_BOOL(track_heap_object_fields, true, "track fields with heap values") |
211 DEFINE_bool(track_computed_fields, true, "track computed boilerplate fields") | 210 DEFINE_BOOL(track_computed_fields, true, "track computed boilerplate fields") |
212 DEFINE_implication(track_double_fields, track_fields) | 211 DEFINE_IMPLICATION(track_double_fields, track_fields) |
213 DEFINE_implication(track_heap_object_fields, track_fields) | 212 DEFINE_IMPLICATION(track_heap_object_fields, track_fields) |
214 DEFINE_implication(track_computed_fields, track_fields) | 213 DEFINE_IMPLICATION(track_computed_fields, track_fields) |
215 DEFINE_bool(track_field_types, true, "track field types") | 214 DEFINE_BOOL(track_field_types, true, "track field types") |
216 DEFINE_implication(track_field_types, track_fields) | 215 DEFINE_IMPLICATION(track_field_types, track_fields) |
217 DEFINE_implication(track_field_types, track_heap_object_fields) | 216 DEFINE_IMPLICATION(track_field_types, track_heap_object_fields) |
218 DEFINE_bool(smi_binop, true, "support smi representation in binary operations") | 217 DEFINE_BOOL(smi_binop, true, "support smi representation in binary operations") |
219 | 218 |
220 // Flags for optimization types. | 219 // Flags for optimization types. |
221 DEFINE_bool(optimize_for_size, false, | 220 DEFINE_BOOL(optimize_for_size, false, |
222 "Enables optimizations which favor memory size over execution " | 221 "Enables optimizations which favor memory size over execution " |
223 "speed.") | 222 "speed.") |
224 | 223 |
225 // Flags for data representation optimizations | 224 // Flags for data representation optimizations |
226 DEFINE_bool(unbox_double_arrays, true, "automatically unbox arrays of doubles") | 225 DEFINE_BOOL(unbox_double_arrays, true, "automatically unbox arrays of doubles") |
227 DEFINE_bool(string_slices, true, "use string slices") | 226 DEFINE_BOOL(string_slices, true, "use string slices") |
228 | 227 |
229 // Flags for Crankshaft. | 228 // Flags for Crankshaft. |
230 DEFINE_bool(crankshaft, true, "use crankshaft") | 229 DEFINE_BOOL(crankshaft, true, "use crankshaft") |
231 DEFINE_string(hydrogen_filter, "*", "optimization filter") | 230 DEFINE_STRING(hydrogen_filter, "*", "optimization filter") |
232 DEFINE_bool(use_gvn, true, "use hydrogen global value numbering") | 231 DEFINE_BOOL(use_gvn, true, "use hydrogen global value numbering") |
233 DEFINE_int(gvn_iterations, 3, "maximum number of GVN fix-point iterations") | 232 DEFINE_INT(gvn_iterations, 3, "maximum number of GVN fix-point iterations") |
234 DEFINE_bool(use_canonicalizing, true, "use hydrogen instruction canonicalizing") | 233 DEFINE_BOOL(use_canonicalizing, true, "use hydrogen instruction canonicalizing") |
235 DEFINE_bool(use_inlining, true, "use function inlining") | 234 DEFINE_BOOL(use_inlining, true, "use function inlining") |
236 DEFINE_bool(use_escape_analysis, true, "use hydrogen escape analysis") | 235 DEFINE_BOOL(use_escape_analysis, true, "use hydrogen escape analysis") |
237 DEFINE_bool(use_allocation_folding, true, "use allocation folding") | 236 DEFINE_BOOL(use_allocation_folding, true, "use allocation folding") |
238 DEFINE_bool(use_local_allocation_folding, false, "only fold in basic blocks") | 237 DEFINE_BOOL(use_local_allocation_folding, false, "only fold in basic blocks") |
239 DEFINE_bool(use_write_barrier_elimination, true, | 238 DEFINE_BOOL(use_write_barrier_elimination, true, |
240 "eliminate write barriers targeting allocations in optimized code") | 239 "eliminate write barriers targeting allocations in optimized code") |
241 DEFINE_int(max_inlining_levels, 5, "maximum number of inlining levels") | 240 DEFINE_INT(max_inlining_levels, 5, "maximum number of inlining levels") |
242 DEFINE_int(max_inlined_source_size, 600, | 241 DEFINE_INT(max_inlined_source_size, 600, |
243 "maximum source size in bytes considered for a single inlining") | 242 "maximum source size in bytes considered for a single inlining") |
244 DEFINE_int(max_inlined_nodes, 196, | 243 DEFINE_INT(max_inlined_nodes, 196, |
245 "maximum number of AST nodes considered for a single inlining") | 244 "maximum number of AST nodes considered for a single inlining") |
246 DEFINE_int(max_inlined_nodes_cumulative, 400, | 245 DEFINE_INT(max_inlined_nodes_cumulative, 400, |
247 "maximum cumulative number of AST nodes considered for inlining") | 246 "maximum cumulative number of AST nodes considered for inlining") |
248 DEFINE_bool(loop_invariant_code_motion, true, "loop invariant code motion") | 247 DEFINE_BOOL(loop_invariant_code_motion, true, "loop invariant code motion") |
249 DEFINE_bool(fast_math, true, "faster (but maybe less accurate) math functions") | 248 DEFINE_BOOL(fast_math, true, "faster (but maybe less accurate) math functions") |
250 DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true, | 249 DEFINE_BOOL(collect_megamorphic_maps_from_stub_cache, true, |
251 "crankshaft harvests type feedback from stub cache") | 250 "crankshaft harvests type feedback from stub cache") |
252 DEFINE_bool(hydrogen_stats, false, "print statistics for hydrogen") | 251 DEFINE_BOOL(hydrogen_stats, false, "print statistics for hydrogen") |
253 DEFINE_bool(trace_check_elimination, false, "trace check elimination phase") | 252 DEFINE_BOOL(trace_check_elimination, false, "trace check elimination phase") |
254 DEFINE_bool(trace_hydrogen, false, "trace generated hydrogen to file") | 253 DEFINE_BOOL(trace_hydrogen, false, "trace generated hydrogen to file") |
255 DEFINE_string(trace_hydrogen_filter, "*", "hydrogen tracing filter") | 254 DEFINE_STRING(trace_hydrogen_filter, "*", "hydrogen tracing filter") |
256 DEFINE_bool(trace_hydrogen_stubs, false, "trace generated hydrogen for stubs") | 255 DEFINE_BOOL(trace_hydrogen_stubs, false, "trace generated hydrogen for stubs") |
257 DEFINE_string(trace_hydrogen_file, NULL, "trace hydrogen to given file name") | 256 DEFINE_STRING(trace_hydrogen_file, NULL, "trace hydrogen to given file name") |
258 DEFINE_string(trace_phase, "HLZ", "trace generated IR for specified phases") | 257 DEFINE_STRING(trace_phase, "HLZ", "trace generated IR for specified phases") |
259 DEFINE_bool(trace_inlining, false, "trace inlining decisions") | 258 DEFINE_BOOL(trace_inlining, false, "trace inlining decisions") |
260 DEFINE_bool(trace_load_elimination, false, "trace load elimination") | 259 DEFINE_BOOL(trace_load_elimination, false, "trace load elimination") |
261 DEFINE_bool(trace_store_elimination, false, "trace store elimination") | 260 DEFINE_BOOL(trace_store_elimination, false, "trace store elimination") |
262 DEFINE_bool(trace_alloc, false, "trace register allocator") | 261 DEFINE_BOOL(trace_alloc, false, "trace register allocator") |
263 DEFINE_bool(trace_all_uses, false, "trace all use positions") | 262 DEFINE_BOOL(trace_all_uses, false, "trace all use positions") |
264 DEFINE_bool(trace_range, false, "trace range analysis") | 263 DEFINE_BOOL(trace_range, false, "trace range analysis") |
265 DEFINE_bool(trace_gvn, false, "trace global value numbering") | 264 DEFINE_BOOL(trace_gvn, false, "trace global value numbering") |
266 DEFINE_bool(trace_representation, false, "trace representation types") | 265 DEFINE_BOOL(trace_representation, false, "trace representation types") |
267 DEFINE_bool(trace_removable_simulates, false, "trace removable simulates") | 266 DEFINE_BOOL(trace_removable_simulates, false, "trace removable simulates") |
268 DEFINE_bool(trace_escape_analysis, false, "trace hydrogen escape analysis") | 267 DEFINE_BOOL(trace_escape_analysis, false, "trace hydrogen escape analysis") |
269 DEFINE_bool(trace_allocation_folding, false, "trace allocation folding") | 268 DEFINE_BOOL(trace_allocation_folding, false, "trace allocation folding") |
270 DEFINE_bool(trace_track_allocation_sites, false, | 269 DEFINE_BOOL(trace_track_allocation_sites, false, |
271 "trace the tracking of allocation sites") | 270 "trace the tracking of allocation sites") |
272 DEFINE_bool(trace_migration, false, "trace object migration") | 271 DEFINE_BOOL(trace_migration, false, "trace object migration") |
273 DEFINE_bool(trace_generalization, false, "trace map generalization") | 272 DEFINE_BOOL(trace_generalization, false, "trace map generalization") |
274 DEFINE_bool(stress_pointer_maps, false, "pointer map for every instruction") | 273 DEFINE_BOOL(stress_pointer_maps, false, "pointer map for every instruction") |
275 DEFINE_bool(stress_environments, false, "environment for every instruction") | 274 DEFINE_BOOL(stress_environments, false, "environment for every instruction") |
276 DEFINE_int(deopt_every_n_times, 0, | 275 DEFINE_INT(deopt_every_n_times, 0, |
277 "deoptimize every n times a deopt point is passed") | 276 "deoptimize every n times a deopt point is passed") |
278 DEFINE_int(deopt_every_n_garbage_collections, 0, | 277 DEFINE_INT(deopt_every_n_garbage_collections, 0, |
279 "deoptimize every n garbage collections") | 278 "deoptimize every n garbage collections") |
280 DEFINE_bool(print_deopt_stress, false, "print number of possible deopt points") | 279 DEFINE_BOOL(print_deopt_stress, false, "print number of possible deopt points") |
281 DEFINE_bool(trap_on_deopt, false, "put a break point before deoptimizing") | 280 DEFINE_BOOL(trap_on_deopt, false, "put a break point before deoptimizing") |
282 DEFINE_bool(trap_on_stub_deopt, false, | 281 DEFINE_BOOL(trap_on_stub_deopt, false, |
283 "put a break point before deoptimizing a stub") | 282 "put a break point before deoptimizing a stub") |
284 DEFINE_bool(deoptimize_uncommon_cases, true, "deoptimize uncommon cases") | 283 DEFINE_BOOL(deoptimize_uncommon_cases, true, "deoptimize uncommon cases") |
285 DEFINE_bool(polymorphic_inlining, true, "polymorphic inlining") | 284 DEFINE_BOOL(polymorphic_inlining, true, "polymorphic inlining") |
286 DEFINE_bool(use_osr, true, "use on-stack replacement") | 285 DEFINE_BOOL(use_osr, true, "use on-stack replacement") |
287 DEFINE_bool(array_bounds_checks_elimination, true, | 286 DEFINE_BOOL(array_bounds_checks_elimination, true, |
288 "perform array bounds checks elimination") | 287 "perform array bounds checks elimination") |
289 DEFINE_bool(trace_bce, false, "trace array bounds check elimination") | 288 DEFINE_BOOL(trace_bce, false, "trace array bounds check elimination") |
290 DEFINE_bool(array_bounds_checks_hoisting, false, | 289 DEFINE_BOOL(array_bounds_checks_hoisting, false, |
291 "perform array bounds checks hoisting") | 290 "perform array bounds checks hoisting") |
292 DEFINE_bool(array_index_dehoisting, true, | 291 DEFINE_BOOL(array_index_dehoisting, true, "perform array index dehoisting") |
293 "perform array index dehoisting") | 292 DEFINE_BOOL(analyze_environment_liveness, true, |
294 DEFINE_bool(analyze_environment_liveness, true, | |
295 "analyze liveness of environment slots and zap dead values") | 293 "analyze liveness of environment slots and zap dead values") |
296 DEFINE_bool(load_elimination, true, "use load elimination") | 294 DEFINE_BOOL(load_elimination, true, "use load elimination") |
297 DEFINE_bool(check_elimination, true, "use check elimination") | 295 DEFINE_BOOL(check_elimination, true, "use check elimination") |
298 DEFINE_bool(store_elimination, false, "use store elimination") | 296 DEFINE_BOOL(store_elimination, false, "use store elimination") |
299 DEFINE_bool(dead_code_elimination, true, "use dead code elimination") | 297 DEFINE_BOOL(dead_code_elimination, true, "use dead code elimination") |
300 DEFINE_bool(fold_constants, true, "use constant folding") | 298 DEFINE_BOOL(fold_constants, true, "use constant folding") |
301 DEFINE_bool(trace_dead_code_elimination, false, "trace dead code elimination") | 299 DEFINE_BOOL(trace_dead_code_elimination, false, "trace dead code elimination") |
302 DEFINE_bool(unreachable_code_elimination, true, "eliminate unreachable code") | 300 DEFINE_BOOL(unreachable_code_elimination, true, "eliminate unreachable code") |
303 DEFINE_bool(trace_osr, false, "trace on-stack replacement") | 301 DEFINE_BOOL(trace_osr, false, "trace on-stack replacement") |
304 DEFINE_int(stress_runs, 0, "number of stress runs") | 302 DEFINE_INT(stress_runs, 0, "number of stress runs") |
305 DEFINE_bool(optimize_closures, true, "optimize closures") | 303 DEFINE_BOOL(optimize_closures, true, "optimize closures") |
306 DEFINE_bool(lookup_sample_by_shared, true, | 304 DEFINE_BOOL(lookup_sample_by_shared, true, |
307 "when picking a function to optimize, watch for shared function " | 305 "when picking a function to optimize, watch for shared function " |
308 "info, not JSFunction itself") | 306 "info, not JSFunction itself") |
309 DEFINE_bool(cache_optimized_code, true, | 307 DEFINE_BOOL(cache_optimized_code, true, "cache optimized code for closures") |
310 "cache optimized code for closures") | 308 DEFINE_BOOL(flush_optimized_code_cache, true, |
311 DEFINE_bool(flush_optimized_code_cache, true, | |
312 "flushes the cache of optimized code for closures on every GC") | 309 "flushes the cache of optimized code for closures on every GC") |
313 DEFINE_bool(inline_construct, true, "inline constructor calls") | 310 DEFINE_BOOL(inline_construct, true, "inline constructor calls") |
314 DEFINE_bool(inline_arguments, true, "inline functions with arguments object") | 311 DEFINE_BOOL(inline_arguments, true, "inline functions with arguments object") |
315 DEFINE_bool(inline_accessors, true, "inline JavaScript accessors") | 312 DEFINE_BOOL(inline_accessors, true, "inline JavaScript accessors") |
316 DEFINE_int(escape_analysis_iterations, 2, | 313 DEFINE_INT(escape_analysis_iterations, 2, |
317 "maximum number of escape analysis fix-point iterations") | 314 "maximum number of escape analysis fix-point iterations") |
318 | 315 |
319 DEFINE_bool(optimize_for_in, true, | 316 DEFINE_BOOL(optimize_for_in, true, "optimize functions containing for-in loops") |
320 "optimize functions containing for-in loops") | 317 DEFINE_BOOL(opt_safe_uint32_operations, true, |
321 DEFINE_bool(opt_safe_uint32_operations, true, | |
322 "allow uint32 values on optimize frames if they are used only in " | 318 "allow uint32 values on optimize frames if they are used only in " |
323 "safe operations") | 319 "safe operations") |
324 | 320 |
325 DEFINE_bool(concurrent_recompilation, true, | 321 DEFINE_BOOL(concurrent_recompilation, true, |
326 "optimizing hot functions asynchronously on a separate thread") | 322 "optimizing hot functions asynchronously on a separate thread") |
327 DEFINE_bool(trace_concurrent_recompilation, false, | 323 DEFINE_BOOL(trace_concurrent_recompilation, false, |
328 "track concurrent recompilation") | 324 "track concurrent recompilation") |
329 DEFINE_int(concurrent_recompilation_queue_length, 8, | 325 DEFINE_INT(concurrent_recompilation_queue_length, 8, |
330 "the length of the concurrent compilation queue") | 326 "the length of the concurrent compilation queue") |
331 DEFINE_int(concurrent_recompilation_delay, 0, | 327 DEFINE_INT(concurrent_recompilation_delay, 0, |
332 "artificial compilation delay in ms") | 328 "artificial compilation delay in ms") |
333 DEFINE_bool(block_concurrent_recompilation, false, | 329 DEFINE_BOOL(block_concurrent_recompilation, false, |
334 "block queued jobs until released") | 330 "block queued jobs until released") |
335 DEFINE_bool(concurrent_osr, true, | 331 DEFINE_BOOL(concurrent_osr, true, "concurrent on-stack replacement") |
336 "concurrent on-stack replacement") | 332 DEFINE_IMPLICATION(concurrent_osr, concurrent_recompilation) |
337 DEFINE_implication(concurrent_osr, concurrent_recompilation) | 333 |
338 | 334 DEFINE_BOOL(omit_map_checks_for_leaf_maps, true, |
339 DEFINE_bool(omit_map_checks_for_leaf_maps, true, | |
340 "do not emit check maps for constant values that have a leaf map, " | 335 "do not emit check maps for constant values that have a leaf map, " |
341 "deoptimize the optimized code if the layout of the maps changes.") | 336 "deoptimize the optimized code if the layout of the maps changes.") |
342 | 337 |
343 DEFINE_int(typed_array_max_size_in_heap, 64, | 338 DEFINE_INT(typed_array_max_size_in_heap, 64, |
344 "threshold for in-heap typed array") | 339 "threshold for in-heap typed array") |
345 | 340 |
346 // Profiler flags. | 341 // Profiler flags. |
347 DEFINE_int(frame_count, 1, "number of stack frames inspected by the profiler") | 342 DEFINE_INT(frame_count, 1, "number of stack frames inspected by the profiler") |
348 // 0x1800 fits in the immediate field of an ARM instruction. | 343 // 0x1800 fits in the immediate field of an ARM instruction. |
349 DEFINE_int(interrupt_budget, 0x1800, | 344 DEFINE_INT(interrupt_budget, 0x1800, |
350 "execution budget before interrupt is triggered") | 345 "execution budget before interrupt is triggered") |
351 DEFINE_int(type_info_threshold, 25, | 346 DEFINE_INT(type_info_threshold, 25, |
352 "percentage of ICs that must have type info to allow optimization") | 347 "percentage of ICs that must have type info to allow optimization") |
353 DEFINE_int(self_opt_count, 130, "call count before self-optimization") | 348 DEFINE_INT(self_opt_count, 130, "call count before self-optimization") |
354 | 349 |
355 DEFINE_bool(trace_opt_verbose, false, "extra verbose compilation tracing") | 350 DEFINE_BOOL(trace_opt_verbose, false, "extra verbose compilation tracing") |
356 DEFINE_implication(trace_opt_verbose, trace_opt) | 351 DEFINE_IMPLICATION(trace_opt_verbose, trace_opt) |
357 | 352 |
358 // assembler-ia32.cc / assembler-arm.cc / assembler-x64.cc | 353 // assembler-ia32.cc / assembler-arm.cc / assembler-x64.cc |
359 DEFINE_bool(debug_code, false, | 354 DEFINE_BOOL(debug_code, false, "generate extra code (assertions) for debugging") |
360 "generate extra code (assertions) for debugging") | 355 DEFINE_BOOL(code_comments, false, "emit comments in code disassembly") |
361 DEFINE_bool(code_comments, false, "emit comments in code disassembly") | 356 DEFINE_BOOL(enable_sse3, true, "enable use of SSE3 instructions if available") |
362 DEFINE_bool(enable_sse3, true, | 357 DEFINE_BOOL(enable_sse4_1, true, |
363 "enable use of SSE3 instructions if available") | |
364 DEFINE_bool(enable_sse4_1, true, | |
365 "enable use of SSE4.1 instructions if available") | 358 "enable use of SSE4.1 instructions if available") |
366 DEFINE_bool(enable_sahf, true, | 359 DEFINE_BOOL(enable_sahf, true, |
367 "enable use of SAHF instruction if available (X64 only)") | 360 "enable use of SAHF instruction if available (X64 only)") |
368 DEFINE_bool(enable_vfp3, ENABLE_VFP3_DEFAULT, | 361 DEFINE_BOOL(enable_vfp3, ENABLE_VFP3_DEFAULT, |
369 "enable use of VFP3 instructions if available") | 362 "enable use of VFP3 instructions if available") |
370 DEFINE_bool(enable_armv7, ENABLE_ARMV7_DEFAULT, | 363 DEFINE_BOOL(enable_armv7, ENABLE_ARMV7_DEFAULT, |
371 "enable use of ARMv7 instructions if available (ARM only)") | 364 "enable use of ARMv7 instructions if available (ARM only)") |
372 DEFINE_bool(enable_neon, ENABLE_NEON_DEFAULT, | 365 DEFINE_BOOL(enable_neon, ENABLE_NEON_DEFAULT, |
373 "enable use of NEON instructions if available (ARM only)") | 366 "enable use of NEON instructions if available (ARM only)") |
374 DEFINE_bool(enable_sudiv, true, | 367 DEFINE_BOOL(enable_sudiv, true, |
375 "enable use of SDIV and UDIV instructions if available (ARM only)") | 368 "enable use of SDIV and UDIV instructions if available (ARM only)") |
376 DEFINE_bool(enable_mls, true, | 369 DEFINE_BOOL(enable_mls, true, |
377 "enable use of MLS instructions if available (ARM only)") | 370 "enable use of MLS instructions if available (ARM only)") |
378 DEFINE_bool(enable_movw_movt, false, | 371 DEFINE_BOOL(enable_movw_movt, false, |
379 "enable loading 32-bit constant by means of movw/movt " | 372 "enable loading 32-bit constant by means of movw/movt " |
380 "instruction pairs (ARM only)") | 373 "instruction pairs (ARM only)") |
381 DEFINE_bool(enable_unaligned_accesses, true, | 374 DEFINE_BOOL(enable_unaligned_accesses, true, |
382 "enable unaligned accesses for ARMv7 (ARM only)") | 375 "enable unaligned accesses for ARMv7 (ARM only)") |
383 DEFINE_bool(enable_32dregs, ENABLE_32DREGS_DEFAULT, | 376 DEFINE_BOOL(enable_32dregs, ENABLE_32DREGS_DEFAULT, |
384 "enable use of d16-d31 registers on ARM - this requires VFP3") | 377 "enable use of d16-d31 registers on ARM - this requires VFP3") |
385 DEFINE_bool(enable_vldr_imm, false, | 378 DEFINE_BOOL(enable_vldr_imm, false, |
386 "enable use of constant pools for double immediate (ARM only)") | 379 "enable use of constant pools for double immediate (ARM only)") |
387 DEFINE_bool(force_long_branches, false, | 380 DEFINE_BOOL(force_long_branches, false, |
388 "force all emitted branches to be in long mode (MIPS only)") | 381 "force all emitted branches to be in long mode (MIPS only)") |
389 | 382 |
390 // cpu-arm64.cc | 383 // cpu-arm64.cc |
391 DEFINE_bool(enable_always_align_csp, true, | 384 DEFINE_BOOL(enable_always_align_csp, true, |
392 "enable alignment of csp to 16 bytes on platforms which prefer " | 385 "enable alignment of csp to 16 bytes on platforms which prefer " |
393 "the register to always be aligned (ARM64 only)") | 386 "the register to always be aligned (ARM64 only)") |
394 | 387 |
395 // bootstrapper.cc | 388 // bootstrapper.cc |
396 DEFINE_string(expose_natives_as, NULL, "expose natives in global object") | 389 DEFINE_STRING(expose_natives_as, NULL, "expose natives in global object") |
397 DEFINE_string(expose_debug_as, NULL, "expose debug in global object") | 390 DEFINE_STRING(expose_debug_as, NULL, "expose debug in global object") |
398 DEFINE_bool(expose_free_buffer, false, "expose freeBuffer extension") | 391 DEFINE_BOOL(expose_free_buffer, false, "expose freeBuffer extension") |
399 DEFINE_bool(expose_gc, false, "expose gc extension") | 392 DEFINE_BOOL(expose_gc, false, "expose gc extension") |
400 DEFINE_string(expose_gc_as, NULL, | 393 DEFINE_STRING(expose_gc_as, NULL, |
401 "expose gc extension under the specified name") | 394 "expose gc extension under the specified name") |
402 DEFINE_implication(expose_gc_as, expose_gc) | 395 DEFINE_IMPLICATION(expose_gc_as, expose_gc) |
403 DEFINE_bool(expose_externalize_string, false, | 396 DEFINE_BOOL(expose_externalize_string, false, |
404 "expose externalize string extension") | 397 "expose externalize string extension") |
405 DEFINE_bool(expose_trigger_failure, false, "expose trigger-failure extension") | 398 DEFINE_BOOL(expose_trigger_failure, false, "expose trigger-failure extension") |
406 DEFINE_int(stack_trace_limit, 10, "number of stack frames to capture") | 399 DEFINE_INT(stack_trace_limit, 10, "number of stack frames to capture") |
407 DEFINE_bool(builtins_in_stack_traces, false, | 400 DEFINE_BOOL(builtins_in_stack_traces, false, |
408 "show built-in functions in stack traces") | 401 "show built-in functions in stack traces") |
409 DEFINE_bool(disable_native_files, false, "disable builtin natives files") | 402 DEFINE_BOOL(disable_native_files, false, "disable builtin natives files") |
410 | 403 |
411 // builtins-ia32.cc | 404 // builtins-ia32.cc |
412 DEFINE_bool(inline_new, true, "use fast inline allocation") | 405 DEFINE_BOOL(inline_new, true, "use fast inline allocation") |
413 | 406 |
414 // codegen-ia32.cc / codegen-arm.cc | 407 // codegen-ia32.cc / codegen-arm.cc |
415 DEFINE_bool(trace_codegen, false, | 408 DEFINE_BOOL(trace_codegen, false, |
416 "print name of functions for which code is generated") | 409 "print name of functions for which code is generated") |
417 DEFINE_bool(trace, false, "trace function calls") | 410 DEFINE_BOOL(trace, false, "trace function calls") |
418 DEFINE_bool(mask_constants_with_cookie, true, | 411 DEFINE_BOOL(mask_constants_with_cookie, true, |
419 "use random jit cookie to mask large constants") | 412 "use random jit cookie to mask large constants") |
420 | 413 |
421 // codegen.cc | 414 // codegen.cc |
422 DEFINE_bool(lazy, true, "use lazy compilation") | 415 DEFINE_BOOL(lazy, true, "use lazy compilation") |
423 DEFINE_bool(trace_opt, false, "trace lazy optimization") | 416 DEFINE_BOOL(trace_opt, false, "trace lazy optimization") |
424 DEFINE_bool(trace_opt_stats, false, "trace lazy optimization statistics") | 417 DEFINE_BOOL(trace_opt_stats, false, "trace lazy optimization statistics") |
425 DEFINE_bool(opt, true, "use adaptive optimizations") | 418 DEFINE_BOOL(opt, true, "use adaptive optimizations") |
426 DEFINE_bool(always_opt, false, "always try to optimize functions") | 419 DEFINE_BOOL(always_opt, false, "always try to optimize functions") |
427 DEFINE_bool(always_osr, false, "always try to OSR functions") | 420 DEFINE_BOOL(always_osr, false, "always try to OSR functions") |
428 DEFINE_bool(prepare_always_opt, false, "prepare for turning on always opt") | 421 DEFINE_BOOL(prepare_always_opt, false, "prepare for turning on always opt") |
429 DEFINE_bool(trace_deopt, false, "trace optimize function deoptimization") | 422 DEFINE_BOOL(trace_deopt, false, "trace optimize function deoptimization") |
430 DEFINE_bool(trace_stub_failures, false, | 423 DEFINE_BOOL(trace_stub_failures, false, |
431 "trace deoptimization of generated code stubs") | 424 "trace deoptimization of generated code stubs") |
432 | 425 |
433 // compiler.cc | 426 // compiler.cc |
434 DEFINE_int(min_preparse_length, 1024, | 427 DEFINE_INT(min_preparse_length, 1024, |
435 "minimum length for automatic enable preparsing") | 428 "minimum length for automatic enable preparsing") |
436 DEFINE_bool(always_full_compiler, false, | 429 DEFINE_BOOL(always_full_compiler, false, |
437 "try to use the dedicated run-once backend for all code") | 430 "try to use the dedicated run-once backend for all code") |
438 DEFINE_int(max_opt_count, 10, | 431 DEFINE_INT(max_opt_count, 10, |
439 "maximum number of optimization attempts before giving up.") | 432 "maximum number of optimization attempts before giving up.") |
440 | 433 |
441 // compilation-cache.cc | 434 // compilation-cache.cc |
442 DEFINE_bool(compilation_cache, true, "enable compilation cache") | 435 DEFINE_BOOL(compilation_cache, true, "enable compilation cache") |
443 | 436 |
444 DEFINE_bool(cache_prototype_transitions, true, "cache prototype transitions") | 437 DEFINE_BOOL(cache_prototype_transitions, true, "cache prototype transitions") |
445 | 438 |
446 // cpu-profiler.cc | 439 // cpu-profiler.cc |
447 DEFINE_int(cpu_profiler_sampling_interval, 1000, | 440 DEFINE_INT(cpu_profiler_sampling_interval, 1000, |
448 "CPU profiler sampling interval in microseconds") | 441 "CPU profiler sampling interval in microseconds") |
449 | 442 |
450 // debug.cc | 443 // debug.cc |
451 DEFINE_bool(trace_debug_json, false, "trace debugging JSON request/response") | 444 DEFINE_BOOL(trace_debug_json, false, "trace debugging JSON request/response") |
452 DEFINE_bool(trace_js_array_abuse, false, | 445 DEFINE_BOOL(trace_js_array_abuse, false, |
453 "trace out-of-bounds accesses to JS arrays") | 446 "trace out-of-bounds accesses to JS arrays") |
454 DEFINE_bool(trace_external_array_abuse, false, | 447 DEFINE_BOOL(trace_external_array_abuse, false, |
455 "trace out-of-bounds-accesses to external arrays") | 448 "trace out-of-bounds-accesses to external arrays") |
456 DEFINE_bool(trace_array_abuse, false, | 449 DEFINE_BOOL(trace_array_abuse, false, |
457 "trace out-of-bounds accesses to all arrays") | 450 "trace out-of-bounds accesses to all arrays") |
458 DEFINE_implication(trace_array_abuse, trace_js_array_abuse) | 451 DEFINE_IMPLICATION(trace_array_abuse, trace_js_array_abuse) |
459 DEFINE_implication(trace_array_abuse, trace_external_array_abuse) | 452 DEFINE_IMPLICATION(trace_array_abuse, trace_external_array_abuse) |
460 DEFINE_bool(enable_liveedit, true, "enable liveedit experimental feature") | 453 DEFINE_BOOL(enable_liveedit, true, "enable liveedit experimental feature") |
461 DEFINE_bool(hard_abort, true, "abort by crashing") | 454 DEFINE_BOOL(hard_abort, true, "abort by crashing") |
462 | 455 |
463 // execution.cc | 456 // execution.cc |
464 // Slightly less than 1MB on 64-bit, since Windows' default stack size for | 457 // Slightly less than 1MB on 64-bit, since Windows' default stack size for |
465 // the main execution thread is 1MB for both 32 and 64-bit. | 458 // the main execution thread is 1MB for both 32 and 64-bit. |
466 DEFINE_int(stack_size, kPointerSize * 123, | 459 DEFINE_INT(stack_size, kPointerSize * 123, |
467 "default size of stack region v8 is allowed to use (in kBytes)") | 460 "default size of stack region v8 is allowed to use (in kBytes)") |
468 | 461 |
469 // frames.cc | 462 // frames.cc |
470 DEFINE_int(max_stack_trace_source_length, 300, | 463 DEFINE_INT(max_stack_trace_source_length, 300, |
471 "maximum length of function source code printed in a stack trace.") | 464 "maximum length of function source code printed in a stack trace.") |
472 | 465 |
473 // full-codegen.cc | 466 // full-codegen.cc |
474 DEFINE_bool(always_inline_smi_code, false, | 467 DEFINE_BOOL(always_inline_smi_code, false, |
475 "always inline smi code in non-opt code") | 468 "always inline smi code in non-opt code") |
476 | 469 |
477 // heap.cc | 470 // heap.cc |
478 DEFINE_int(min_semi_space_size, 0, | 471 DEFINE_INT(min_semi_space_size, 0, |
479 "min size of a semi-space (in MBytes), the new space consists of two" | 472 "min size of a semi-space (in MBytes), the new space consists of two" |
480 "semi-spaces") | 473 "semi-spaces") |
481 DEFINE_int(max_semi_space_size, 0, | 474 DEFINE_INT(max_semi_space_size, 0, |
482 "max size of a semi-space (in MBytes), the new space consists of two" | 475 "max size of a semi-space (in MBytes), the new space consists of two" |
483 "semi-spaces") | 476 "semi-spaces") |
484 DEFINE_int(max_old_space_size, 0, "max size of the old space (in Mbytes)") | 477 DEFINE_INT(max_old_space_size, 0, "max size of the old space (in Mbytes)") |
485 DEFINE_int(max_executable_size, 0, "max size of executable memory (in Mbytes)") | 478 DEFINE_INT(max_executable_size, 0, "max size of executable memory (in Mbytes)") |
486 DEFINE_bool(gc_global, false, "always perform global GCs") | 479 DEFINE_BOOL(gc_global, false, "always perform global GCs") |
487 DEFINE_int(gc_interval, -1, "garbage collect after <n> allocations") | 480 DEFINE_INT(gc_interval, -1, "garbage collect after <n> allocations") |
488 DEFINE_bool(trace_gc, false, | 481 DEFINE_BOOL(trace_gc, false, |
489 "print one trace line following each garbage collection") | 482 "print one trace line following each garbage collection") |
490 DEFINE_bool(trace_gc_nvp, false, | 483 DEFINE_BOOL(trace_gc_nvp, false, |
491 "print one detailed trace line in name=value format " | 484 "print one detailed trace line in name=value format " |
492 "after each garbage collection") | 485 "after each garbage collection") |
493 DEFINE_bool(trace_gc_ignore_scavenger, false, | 486 DEFINE_BOOL(trace_gc_ignore_scavenger, false, |
494 "do not print trace line after scavenger collection") | 487 "do not print trace line after scavenger collection") |
495 DEFINE_bool(print_cumulative_gc_stat, false, | 488 DEFINE_BOOL(print_cumulative_gc_stat, false, |
496 "print cumulative GC statistics in name=value format on exit") | 489 "print cumulative GC statistics in name=value format on exit") |
497 DEFINE_bool(print_max_heap_committed, false, | 490 DEFINE_BOOL(print_max_heap_committed, false, |
498 "print statistics of the maximum memory committed for the heap " | 491 "print statistics of the maximum memory committed for the heap " |
499 "in name=value format on exit") | 492 "in name=value format on exit") |
500 DEFINE_bool(trace_gc_verbose, false, | 493 DEFINE_BOOL(trace_gc_verbose, false, |
501 "print more details following each garbage collection") | 494 "print more details following each garbage collection") |
502 DEFINE_bool(trace_fragmentation, false, | 495 DEFINE_BOOL(trace_fragmentation, false, |
503 "report fragmentation for old pointer and data pages") | 496 "report fragmentation for old pointer and data pages") |
504 DEFINE_bool(collect_maps, true, | 497 DEFINE_BOOL(collect_maps, true, |
505 "garbage collect maps from which no objects can be reached") | 498 "garbage collect maps from which no objects can be reached") |
506 DEFINE_bool(weak_embedded_maps_in_ic, true, | 499 DEFINE_BOOL(weak_embedded_maps_in_ic, true, |
507 "make maps embedded in inline cache stubs") | 500 "make maps embedded in inline cache stubs") |
508 DEFINE_bool(weak_embedded_maps_in_optimized_code, true, | 501 DEFINE_BOOL(weak_embedded_maps_in_optimized_code, true, |
509 "make maps embedded in optimized code weak") | 502 "make maps embedded in optimized code weak") |
510 DEFINE_bool(weak_embedded_objects_in_optimized_code, true, | 503 DEFINE_BOOL(weak_embedded_objects_in_optimized_code, true, |
511 "make objects embedded in optimized code weak") | 504 "make objects embedded in optimized code weak") |
512 DEFINE_bool(flush_code, true, | 505 DEFINE_BOOL(flush_code, true, |
513 "flush code that we expect not to use again (during full gc)") | 506 "flush code that we expect not to use again (during full gc)") |
514 DEFINE_bool(flush_code_incrementally, true, | 507 DEFINE_BOOL(flush_code_incrementally, true, |
515 "flush code that we expect not to use again (incrementally)") | 508 "flush code that we expect not to use again (incrementally)") |
516 DEFINE_bool(trace_code_flushing, false, "trace code flushing progress") | 509 DEFINE_BOOL(trace_code_flushing, false, "trace code flushing progress") |
517 DEFINE_bool(age_code, true, | 510 DEFINE_BOOL(age_code, true, |
518 "track un-executed functions to age code and flush only " | 511 "track un-executed functions to age code and flush only " |
519 "old code (required for code flushing)") | 512 "old code (required for code flushing)") |
520 DEFINE_bool(incremental_marking, true, "use incremental marking") | 513 DEFINE_BOOL(incremental_marking, true, "use incremental marking") |
521 DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") | 514 DEFINE_BOOL(incremental_marking_steps, true, "do incremental marking steps") |
522 DEFINE_bool(trace_incremental_marking, false, | 515 DEFINE_BOOL(trace_incremental_marking, false, |
523 "trace progress of the incremental marking") | 516 "trace progress of the incremental marking") |
524 DEFINE_bool(track_gc_object_stats, false, | 517 DEFINE_BOOL(track_gc_object_stats, false, |
525 "track object counts and memory usage") | 518 "track object counts and memory usage") |
526 DEFINE_bool(parallel_sweeping, false, "enable parallel sweeping") | 519 DEFINE_BOOL(parallel_sweeping, false, "enable parallel sweeping") |
527 DEFINE_bool(concurrent_sweeping, true, "enable concurrent sweeping") | 520 DEFINE_BOOL(concurrent_sweeping, true, "enable concurrent sweeping") |
528 DEFINE_int(sweeper_threads, 0, | 521 DEFINE_INT(sweeper_threads, 0, |
529 "number of parallel and concurrent sweeping threads") | 522 "number of parallel and concurrent sweeping threads") |
530 DEFINE_bool(job_based_sweeping, false, "enable job based sweeping") | 523 DEFINE_BOOL(job_based_sweeping, false, "enable job based sweeping") |
531 #ifdef VERIFY_HEAP | 524 #ifdef VERIFY_HEAP |
532 DEFINE_bool(verify_heap, false, "verify heap pointers before and after GC") | 525 DEFINE_BOOL(verify_heap, false, "verify heap pointers before and after GC") |
533 #endif | 526 #endif |
534 | 527 |
535 | 528 |
536 // heap-snapshot-generator.cc | 529 // heap-snapshot-generator.cc |
537 DEFINE_bool(heap_profiler_trace_objects, false, | 530 DEFINE_BOOL(heap_profiler_trace_objects, false, |
538 "Dump heap object allocations/movements/size_updates") | 531 "Dump heap object allocations/movements/size_updates") |
539 | 532 |
540 | 533 |
541 // v8.cc | 534 // v8.cc |
542 DEFINE_bool(use_idle_notification, true, | 535 DEFINE_BOOL(use_idle_notification, true, |
543 "Use idle notification to reduce memory footprint.") | 536 "Use idle notification to reduce memory footprint.") |
544 // ic.cc | 537 // ic.cc |
545 DEFINE_bool(use_ic, true, "use inline caching") | 538 DEFINE_BOOL(use_ic, true, "use inline caching") |
546 | 539 |
547 // macro-assembler-ia32.cc | 540 // macro-assembler-ia32.cc |
548 DEFINE_bool(native_code_counters, false, | 541 DEFINE_BOOL(native_code_counters, false, |
549 "generate extra code for manipulating stats counters") | 542 "generate extra code for manipulating stats counters") |
550 | 543 |
551 // mark-compact.cc | 544 // mark-compact.cc |
552 DEFINE_bool(always_compact, false, "Perform compaction on every full GC") | 545 DEFINE_BOOL(always_compact, false, "Perform compaction on every full GC") |
553 DEFINE_bool(never_compact, false, | 546 DEFINE_BOOL(never_compact, false, |
554 "Never perform compaction on full GC - testing only") | 547 "Never perform compaction on full GC - testing only") |
555 DEFINE_bool(compact_code_space, true, | 548 DEFINE_BOOL(compact_code_space, true, |
556 "Compact code space on full non-incremental collections") | 549 "Compact code space on full non-incremental collections") |
557 DEFINE_bool(incremental_code_compaction, true, | 550 DEFINE_BOOL(incremental_code_compaction, true, |
558 "Compact code space on full incremental collections") | 551 "Compact code space on full incremental collections") |
559 DEFINE_bool(cleanup_code_caches_at_gc, true, | 552 DEFINE_BOOL(cleanup_code_caches_at_gc, true, |
560 "Flush inline caches prior to mark compact collection and " | 553 "Flush inline caches prior to mark compact collection and " |
561 "flush code caches in maps during mark compact cycle.") | 554 "flush code caches in maps during mark compact cycle.") |
562 DEFINE_bool(use_marking_progress_bar, true, | 555 DEFINE_BOOL(use_marking_progress_bar, true, |
563 "Use a progress bar to scan large objects in increments when " | 556 "Use a progress bar to scan large objects in increments when " |
564 "incremental marking is active.") | 557 "incremental marking is active.") |
565 DEFINE_bool(zap_code_space, true, | 558 DEFINE_BOOL(zap_code_space, true, |
566 "Zap free memory in code space with 0xCC while sweeping.") | 559 "Zap free memory in code space with 0xCC while sweeping.") |
567 DEFINE_int(random_seed, 0, | 560 DEFINE_INT(random_seed, 0, |
568 "Default seed for initializing random generator " | 561 "Default seed for initializing random generator " |
569 "(0, the default, means to use system random).") | 562 "(0, the default, means to use system random).") |
570 | 563 |
571 // objects.cc | 564 // objects.cc |
572 DEFINE_bool(use_verbose_printer, true, "allows verbose printing") | 565 DEFINE_BOOL(use_verbose_printer, true, "allows verbose printing") |
573 | 566 |
574 // parser.cc | 567 // parser.cc |
575 DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") | 568 DEFINE_BOOL(allow_natives_syntax, false, "allow natives syntax") |
576 DEFINE_bool(trace_parse, false, "trace parsing and preparsing") | 569 DEFINE_BOOL(trace_parse, false, "trace parsing and preparsing") |
577 | 570 |
578 // simulator-arm.cc, simulator-arm64.cc and simulator-mips.cc | 571 // simulator-arm.cc, simulator-arm64.cc and simulator-mips.cc |
579 DEFINE_bool(trace_sim, false, "Trace simulator execution") | 572 DEFINE_BOOL(trace_sim, false, "Trace simulator execution") |
580 DEFINE_bool(debug_sim, false, "Enable debugging the simulator") | 573 DEFINE_BOOL(debug_sim, false, "Enable debugging the simulator") |
581 DEFINE_bool(check_icache, false, | 574 DEFINE_BOOL(check_icache, false, |
582 "Check icache flushes in ARM and MIPS simulator") | 575 "Check icache flushes in ARM and MIPS simulator") |
583 DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") | 576 DEFINE_INT(stop_sim_at, 0, "Simulator stop after x number of instructions") |
584 #ifdef V8_TARGET_ARCH_ARM64 | 577 #ifdef V8_TARGET_ARCH_ARM64 |
585 DEFINE_int(sim_stack_alignment, 16, | 578 DEFINE_INT(sim_stack_alignment, 16, |
586 "Stack alignment in bytes in simulator. This must be a power of two " | 579 "Stack alignment in bytes in simulator. This must be a power of two " |
587 "and it must be at least 16. 16 is default.") | 580 "and it must be at least 16. 16 is default.") |
588 #else | 581 #else |
589 DEFINE_int(sim_stack_alignment, 8, | 582 DEFINE_INT(sim_stack_alignment, 8, |
590 "Stack alingment in bytes in simulator (4 or 8, 8 is default)") | 583 "Stack alingment in bytes in simulator (4 or 8, 8 is default)") |
591 #endif | 584 #endif |
592 DEFINE_int(sim_stack_size, 2 * MB / KB, | 585 DEFINE_INT(sim_stack_size, 2 * MB / KB, |
593 "Stack size of the ARM64 simulator in kBytes (default is 2 MB)") | 586 "Stack size of the ARM64 simulator in kBytes (default is 2 MB)") |
594 DEFINE_bool(log_regs_modified, true, | 587 DEFINE_BOOL(log_regs_modified, true, |
595 "When logging register values, only print modified registers.") | 588 "When logging register values, only print modified registers.") |
596 DEFINE_bool(log_colour, true, | 589 DEFINE_BOOL(log_colour, true, "When logging, try to use coloured output.") |
597 "When logging, try to use coloured output.") | 590 DEFINE_BOOL(ignore_asm_unimplemented_break, false, |
598 DEFINE_bool(ignore_asm_unimplemented_break, false, | |
599 "Don't break for ASM_UNIMPLEMENTED_BREAK macros.") | 591 "Don't break for ASM_UNIMPLEMENTED_BREAK macros.") |
600 DEFINE_bool(trace_sim_messages, false, | 592 DEFINE_BOOL(trace_sim_messages, false, |
601 "Trace simulator debug messages. Implied by --trace-sim.") | 593 "Trace simulator debug messages. Implied by --trace-sim.") |
602 | 594 |
603 // isolate.cc | 595 // isolate.cc |
604 DEFINE_bool(stack_trace_on_illegal, false, | 596 DEFINE_BOOL(stack_trace_on_illegal, false, |
605 "print stack trace when an illegal exception is thrown") | 597 "print stack trace when an illegal exception is thrown") |
606 DEFINE_bool(abort_on_uncaught_exception, false, | 598 DEFINE_BOOL(abort_on_uncaught_exception, false, |
607 "abort program (dump core) when an uncaught exception is thrown") | 599 "abort program (dump core) when an uncaught exception is thrown") |
608 DEFINE_bool(randomize_hashes, true, | 600 DEFINE_BOOL(randomize_hashes, true, |
609 "randomize hashes to avoid predictable hash collisions " | 601 "randomize hashes to avoid predictable hash collisions " |
610 "(with snapshots this option cannot override the baked-in seed)") | 602 "(with snapshots this option cannot override the baked-in seed)") |
611 DEFINE_int(hash_seed, 0, | 603 DEFINE_INT(hash_seed, 0, |
612 "Fixed seed to use to hash property keys (0 means random)" | 604 "Fixed seed to use to hash property keys (0 means random)" |
613 "(with snapshots this option cannot override the baked-in seed)") | 605 "(with snapshots this option cannot override the baked-in seed)") |
614 | 606 |
615 // snapshot-common.cc | 607 // snapshot-common.cc |
616 DEFINE_bool(profile_deserialization, false, | 608 DEFINE_BOOL(profile_deserialization, false, |
617 "Print the time it takes to deserialize the snapshot.") | 609 "Print the time it takes to deserialize the snapshot.") |
618 | 610 |
619 // Regexp | 611 // Regexp |
620 DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") | 612 DEFINE_BOOL(regexp_optimization, true, "generate optimized regexp code") |
621 | 613 |
622 // Testing flags test/cctest/test-{flags,api,serialization}.cc | 614 // Testing flags test/cctest/test-{flags,api,serialization}.cc |
623 DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") | 615 DEFINE_BOOL(testing_bool_flag, true, "testing_bool_flag") |
624 DEFINE_maybe_bool(testing_maybe_bool_flag, "testing_maybe_bool_flag") | 616 DEFINE_MAYBE_BOOL(testing_maybe_bool_flag, "testing_maybe_bool_flag") |
625 DEFINE_int(testing_int_flag, 13, "testing_int_flag") | 617 DEFINE_INT(testing_int_flag, 13, "testing_int_flag") |
626 DEFINE_float(testing_float_flag, 2.5, "float-flag") | 618 DEFINE_FLOAT(testing_float_flag, 2.5, "float-flag") |
627 DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") | 619 DEFINE_STRING(testing_string_flag, "Hello, world!", "string-flag") |
628 DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") | 620 DEFINE_INT(testing_prng_seed, 42, "Seed used for threading test randomness") |
629 #ifdef _WIN32 | 621 #ifdef _WIN32 |
630 DEFINE_string(testing_serialization_file, "C:\\Windows\\Temp\\serdes", | 622 DEFINE_STRING(testing_serialization_file, "C:\\Windows\\Temp\\serdes", |
631 "file in which to testing_serialize heap") | 623 "file in which to testing_serialize heap") |
632 #else | 624 #else |
633 DEFINE_string(testing_serialization_file, "/tmp/serdes", | 625 DEFINE_STRING(testing_serialization_file, "/tmp/serdes", |
634 "file in which to serialize heap") | 626 "file in which to serialize heap") |
635 #endif | 627 #endif |
636 | 628 |
637 // mksnapshot.cc | 629 // mksnapshot.cc |
638 DEFINE_string(extra_code, NULL, "A filename with extra code to be included in" | 630 DEFINE_STRING(extra_code, NULL, |
639 " the snapshot (mksnapshot only)") | 631 "A filename with extra code to be included in" |
640 DEFINE_string(raw_file, NULL, "A file to write the raw snapshot bytes to. " | 632 " the snapshot (mksnapshot only)") |
641 "(mksnapshot only)") | 633 DEFINE_STRING(raw_file, NULL, |
642 DEFINE_string(raw_context_file, NULL, "A file to write the raw context " | 634 "A file to write the raw snapshot bytes to. " |
643 "snapshot bytes to. (mksnapshot only)") | 635 "(mksnapshot only)") |
644 DEFINE_string(startup_blob, NULL, "Write V8 startup blob file. " | 636 DEFINE_STRING(raw_context_file, NULL, |
645 "(mksnapshot only)") | 637 "A file to write the raw context " |
| 638 "snapshot bytes to. (mksnapshot only)") |
| 639 DEFINE_STRING(startup_blob, NULL, |
| 640 "Write V8 startup blob file. " |
| 641 "(mksnapshot only)") |
646 | 642 |
647 // code-stubs-hydrogen.cc | 643 // code-stubs-hydrogen.cc |
648 DEFINE_bool(profile_hydrogen_code_stub_compilation, false, | 644 DEFINE_BOOL(profile_hydrogen_code_stub_compilation, false, |
649 "Print the time it takes to lazily compile hydrogen code stubs.") | 645 "Print the time it takes to lazily compile hydrogen code stubs.") |
650 | 646 |
651 DEFINE_bool(predictable, false, "enable predictable mode") | 647 DEFINE_BOOL(predictable, false, "enable predictable mode") |
652 DEFINE_neg_implication(predictable, concurrent_recompilation) | 648 DEFINE_NEG_IMPLICATION(predictable, concurrent_recompilation) |
653 DEFINE_neg_implication(predictable, concurrent_osr) | 649 DEFINE_NEG_IMPLICATION(predictable, concurrent_osr) |
654 DEFINE_neg_implication(predictable, concurrent_sweeping) | 650 DEFINE_NEG_IMPLICATION(predictable, concurrent_sweeping) |
655 DEFINE_neg_implication(predictable, parallel_sweeping) | 651 DEFINE_NEG_IMPLICATION(predictable, parallel_sweeping) |
656 | 652 |
657 | 653 |
658 // | 654 // |
659 // Dev shell flags | 655 // Dev shell flags |
660 // | 656 // |
661 | 657 |
662 DEFINE_bool(help, false, "Print usage message, including flags, on console") | 658 DEFINE_BOOL(help, false, "Print usage message, including flags, on console") |
663 DEFINE_bool(dump_counters, false, "Dump counters on exit") | 659 DEFINE_BOOL(dump_counters, false, "Dump counters on exit") |
664 | 660 |
665 DEFINE_bool(debugger, false, "Enable JavaScript debugger") | 661 DEFINE_BOOL(debugger, false, "Enable JavaScript debugger") |
666 | 662 |
667 DEFINE_string(map_counters, "", "Map counters to a file") | 663 DEFINE_STRING(map_counters, "", "Map counters to a file") |
668 DEFINE_args(js_arguments, | 664 DEFINE_ARGS(js_arguments, |
669 "Pass all remaining arguments to the script. Alias for \"--\".") | 665 "Pass all remaining arguments to the script. Alias for \"--\".") |
670 | 666 |
671 // | 667 // |
672 // GDB JIT integration flags. | 668 // GDB JIT integration flags. |
673 // | 669 // |
674 | 670 |
675 DEFINE_bool(gdbjit, false, "enable GDBJIT interface (disables compacting GC)") | 671 DEFINE_BOOL(gdbjit, false, "enable GDBJIT interface (disables compacting GC)") |
676 DEFINE_bool(gdbjit_full, false, "enable GDBJIT interface for all code objects") | 672 DEFINE_BOOL(gdbjit_full, false, "enable GDBJIT interface for all code objects") |
677 DEFINE_bool(gdbjit_dump, false, "dump elf objects with debug info to disk") | 673 DEFINE_BOOL(gdbjit_dump, false, "dump elf objects with debug info to disk") |
678 DEFINE_string(gdbjit_dump_filter, "", | 674 DEFINE_STRING(gdbjit_dump_filter, "", |
679 "dump only objects containing this substring") | 675 "dump only objects containing this substring") |
680 | 676 |
681 // mark-compact.cc | 677 // mark-compact.cc |
682 DEFINE_bool(force_marking_deque_overflows, false, | 678 DEFINE_BOOL(force_marking_deque_overflows, false, |
683 "force overflows of marking deque by reducing it's size " | 679 "force overflows of marking deque by reducing it's size " |
684 "to 64 words") | 680 "to 64 words") |
685 | 681 |
686 DEFINE_bool(stress_compaction, false, | 682 DEFINE_BOOL(stress_compaction, false, |
687 "stress the GC compactor to flush out bugs (implies " | 683 "stress the GC compactor to flush out bugs (implies " |
688 "--force_marking_deque_overflows)") | 684 "--force_marking_deque_overflows)") |
689 | 685 |
690 // | 686 // |
691 // Debug only flags | 687 // Debug only flags |
692 // | 688 // |
693 #undef FLAG | 689 #undef FLAG |
694 #ifdef DEBUG | 690 #ifdef DEBUG |
695 #define FLAG FLAG_FULL | 691 #define FLAG FLAG_FULL |
696 #else | 692 #else |
697 #define FLAG FLAG_READONLY | 693 #define FLAG FLAG_READONLY |
698 #endif | 694 #endif |
699 | 695 |
700 // checks.cc | 696 // checks.cc |
701 #ifdef ENABLE_SLOW_ASSERTS | 697 #ifdef ENABLE_SLOW_ASSERTS |
702 DEFINE_bool(enable_slow_asserts, false, | 698 DEFINE_BOOL(enable_slow_asserts, false, |
703 "enable asserts that are slow to execute") | 699 "enable asserts that are slow to execute") |
704 #endif | 700 #endif |
705 | 701 |
706 // codegen-ia32.cc / codegen-arm.cc / macro-assembler-*.cc | 702 // codegen-ia32.cc / codegen-arm.cc / macro-assembler-*.cc |
707 DEFINE_bool(print_source, false, "pretty print source code") | 703 DEFINE_BOOL(print_source, false, "pretty print source code") |
708 DEFINE_bool(print_builtin_source, false, | 704 DEFINE_BOOL(print_builtin_source, false, |
709 "pretty print source code for builtins") | 705 "pretty print source code for builtins") |
710 DEFINE_bool(print_ast, false, "print source AST") | 706 DEFINE_BOOL(print_ast, false, "print source AST") |
711 DEFINE_bool(print_builtin_ast, false, "print source AST for builtins") | 707 DEFINE_BOOL(print_builtin_ast, false, "print source AST for builtins") |
712 DEFINE_string(stop_at, "", "function name where to insert a breakpoint") | 708 DEFINE_STRING(stop_at, "", "function name where to insert a breakpoint") |
713 DEFINE_bool(trap_on_abort, false, "replace aborts by breakpoints") | 709 DEFINE_BOOL(trap_on_abort, false, "replace aborts by breakpoints") |
714 | 710 |
715 // compiler.cc | 711 // compiler.cc |
716 DEFINE_bool(print_builtin_scopes, false, "print scopes for builtins") | 712 DEFINE_BOOL(print_builtin_scopes, false, "print scopes for builtins") |
717 DEFINE_bool(print_scopes, false, "print scopes") | 713 DEFINE_BOOL(print_scopes, false, "print scopes") |
718 | 714 |
719 // contexts.cc | 715 // contexts.cc |
720 DEFINE_bool(trace_contexts, false, "trace contexts operations") | 716 DEFINE_BOOL(trace_contexts, false, "trace contexts operations") |
721 | 717 |
722 // heap.cc | 718 // heap.cc |
723 DEFINE_bool(gc_verbose, false, "print stuff during garbage collection") | 719 DEFINE_BOOL(gc_verbose, false, "print stuff during garbage collection") |
724 DEFINE_bool(heap_stats, false, "report heap statistics before and after GC") | 720 DEFINE_BOOL(heap_stats, false, "report heap statistics before and after GC") |
725 DEFINE_bool(code_stats, false, "report code statistics after GC") | 721 DEFINE_BOOL(code_stats, false, "report code statistics after GC") |
726 DEFINE_bool(verify_native_context_separation, false, | 722 DEFINE_BOOL(verify_native_context_separation, false, |
727 "verify that code holds on to at most one native context after GC") | 723 "verify that code holds on to at most one native context after GC") |
728 DEFINE_bool(print_handles, false, "report handles after GC") | 724 DEFINE_BOOL(print_handles, false, "report handles after GC") |
729 DEFINE_bool(print_global_handles, false, "report global handles after GC") | 725 DEFINE_BOOL(print_global_handles, false, "report global handles after GC") |
730 | 726 |
731 // ic.cc | 727 // ic.cc |
732 DEFINE_bool(trace_ic, false, "trace inline cache state transitions") | 728 DEFINE_BOOL(trace_ic, false, "trace inline cache state transitions") |
733 | 729 |
734 // interface.cc | 730 // interface.cc |
735 DEFINE_bool(print_interfaces, false, "print interfaces") | 731 DEFINE_BOOL(print_interfaces, false, "print interfaces") |
736 DEFINE_bool(print_interface_details, false, "print interface inference details") | 732 DEFINE_BOOL(print_interface_details, false, "print interface inference details") |
737 DEFINE_int(print_interface_depth, 5, "depth for printing interfaces") | 733 DEFINE_INT(print_interface_depth, 5, "depth for printing interfaces") |
738 | 734 |
739 // objects.cc | 735 // objects.cc |
740 DEFINE_bool(trace_normalization, false, | 736 DEFINE_BOOL(trace_normalization, false, |
741 "prints when objects are turned into dictionaries.") | 737 "prints when objects are turned into dictionaries.") |
742 | 738 |
743 // runtime.cc | 739 // runtime.cc |
744 DEFINE_bool(trace_lazy, false, "trace lazy compilation") | 740 DEFINE_BOOL(trace_lazy, false, "trace lazy compilation") |
745 | 741 |
746 // spaces.cc | 742 // spaces.cc |
747 DEFINE_bool(collect_heap_spill_statistics, false, | 743 DEFINE_BOOL(collect_heap_spill_statistics, false, |
748 "report heap spill statistics along with heap_stats " | 744 "report heap spill statistics along with heap_stats " |
749 "(requires heap_stats)") | 745 "(requires heap_stats)") |
750 | 746 |
751 DEFINE_bool(trace_isolates, false, "trace isolate state changes") | 747 DEFINE_BOOL(trace_isolates, false, "trace isolate state changes") |
752 | 748 |
753 // Regexp | 749 // Regexp |
754 DEFINE_bool(regexp_possessive_quantifier, false, | 750 DEFINE_BOOL(regexp_possessive_quantifier, false, |
755 "enable possessive quantifier syntax for testing") | 751 "enable possessive quantifier syntax for testing") |
756 DEFINE_bool(trace_regexp_bytecodes, false, "trace regexp bytecode execution") | 752 DEFINE_BOOL(trace_regexp_bytecodes, false, "trace regexp bytecode execution") |
757 DEFINE_bool(trace_regexp_assembler, false, | 753 DEFINE_BOOL(trace_regexp_assembler, false, |
758 "trace regexp macro assembler calls.") | 754 "trace regexp macro assembler calls.") |
759 | 755 |
760 // | 756 // |
761 // Logging and profiling flags | 757 // Logging and profiling flags |
762 // | 758 // |
763 #undef FLAG | 759 #undef FLAG |
764 #define FLAG FLAG_FULL | 760 #define FLAG FLAG_FULL |
765 | 761 |
766 // log.cc | 762 // log.cc |
767 DEFINE_bool(log, false, | 763 DEFINE_BOOL(log, false, |
768 "Minimal logging (no API, code, GC, suspect, or handles samples).") | 764 "Minimal logging (no API, code, GC, suspect, or handles samples).") |
769 DEFINE_bool(log_all, false, "Log all events to the log file.") | 765 DEFINE_BOOL(log_all, false, "Log all events to the log file.") |
770 DEFINE_bool(log_api, false, "Log API events to the log file.") | 766 DEFINE_BOOL(log_api, false, "Log API events to the log file.") |
771 DEFINE_bool(log_code, false, | 767 DEFINE_BOOL(log_code, false, |
772 "Log code events to the log file without profiling.") | 768 "Log code events to the log file without profiling.") |
773 DEFINE_bool(log_gc, false, | 769 DEFINE_BOOL(log_gc, false, |
774 "Log heap samples on garbage collection for the hp2ps tool.") | 770 "Log heap samples on garbage collection for the hp2ps tool.") |
775 DEFINE_bool(log_handles, false, "Log global handle events.") | 771 DEFINE_BOOL(log_handles, false, "Log global handle events.") |
776 DEFINE_bool(log_snapshot_positions, false, | 772 DEFINE_BOOL(log_snapshot_positions, false, |
777 "log positions of (de)serialized objects in the snapshot.") | 773 "log positions of (de)serialized objects in the snapshot.") |
778 DEFINE_bool(log_suspect, false, "Log suspect operations.") | 774 DEFINE_BOOL(log_suspect, false, "Log suspect operations.") |
779 DEFINE_bool(prof, false, | 775 DEFINE_BOOL(prof, false, |
780 "Log statistical profiling information (implies --log-code).") | 776 "Log statistical profiling information (implies --log-code).") |
781 DEFINE_bool(prof_browser_mode, true, | 777 DEFINE_BOOL(prof_browser_mode, true, |
782 "Used with --prof, turns on browser-compatible mode for profiling.") | 778 "Used with --prof, turns on browser-compatible mode for profiling.") |
783 DEFINE_bool(log_regexp, false, "Log regular expression execution.") | 779 DEFINE_BOOL(log_regexp, false, "Log regular expression execution.") |
784 DEFINE_string(logfile, "v8.log", "Specify the name of the log file.") | 780 DEFINE_STRING(logfile, "v8.log", "Specify the name of the log file.") |
785 DEFINE_bool(logfile_per_isolate, true, "Separate log files for each isolate.") | 781 DEFINE_BOOL(logfile_per_isolate, true, "Separate log files for each isolate.") |
786 DEFINE_bool(ll_prof, false, "Enable low-level linux profiler.") | 782 DEFINE_BOOL(ll_prof, false, "Enable low-level linux profiler.") |
787 DEFINE_bool(perf_basic_prof, false, | 783 DEFINE_BOOL(perf_basic_prof, false, |
788 "Enable perf linux profiler (basic support).") | 784 "Enable perf linux profiler (basic support).") |
789 DEFINE_bool(perf_jit_prof, false, | 785 DEFINE_BOOL(perf_jit_prof, false, |
790 "Enable perf linux profiler (experimental annotate support).") | 786 "Enable perf linux profiler (experimental annotate support).") |
791 DEFINE_string(gc_fake_mmap, "/tmp/__v8_gc__", | 787 DEFINE_STRING(gc_fake_mmap, "/tmp/__v8_gc__", |
792 "Specify the name of the file for fake gc mmap used in ll_prof") | 788 "Specify the name of the file for fake gc mmap used in ll_prof") |
793 DEFINE_bool(log_internal_timer_events, false, "Time internal events.") | 789 DEFINE_BOOL(log_internal_timer_events, false, "Time internal events.") |
794 DEFINE_bool(log_timer_events, false, | 790 DEFINE_BOOL(log_timer_events, false, |
795 "Time events including external callbacks.") | 791 "Time events including external callbacks.") |
796 DEFINE_implication(log_timer_events, log_internal_timer_events) | 792 DEFINE_IMPLICATION(log_timer_events, log_internal_timer_events) |
797 DEFINE_implication(log_internal_timer_events, prof) | 793 DEFINE_IMPLICATION(log_internal_timer_events, prof) |
798 DEFINE_bool(log_instruction_stats, false, "Log AArch64 instruction statistics.") | 794 DEFINE_BOOL(log_instruction_stats, false, "Log AArch64 instruction statistics.") |
799 DEFINE_string(log_instruction_file, "arm64_inst.csv", | 795 DEFINE_STRING(log_instruction_file, "arm64_inst.csv", |
800 "AArch64 instruction statistics log file.") | 796 "AArch64 instruction statistics log file.") |
801 DEFINE_int(log_instruction_period, 1 << 22, | 797 DEFINE_INT(log_instruction_period, 1 << 22, |
802 "AArch64 instruction statistics logging period.") | 798 "AArch64 instruction statistics logging period.") |
803 | 799 |
804 DEFINE_bool(redirect_code_traces, false, | 800 DEFINE_BOOL(redirect_code_traces, false, |
805 "output deopt information and disassembly into file " | 801 "output deopt information and disassembly into file " |
806 "code-<pid>-<isolate id>.asm") | 802 "code-<pid>-<isolate id>.asm") |
807 DEFINE_string(redirect_code_traces_to, NULL, | 803 DEFINE_STRING(redirect_code_traces_to, NULL, |
808 "output deopt information and disassembly into the given file") | 804 "output deopt information and disassembly into the given file") |
809 | 805 |
810 DEFINE_bool(hydrogen_track_positions, false, | 806 DEFINE_BOOL(hydrogen_track_positions, false, |
811 "track source code positions when building IR") | 807 "track source code positions when building IR") |
812 | 808 |
813 // | 809 // |
814 // Disassembler only flags | 810 // Disassembler only flags |
815 // | 811 // |
816 #undef FLAG | 812 #undef FLAG |
817 #ifdef ENABLE_DISASSEMBLER | 813 #ifdef ENABLE_DISASSEMBLER |
818 #define FLAG FLAG_FULL | 814 #define FLAG FLAG_FULL |
819 #else | 815 #else |
820 #define FLAG FLAG_READONLY | 816 #define FLAG FLAG_READONLY |
821 #endif | 817 #endif |
822 | 818 |
823 // elements.cc | 819 // elements.cc |
824 DEFINE_bool(trace_elements_transitions, false, "trace elements transitions") | 820 DEFINE_BOOL(trace_elements_transitions, false, "trace elements transitions") |
825 | 821 |
826 DEFINE_bool(trace_creation_allocation_sites, false, | 822 DEFINE_BOOL(trace_creation_allocation_sites, false, |
827 "trace the creation of allocation sites") | 823 "trace the creation of allocation sites") |
828 | 824 |
829 // code-stubs.cc | 825 // code-stubs.cc |
830 DEFINE_bool(print_code_stubs, false, "print code stubs") | 826 DEFINE_BOOL(print_code_stubs, false, "print code stubs") |
831 DEFINE_bool(test_secondary_stub_cache, false, | 827 DEFINE_BOOL(test_secondary_stub_cache, false, |
832 "test secondary stub cache by disabling the primary one") | 828 "test secondary stub cache by disabling the primary one") |
833 | 829 |
834 DEFINE_bool(test_primary_stub_cache, false, | 830 DEFINE_BOOL(test_primary_stub_cache, false, |
835 "test primary stub cache by disabling the secondary one") | 831 "test primary stub cache by disabling the secondary one") |
836 | 832 |
837 | 833 |
838 // codegen-ia32.cc / codegen-arm.cc | 834 // codegen-ia32.cc / codegen-arm.cc |
839 DEFINE_bool(print_code, false, "print generated code") | 835 DEFINE_BOOL(print_code, false, "print generated code") |
840 DEFINE_bool(print_opt_code, false, "print optimized code") | 836 DEFINE_BOOL(print_opt_code, false, "print optimized code") |
841 DEFINE_bool(print_unopt_code, false, "print unoptimized code before " | 837 DEFINE_BOOL(print_unopt_code, false, |
| 838 "print unoptimized code before " |
842 "printing optimized code based on it") | 839 "printing optimized code based on it") |
843 DEFINE_bool(print_code_verbose, false, "print more information for code") | 840 DEFINE_BOOL(print_code_verbose, false, "print more information for code") |
844 DEFINE_bool(print_builtin_code, false, "print generated code for builtins") | 841 DEFINE_BOOL(print_builtin_code, false, "print generated code for builtins") |
845 | 842 |
846 #ifdef ENABLE_DISASSEMBLER | 843 #ifdef ENABLE_DISASSEMBLER |
847 DEFINE_bool(sodium, false, "print generated code output suitable for use with " | 844 DEFINE_BOOL(sodium, false, |
| 845 "print generated code output suitable for use with " |
848 "the Sodium code viewer") | 846 "the Sodium code viewer") |
849 | 847 |
850 DEFINE_implication(sodium, print_code_stubs) | 848 DEFINE_IMPLICATION(sodium, print_code_stubs) |
851 DEFINE_implication(sodium, print_code) | 849 DEFINE_IMPLICATION(sodium, print_code) |
852 DEFINE_implication(sodium, print_opt_code) | 850 DEFINE_IMPLICATION(sodium, print_opt_code) |
853 DEFINE_implication(sodium, hydrogen_track_positions) | 851 DEFINE_IMPLICATION(sodium, hydrogen_track_positions) |
854 DEFINE_implication(sodium, code_comments) | 852 DEFINE_IMPLICATION(sodium, code_comments) |
855 | 853 |
856 DEFINE_bool(print_all_code, false, "enable all flags related to printing code") | 854 DEFINE_BOOL(print_all_code, false, "enable all flags related to printing code") |
857 DEFINE_implication(print_all_code, print_code) | 855 DEFINE_IMPLICATION(print_all_code, print_code) |
858 DEFINE_implication(print_all_code, print_opt_code) | 856 DEFINE_IMPLICATION(print_all_code, print_opt_code) |
859 DEFINE_implication(print_all_code, print_unopt_code) | 857 DEFINE_IMPLICATION(print_all_code, print_unopt_code) |
860 DEFINE_implication(print_all_code, print_code_verbose) | 858 DEFINE_IMPLICATION(print_all_code, print_code_verbose) |
861 DEFINE_implication(print_all_code, print_builtin_code) | 859 DEFINE_IMPLICATION(print_all_code, print_builtin_code) |
862 DEFINE_implication(print_all_code, print_code_stubs) | 860 DEFINE_IMPLICATION(print_all_code, print_code_stubs) |
863 DEFINE_implication(print_all_code, code_comments) | 861 DEFINE_IMPLICATION(print_all_code, code_comments) |
864 #ifdef DEBUG | 862 #ifdef DEBUG |
865 DEFINE_implication(print_all_code, trace_codegen) | 863 DEFINE_IMPLICATION(print_all_code, trace_codegen) |
866 #endif | 864 #endif |
867 #endif | 865 #endif |
868 | 866 |
869 | 867 |
870 // | 868 // |
871 // VERIFY_PREDICTABLE related flags | 869 // VERIFY_PREDICTABLE related flags |
872 // | 870 // |
873 #undef FLAG | 871 #undef FLAG |
874 | 872 |
875 #ifdef VERIFY_PREDICTABLE | 873 #ifdef VERIFY_PREDICTABLE |
876 #define FLAG FLAG_FULL | 874 #define FLAG FLAG_FULL |
877 #else | 875 #else |
878 #define FLAG FLAG_READONLY | 876 #define FLAG FLAG_READONLY |
879 #endif | 877 #endif |
880 | 878 |
881 DEFINE_bool(verify_predictable, false, | 879 DEFINE_BOOL(verify_predictable, false, |
882 "this mode is used for checking that V8 behaves predictably") | 880 "this mode is used for checking that V8 behaves predictably") |
883 DEFINE_int(dump_allocations_digest_at_alloc, 0, | 881 DEFINE_INT(dump_allocations_digest_at_alloc, 0, |
884 "dump allocations digest each n-th allocation") | 882 "dump allocations digest each n-th allocation") |
885 | 883 |
886 | 884 |
887 // | 885 // |
888 // Read-only flags | 886 // Read-only flags |
889 // | 887 // |
890 #undef FLAG | 888 #undef FLAG |
891 #define FLAG FLAG_READONLY | 889 #define FLAG FLAG_READONLY |
892 | 890 |
893 // assembler-arm.h | 891 // assembler-arm.h |
894 DEFINE_bool(enable_ool_constant_pool, V8_OOL_CONSTANT_POOL, | 892 DEFINE_BOOL(enable_ool_constant_pool, V8_OOL_CONSTANT_POOL, |
895 "enable use of out-of-line constant pools (ARM only)") | 893 "enable use of out-of-line constant pools (ARM only)") |
896 | 894 |
897 // Cleanup... | 895 // Cleanup... |
898 #undef FLAG_FULL | 896 #undef FLAG_FULL |
899 #undef FLAG_READONLY | 897 #undef FLAG_READONLY |
900 #undef FLAG | 898 #undef FLAG |
901 #undef FLAG_ALIAS | 899 #undef FLAG_ALIAS |
902 | 900 |
903 #undef DEFINE_bool | 901 #undef DEFINE_BOOL |
904 #undef DEFINE_maybe_bool | 902 #undef DEFINE_MAYBE_BOOL |
905 #undef DEFINE_int | 903 #undef DEFINE_INT |
906 #undef DEFINE_string | 904 #undef DEFINE_STRING |
907 #undef DEFINE_float | 905 #undef DEFINE_FLOAT |
908 #undef DEFINE_args | 906 #undef DEFINE_ARGS |
909 #undef DEFINE_implication | 907 #undef DEFINE_IMPLICATION |
910 #undef DEFINE_neg_implication | 908 #undef DEFINE_NEG_IMPLICATION |
911 #undef DEFINE_ALIAS_bool | 909 #undef DEFINE_ALIAS_BOOL |
912 #undef DEFINE_ALIAS_int | 910 #undef DEFINE_ALIAS_INT |
913 #undef DEFINE_ALIAS_string | 911 #undef DEFINE_ALIAS_STRING |
914 #undef DEFINE_ALIAS_float | 912 #undef DEFINE_ALIAS_FLOAT |
915 #undef DEFINE_ALIAS_args | 913 #undef DEFINE_ALIAS_ARGS |
916 | 914 |
917 #undef FLAG_MODE_DECLARE | 915 #undef FLAG_MODE_DECLARE |
918 #undef FLAG_MODE_DEFINE | 916 #undef FLAG_MODE_DEFINE |
919 #undef FLAG_MODE_DEFINE_DEFAULTS | 917 #undef FLAG_MODE_DEFINE_DEFAULTS |
920 #undef FLAG_MODE_META | 918 #undef FLAG_MODE_META |
921 #undef FLAG_MODE_DEFINE_IMPLICATIONS | 919 #undef FLAG_MODE_DEFINE_IMPLICATIONS |
922 | 920 |
923 #undef COMMA | 921 #undef COMMA |
OLD | NEW |