From 4b05f743e01fb058dba9aedbfe72f7191e39dc25 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Thu, 15 Dec 2011 17:00:27 +0000 Subject: [PATCH] Introduce --print-all-code flag and infrastructure for one flag to imply another flag. Review URL: http://codereview.chromium.org/8957009 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10267 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/flag-definitions.h | 29 ++++++++++++++++++++++++++++- src/flags.cc | 5 +++++ src/flags.h | 3 +++ src/v8.cc | 9 +-------- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/flag-definitions.h b/src/flag-definitions.h index f145df751..8f3ce9db4 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -41,6 +41,7 @@ extern ctype FLAG_##nam; #define FLAG_READONLY(ftype, ctype, nam, def, cmt) \ static ctype const FLAG_##nam = def; +#define DEFINE_implication(whenflag, thenflag) // We want to supply the actual storage and value for the flag variable in the // .cc file. We only do this for writable flags. @@ -48,6 +49,7 @@ #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ ctype FLAG_##nam = def; #define FLAG_READONLY(ftype, ctype, nam, def, cmt) +#define DEFINE_implication(whenflag, thenflag) // We need to define all of our default values so that the Flag structure can // access them by pointer. These are just used internally inside of one .cc, @@ -56,7 +58,7 @@ #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ static ctype const FLAGDEFAULT_##nam = def; #define FLAG_READONLY(ftype, ctype, nam, def, cmt) - +#define DEFINE_implication(whenflag, thenflag) // We want to write entries into our meta data table, for internal parsing and // printing / etc in the flag parser code. We only do this for writable flags. @@ -64,6 +66,14 @@ #define FLAG_FULL(ftype, ctype, nam, def, cmt) \ { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt, false }, #define FLAG_READONLY(ftype, ctype, nam, def, cmt) +#define DEFINE_implication(whenflag, thenflag) + +// We produce the code to set flags when it is implied by another flag. +#elif defined(FLAG_MODE_DEFINE_IMPLICATIONS) +#define FLAG_FULL(ftype, ctype, nam, def, cmt) +#define FLAG_READONLY(ftype, ctype, nam, def, cmt) +#define DEFINE_implication(whenflag, thenflag) \ + if (FLAG_##whenflag) FLAG_##thenflag = true; #else #error No mode supplied when including flags.defs @@ -103,6 +113,10 @@ DEFINE_bool(harmony_proxies, false, "enable harmony proxies") DEFINE_bool(harmony_collections, false, "enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false, "enable all harmony features") +DEFINE_implication(harmony, harmony_typeof) +DEFINE_implication(harmony, harmony_scoping) +DEFINE_implication(harmony, harmony_proxies) +DEFINE_implication(harmony, harmony_collections) // Flags for experimental implementation features. DEFINE_bool(unbox_double_arrays, true, "automatically unbox arrays of doubles") @@ -542,6 +556,17 @@ DEFINE_bool(print_unopt_code, false, "print unoptimized code before " DEFINE_bool(print_code_verbose, false, "print more information for code") DEFINE_bool(print_builtin_code, false, "print generated code for builtins") +#ifdef ENABLE_DISASSEMBLER +DEFINE_bool(print_all_code, false, "enable all flags related to printing code") +DEFINE_implication(print_all_code, print_code) +DEFINE_implication(print_all_code, print_opt_code) +DEFINE_implication(print_all_code, print_unopt_code) +DEFINE_implication(print_all_code, print_code_verbose) +DEFINE_implication(print_all_code, print_builtin_code) +DEFINE_implication(print_all_code, print_code_stubs) +DEFINE_implication(print_all_code, trace_codegen) +#endif + // Cleanup... #undef FLAG_FULL #undef FLAG_READONLY @@ -550,8 +575,10 @@ DEFINE_bool(print_builtin_code, false, "print generated code for builtins") #undef DEFINE_bool #undef DEFINE_int #undef DEFINE_string +#undef DEFINE_implication #undef FLAG_MODE_DECLARE #undef FLAG_MODE_DEFINE #undef FLAG_MODE_DEFINE_DEFAULTS #undef FLAG_MODE_META +#undef FLAG_MODE_DEFINE_IMPLICATIONS diff --git a/src/flags.cc b/src/flags.cc index ab5b57ced..75e66ce34 100644 --- a/src/flags.cc +++ b/src/flags.cc @@ -548,4 +548,9 @@ JSArguments& JSArguments::operator=(JSArguments args) { } +void FlagList::EnforceFlagImplications() { +#define FLAG_MODE_DEFINE_IMPLICATIONS +#include "flag-definitions.h" +} + } } // namespace v8::internal diff --git a/src/flags.h b/src/flags.h index f9cbde0bf..f0b239b6f 100644 --- a/src/flags.h +++ b/src/flags.h @@ -72,6 +72,9 @@ class FlagList { // Print help to stdout with flags, types, and default values. static void PrintHelp(); + + // Set flags as consequence of being implied by another flag. + static void EnforceFlagImplications(); }; } } // namespace v8::internal diff --git a/src/v8.cc b/src/v8.cc index 634c5c3e7..0354fc101 100644 --- a/src/v8.cc +++ b/src/v8.cc @@ -57,14 +57,7 @@ static EntropySource entropy_source; bool V8::Initialize(Deserializer* des) { - // Setting --harmony implies all other harmony flags. - // TODO(rossberg): Is there a better place to put this? - if (FLAG_harmony) { - FLAG_harmony_typeof = true; - FLAG_harmony_scoping = true; - FLAG_harmony_proxies = true; - FLAG_harmony_collections = true; - } + FlagList::EnforceFlagImplications(); InitializeOncePerProcess(); -- 2.34.1