This is a new static flag system, designed to have all flags in a central place,...
authordeanm@chromium.org <deanm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 12 Sep 2008 10:19:33 +0000 (10:19 +0000)
committerdeanm@chromium.org <deanm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 12 Sep 2008 10:19:33 +0000 (10:19 +0000)
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@296 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

49 files changed:
src/assembler-arm.cc
src/assembler-ia32.cc
src/bootstrapper.cc
src/builtins-ia32.cc
src/builtins.cc
src/checks.cc
src/checks.h
src/code-stubs.cc
src/codegen-arm.cc
src/codegen-ia32.cc
src/codegen.cc
src/codegen.h
src/compiler.cc
src/contexts.cc
src/debug.cc
src/execution.cc
src/flags-inl.h [deleted file]
src/flags.cc
src/flags.defs [new file with mode: 0755]
src/flags.h
src/frames.cc
src/handles.cc
src/heap-inl.h
src/heap.cc
src/ic-ia32.cc
src/ic.cc
src/log.cc
src/macro-assembler-arm.cc
src/macro-assembler-ia32.cc
src/mark-compact.cc
src/mksnapshot.cc
src/objects.cc
src/parser.cc
src/runtime.cc
src/scopes.cc
src/serialize.cc
src/simulator-arm.cc
src/spaces.cc
src/stub-cache.cc
src/top.cc
src/usage-analyzer.cc
src/v8.cc
src/v8.h
test/cctest/test-api.cc
test/cctest/test-debug.cc
test/cctest/test-flags.cc
test/cctest/test-mark-compact.cc
test/cctest/test-serialize.cc
tools/v8.xcodeproj/project.pbxproj

index e057fe0..12d110b 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(debug_code, false,
-            "generate extra code (comments, assertions) for debugging");
-
-
 // -----------------------------------------------------------------------------
 // Implementation of Register and CRegister
 
@@ -272,11 +268,6 @@ enum {
 };
 
 
-DEFINE_bool(push_pop_elimination, true,
-            "eliminate redundant push/pops in assembly code");
-DEFINE_bool(print_push_pop_elimination, false,
-            "print elimination of redundant push/pops in assembly code");
-
 // add(sp, sp, 4) instruction (aka Pop())
 static const Instr kPopInstruction =
     al | 4 * B21 | 4 | LeaveCC | I | sp.code() * B16 | sp.code() * B12;
@@ -469,10 +460,6 @@ void Assembler::print(Label* L) {
 }
 
 
-DEFINE_bool(eliminate_jumps, true, "eliminate jumps to jumps in assembly code");
-DEFINE_bool(print_jump_elimination, false,
-            "print elimination of jumps to jumps in assembly code");
-
 void Assembler::bind_to(Label* L, int pos) {
   ASSERT(0 <= pos && pos <= pc_offset());  // must have a valid binding position
   while (L->is_linked()) {
index 483ae0e..3f2b2c9 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(debug_code, false,
-            "generate extra code (comments, assertions) for debugging");
-DEFINE_bool(emit_branch_hints, false, "emit branch hints");
-
 // -----------------------------------------------------------------------------
 // Implementation of Register
 
@@ -412,11 +408,6 @@ void Assembler::push(const Immediate& x) {
 }
 
 
-DEFINE_bool(push_pop_elimination, true,
-            "eliminate redundant push/pops in assembly code");
-DEFINE_bool(print_push_pop_elimination, false,
-            "print elimination of redundant push/pops in assembly code");
-
 void Assembler::push(Register src) {
   EnsureSpace ensure_space(this);
   last_pc_ = pc_;
@@ -1180,10 +1171,6 @@ void Assembler::print(Label* L) {
 }
 
 
-DEFINE_bool(eliminate_jumps, true, "eliminate jumps to jumps in assembly code");
-DEFINE_bool(print_jump_elimination, false,
-            "print elimination of jumps to jumps in assembly code");
-
 void Assembler::bind_to(Label* L, int pos) {
   EnsureSpace ensure_space(this);
   last_pc_ = NULL;
index 9038072..f7e1989 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_string(expose_natives_as, NULL, "expose natives in global object");
-DEFINE_string(expose_debug_as, NULL, "expose debug in global object");
-DEFINE_string(natives_file, NULL, "alternative natives file");  // for debugging
-DEFINE_bool(expose_gc, false, "expose gc extension");  // for debugging
-
 // A SourceCodeCache uses a FixedArray to store pairs of
 // (AsciiString*, JSFunction*), mapping names of native code files
 // (runtime.js, etc.) to precompiled functions. Instead of mapping
index 57843fe..ab12076 100644 (file)
@@ -50,9 +50,6 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm,
 }
 
 
-DEFINE_bool(inline_new, true, "use fast inline allocation");
-
-
 void Builtins::Generate_JSConstructCall(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- eax: number of arguments
index 5bf1af8..329b75f 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-  DECLARE_bool(print_builtin_code);
-#endif  // DEBUG
-
-
 // ----------------------------------------------------------------------------
 // Support macros for defining builtins in C.
 // ----------------------------------------------------------------------------
index c01c9b2..2f25456 100644 (file)
 
 using namespace v8::internal;
 
-DEFINE_bool(stack_trace_on_abort, true,
-            "print a stack trace if an assertion failure occurs");
-
-#ifdef DEBUG
-DEFINE_bool(enable_slow_asserts, false,
-            "enable asserts that are slow to execute");
-#endif
-
 static int fatal_error_handler_nesting_depth = 0;
 
 // Contains protection against recursive calls (faults while handling faults).
index 9dd45ce..3908ab4 100644 (file)
 
 #include "flags.h"
 
-#ifdef DEBUG
-DECLARE_bool(enable_slow_asserts);
-#endif  // DEBUG
-
 extern "C" void V8_Fatal(const char* file, int line, const char* format, ...);
 void API_Fatal(const char* location, const char* format, ...);
 
index ebc30ae..e98c158 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DEFINE_bool(print_code_stubs, false, "print code stubs");
-#endif
-
 Handle<Code> CodeStub::GetCode() {
   uint32_t key = GetKey();
   int index = Heap::code_stubs()->FindNumberEntry(key);
index df71fe8..2bb030b 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(trace, false, "trace function calls");
-DECLARE_bool(debug_info);
-DECLARE_bool(debug_code);
-
-#ifdef ENABLE_DISASSEMBLER
-DEFINE_bool(print_code, false, "print generated code");
-#endif
-
-#ifdef DEBUG
-DECLARE_bool(gc_greedy);
-DEFINE_bool(trace_codegen, false,
-            "print name of functions for which code is generated");
-DEFINE_bool(print_builtin_code, false, "print generated code for builtins");
-DEFINE_bool(print_source, false, "pretty print source code");
-DEFINE_bool(print_builtin_source, false,
-            "pretty print source code for builtins");
-DEFINE_bool(print_ast, false, "print source AST");
-DEFINE_bool(print_builtin_ast, false, "print source AST for builtins");
-DEFINE_bool(trace_calls, false, "trace calls");
-DEFINE_bool(trace_builtin_calls, false, "trace builtins calls");
-DEFINE_string(stop_at, "", "function name where to insert a breakpoint");
-#endif  // DEBUG
-
-
-DEFINE_bool(check_stack, true,
-            "check stack for overflow, interrupt, breakpoint");
-
-
 class ArmCodeGenerator;
 
 
index 5ff5df5..35629f8 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(trace, false, "trace function calls");
-DEFINE_bool(defer_negation, true, "defer negation operation");
-DECLARE_bool(debug_info);
-DECLARE_bool(debug_code);
-
-#ifdef ENABLE_DISASSEMBLER
-DEFINE_bool(print_code, false, "print generated code");
-#endif
-
-#ifdef DEBUG
-DECLARE_bool(gc_greedy);
-DEFINE_bool(trace_codegen, false,
-            "print name of functions for which code is generated");
-DEFINE_bool(print_builtin_code, false, "print generated code for builtins");
-DEFINE_bool(print_source, false, "pretty print source code");
-DEFINE_bool(print_builtin_source, false,
-            "pretty print source code for builtins");
-DEFINE_bool(print_ast, false, "print source AST");
-DEFINE_bool(print_builtin_ast, false, "print source AST for builtins");
-DEFINE_bool(trace_calls, false, "trace calls");
-DEFINE_bool(trace_builtin_calls, false, "trace builtins calls");
-DEFINE_string(stop_at, "", "function name where to insert a breakpoint");
-#endif  // DEBUG
-
-
-DEFINE_bool(check_stack, true,
-            "check stack for overflow, interrupt, breakpoint");
-
 #define TOS (Operand(esp, 0))
 
 
index 3631a95..df08e18 100644 (file)
 
 namespace v8 { namespace internal {
 
-
-DEFINE_bool(lazy, true, "use lazy compilation");
-DEFINE_bool(debug_info, true, "add debug information to compiled functions");
-
-
 DeferredCode::DeferredCode(CodeGenerator* generator)
   : masm_(generator->masm()),
     generator_(generator),
index 8f0e265..5b93abb 100644 (file)
@@ -41,7 +41,6 @@ namespace v8 { namespace internal {
 //       install extensions with lazy compilation enabled. At the
 //       moment, this doesn't work for the extensions in Google3,
 //       and we can only run the tests with --nolazy.
-DECLARE_bool(lazy);
 
 
 // Forward declaration.
index 496847d..4a6d4a4 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(strict, false, "strict error checking");
-DEFINE_int(min_preparse_length, 1024,
-           "Minimum length for automatic enable preparsing");
-DECLARE_bool(debug_info);
-
-#ifdef DEBUG
-DEFINE_bool(print_builtin_scopes, false, "print scopes for builtins");
-DEFINE_bool(print_scopes, false, "print scopes");
-#endif
-
-
 static Handle<Code> MakeCode(FunctionLiteral* literal,
                              Handle<Script> script,
                              bool is_eval) {
index 2142fac..e987b45 100644 (file)
 
 namespace v8 { namespace internal {
 
-
-#ifdef DEBUG
-DEFINE_bool(trace_contexts, false, "trace contexts operations");
-#else
-#define FLAG_trace_contexts false
-#endif
-
-
 JSBuiltinsObject* Context::builtins() {
   GlobalObject* object = global();
   if (object->IsJSGlobalObject()) {
index f69b6b7..3fc7545 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(remote_debugging, false, "enable remote debugging");
-DEFINE_bool(trace_debug_json, false, "trace debugging JSON request/response");
-DECLARE_bool(allow_natives_syntax);
-DECLARE_bool(log_debugger);
-
-
 static void PrintLn(v8::Local<v8::Value> value) {
   v8::Local<v8::String> s = value->ToString();
   char* data = NewArray<char>(s->Length() + 1);
index daf8bab..3213a34 100644 (file)
@@ -154,8 +154,6 @@ Handle<Object> Execution::TryCall(Handle<JSFunction> func,
 }
 
 
-DEFINE_bool(call_regexp, false, "allow calls to RegExp objects");
-
 Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
   ASSERT(!object->IsJSFunction());
 
diff --git a/src/flags-inl.h b/src/flags-inl.h
deleted file mode 100644 (file)
index 2bbf581..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2008 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_FLAGS_INL_H_
-#define V8_FLAGS_INL_H_
-
-namespace v8 { namespace internal {
-
-bool* Flag::bool_variable() const  {
-  ASSERT(type_ == BOOL);
-  return &variable_->b;
-}
-
-int* Flag::int_variable() const {
-  ASSERT(type_ == INT);
-  return &variable_->i;
-}
-
-double* Flag::float_variable() const {
-  ASSERT(type_ == FLOAT);
-  return &variable_->f;
-}
-
-const char** Flag::string_variable() const {
-  ASSERT(type_ == STRING);
-  return &variable_->s;
-}
-
-bool Flag::bool_default() const {
-  ASSERT(type_ == BOOL);
-  return default_.b;
-}
-
-int Flag::int_default() const {
-  ASSERT(type_ == INT);
-  return default_.i;
-}
-
-double Flag::float_default() const {
-  ASSERT(type_ == FLOAT);
-  return default_.f;
-}
-
-const char* Flag::string_default() const {
-  ASSERT(type_ == STRING);
-  return default_.s;
-}
-
-} }  // namespace v8::internal
-
-#endif  // V8_FLAGS_INL_H_
index b8a9e99..8868247 100644 (file)
 
 namespace v8 { namespace internal {
 
-// -----------------------------------------------------------------------------
-// Helpers
+// Define all of our flags.
+#define FLAG_MODE_DEFINE
+#include "flags.defs"
 
-static inline char NormalizeChar(char ch) {
-  return ch == '_' ? '-' : ch;
-}
+// Define all of our flags default values.
+#define FLAG_MODE_DEFINE_DEFAULTS
+#include "flags.defs"
+
+namespace {
+
+// This structure represents a single entry in the flag system, with a pointer
+// to the actual flag, default value, comment, etc.  This is designed to be POD
+// initialized as to avoid requiring static constructors.
+struct Flag {
+  enum FlagType { TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING };
+
+  FlagType type_;           // What type of flag, bool, int, or string.
+  const char* name_;        // Name of the flag, ex "my_flag".
+  void* valptr_;            // Pointer to the global flag variable.
+  const void* defptr_;      // Pointer to the default value.
+  const char* cmt_;         // A comment about the flags purpose.
+
+  FlagType type() const { return type_; }
 
+  const char* name() const { return name_; }
 
-static const char* NormalizeName(const char* name) {
-  int len = strlen(name);
-  char* result = NewArray<char>(len + 1);
-  for (int i = 0; i <= len; i++) {
-    result[i] = NormalizeChar(name[i]);
+  const char* comment() const { return cmt_; }
+
+  bool* bool_variable() const {
+    ASSERT(type_ == TYPE_BOOL);
+    return reinterpret_cast<bool*>(valptr_);
   }
-  return const_cast<const char*>(result);
-}
 
+  int* int_variable() const {
+    ASSERT(type_ == TYPE_INT);
+    return reinterpret_cast<int*>(valptr_);
+  }
 
-static bool EqualNames(const char* a, const char* b) {
-  for (int i = 0; NormalizeChar(a[i]) == NormalizeChar(b[i]); i++) {
-    if (a[i] == '\0') {
-      return true;
-    }
+  double* float_variable() const {
+    ASSERT(type_ == TYPE_FLOAT);
+    return reinterpret_cast<double*>(valptr_);
   }
-  return false;
-}
 
+  const char** string_variable() const {
+    ASSERT(type_ == TYPE_STRING);
+    return reinterpret_cast<const char**>(valptr_);
+  }
 
-// -----------------------------------------------------------------------------
-// Implementation of Flag
+  bool bool_default() const {
+    ASSERT(type_ == TYPE_BOOL);
+    return *reinterpret_cast<const bool*>(defptr_);
+  }
 
-Flag::Flag(const char* file, const char* name, const char* comment,
-           Type type, void* variable, FlagValue default_) {
-  file_ = file;
-  name_ = NormalizeName(name);
-  comment_ = comment;
-  type_ = type;
-  variable_ = reinterpret_cast<FlagValue*>(variable);
-  this->default_ = default_;
-  FlagList::Register(this);
-}
+  int int_default() const {
+    ASSERT(type_ == TYPE_INT);
+    return *reinterpret_cast<const int*>(defptr_);
+  }
 
+  double float_default() const {
+    ASSERT(type_ == TYPE_FLOAT);
+    return *reinterpret_cast<const double*>(defptr_);
+  }
 
-void Flag::SetToDefault() {
-  // Note that we cannot simply do '*variable_ = default_;' since
-  // flag variables are not really of type FlagValue and thus may
-  // be smaller! The FlagValue union is simply 'overlayed' on top
-  // of a flag variable for convenient access. Since union members
-  // are guarantee to be aligned at the beginning, this works.
-  switch (type_) {
-    case Flag::BOOL:
-      variable_->b = default_.b;
-      return;
-    case Flag::INT:
-      variable_->i = default_.i;
-      return;
-    case Flag::FLOAT:
-      variable_->f = default_.f;
-      return;
-    case Flag::STRING:
-      variable_->s = default_.s;
-      return;
+  const char* string_default() const {
+    ASSERT(type_ == TYPE_STRING);
+    return *reinterpret_cast<const char* const *>(defptr_);
   }
-  UNREACHABLE();
-}
 
+  // Compare this flag's current value against the default.
+  bool IsDefault() const {
+    switch (type_) {
+    case TYPE_BOOL:
+      return *bool_variable() == bool_default();
+    case TYPE_INT:
+      return *int_variable() == int_default();
+    case TYPE_FLOAT:
+      return *float_variable() == float_default();
+    case TYPE_STRING:
+      const char* str1 = *string_variable();
+      const char* str2 = string_default();
+      if (str2 == NULL) return str1 == NULL;
+      if (str1 == NULL) return str2 == NULL;
+      return strcmp(str1, str2) == 0;
+    }
+    return true;  // NOTREACHED
+  }
 
-bool Flag::IsDefault() const {
-  switch (type_) {
-    case Flag::BOOL:
-      return variable_->b == default_.b;
-    case Flag::INT:
-      return variable_->i == default_.i;
-    case Flag::FLOAT:
-      return variable_->f == default_.f;
-    case Flag::STRING:
-      if (variable_->s && default_.s) {
-        return strcmp(variable_->s, default_.s) == 0;
-      } else {
-        return variable_->s == default_.s;
-      }
+  // Set a flag back to it's default value.
+  void Reset() {
+    switch (type_) {
+    case TYPE_BOOL:
+      *bool_variable() = bool_default();
+      break;
+    case TYPE_INT:
+      *int_variable() = int_default();
+      break;
+    case TYPE_FLOAT:
+      *float_variable() = float_default();
+      break;
+    case TYPE_STRING:
+      *string_variable() = string_default();
+      break;
+    }
   }
-  UNREACHABLE();
-  return false;
-}
+};
+
+Flag flags[] = {
+#define FLAG_MODE_META
+#include "flags.defs"
+};
+
+const size_t num_flags = sizeof(flags) / sizeof(*flags);
+
+}  // namespace
 
 
-static const char* Type2String(Flag::Type type) {
+static const char* Type2String(Flag::FlagType type) {
   switch (type) {
-    case Flag::BOOL: return "bool";
-    case Flag::INT: return "int";
-    case Flag::FLOAT: return "float";
-    case Flag::STRING: return "string";
+    case Flag::TYPE_BOOL: return "bool";
+    case Flag::TYPE_INT: return "int";
+    case Flag::TYPE_FLOAT: return "float";
+    case Flag::TYPE_STRING: return "string";
   }
   UNREACHABLE();
   return NULL;
 }
 
 
-static char* ToString(Flag::Type type, FlagValue* variable) {
+static char* ToString(Flag* flag) {
   Vector<char> value;
-  switch (type) {
-    case Flag::BOOL:
+  switch (flag->type()) {
+    case Flag::TYPE_BOOL:
       value = Vector<char>::New(6);
-      OS::SNPrintF(value, "%s", (variable->b ? "true" : "false"));
+      OS::SNPrintF(value, "%s", (*flag->bool_variable() ? "true" : "false"));
       break;
-    case Flag::INT:
+    case Flag::TYPE_INT:
       value = Vector<char>::New(12);
-      OS::SNPrintF(value, "%d", variable->i);
+      OS::SNPrintF(value, "%d", *flag->int_variable());
       break;
-    case Flag::FLOAT:
+    case Flag::TYPE_FLOAT:
       value = Vector<char>::New(20);
-      OS::SNPrintF(value, "%f", variable->f);
+      OS::SNPrintF(value, "%f", *flag->float_variable());
       break;
-    case Flag::STRING:
-      if (variable->s) {
-        int length = strlen(variable->s) + 1;
+    case Flag::TYPE_STRING:
+      const char* str = *flag->string_variable();
+      if (str) {
+        int length = strlen(str) + 1;
         value = Vector<char>::New(length);
-        OS::SNPrintF(value, "%s", variable->s);
+        OS::SNPrintF(value, "%s", str);
       } else {
         value = Vector<char>::New(5);
         OS::SNPrintF(value, "NULL");
@@ -164,42 +194,14 @@ static char* ToString(Flag::Type type, FlagValue* variable) {
 }
 
 
-static void PrintFlagValue(Flag::Type type, FlagValue* variable) {
-  char* value = ToString(type, variable);
-  printf("%s", value);
-  DeleteArray(value);
-}
-
-
-char* Flag::StringValue() const {
-  return ToString(type_, variable_);
-}
-
-
-void Flag::Print(bool print_current_value) {
-  printf("  --%s (%s)  type: %s  default: ", name_, comment_,
-         Type2String(type_));
-  PrintFlagValue(type_, &default_);
-  if (print_current_value) {
-    printf("  current value: ");
-    PrintFlagValue(type_, variable_);
-  }
-  printf("\n");
-}
-
-
-// -----------------------------------------------------------------------------
-// Implementation of FlagList
-
-Flag* FlagList::list_ = NULL;
-
-
+// static
 List<char *>* FlagList::argv() {
   List<char *>* args = new List<char*>(8);
-  for (Flag* f = list_; f != NULL; f = f->next()) {
+  for (size_t i = 0; i < num_flags; ++i) {
+    Flag* f = &flags[i];
     if (!f->IsDefault()) {
       Vector<char> cmdline_flag;
-      if (f->type() != Flag::BOOL || *(f->bool_variable())) {
+      if (f->type() != Flag::TYPE_BOOL || *(f->bool_variable())) {
         int length = strlen(f->name()) + 2 + 1;
         cmdline_flag = Vector<char>::New(length);
         OS::SNPrintF(cmdline_flag, "--%s", f->name());
@@ -209,45 +211,26 @@ List<char *>* FlagList::argv() {
         OS::SNPrintF(cmdline_flag, "--no%s", f->name());
       }
       args->Add(cmdline_flag.start());
-      if (f->type() != Flag::BOOL) {
-        args->Add(f->StringValue());
-      }
-    }
-  }
-  return args;
-}
-
-
-void FlagList::Print(const char* file, bool print_current_value) {
-  // Since flag registration is likely by file (= C++ file),
-  // we don't need to sort by file and still get grouped output.
-  const char* current = NULL;
-  for (Flag* f = list_; f != NULL; f = f->next()) {
-    if (file == NULL || file == f->file()) {
-      if (current != f->file()) {
-        printf("Flags from %s:\n", f->file());
-        current = f->file();
+      if (f->type() != Flag::TYPE_BOOL) {
+        args->Add(ToString(f));
       }
-      f->Print(print_current_value);
     }
   }
-}
 
-
-Flag* FlagList::Lookup(const char* name) {
-  Flag* f = list_;
-  while (f != NULL && !EqualNames(name, f->name()))
-    f = f->next();
-  return f;
+  return args;
 }
 
 
-void FlagList::SplitArgument(const char* arg,
-                             char* buffer,
-                             int buffer_size,
-                             const char** name,
-                             const char** value,
-                             bool* is_bool) {
+// Helper function to parse flags: Takes an argument arg and splits it into
+// a flag name and flag value (or NULL if they are missing). is_bool is set
+// if the arg started with "-no" or "--no". The buffer may be used to NUL-
+// terminate the name, it must be large enough to hold any possible name.
+static void SplitArgument(const char* arg,
+                          char* buffer,
+                          int buffer_size,
+                          const char** name,
+                          const char** value,
+                          bool* is_bool) {
   *name = NULL;
   *value = NULL;
   *is_bool = false;
@@ -282,6 +265,31 @@ void FlagList::SplitArgument(const char* arg,
 }
 
 
+inline char NormalizeChar(char ch) {
+  return ch == '_' ? '-' : ch;
+}
+
+
+static bool EqualNames(const char* a, const char* b) {
+  for (int i = 0; NormalizeChar(a[i]) == NormalizeChar(b[i]); i++) {
+    if (a[i] == '\0') {
+      return true;
+    }
+  }
+  return false;
+}
+
+
+static Flag* FindFlag(const char* name) {
+  for (size_t i = 0; i < num_flags; ++i) {
+    if (EqualNames(name, flags[i].name()))
+      return &flags[i];
+  }
+  return NULL;
+}
+
+
+// static
 int FlagList::SetFlagsFromCommandLine(int* argc,
                                       char** argv,
                                       bool remove_flags) {
@@ -299,7 +307,7 @@ int FlagList::SetFlagsFromCommandLine(int* argc,
 
     if (name != NULL) {
       // lookup the flag
-      Flag* flag = Lookup(name);
+      Flag* flag = FindFlag(name);
       if (flag == NULL) {
         if (remove_flags) {
           // We don't recognize this flag but since we're removing
@@ -314,7 +322,7 @@ int FlagList::SetFlagsFromCommandLine(int* argc,
       }
 
       // if we still need a flag value, use the next argument if available
-      if (flag->type() != Flag::BOOL && value == NULL) {
+      if (flag->type() != Flag::TYPE_BOOL && value == NULL) {
         if (i < *argc) {
           value = argv[i++];
         } else {
@@ -327,23 +335,23 @@ int FlagList::SetFlagsFromCommandLine(int* argc,
       // set the flag
       char* endp = const_cast<char*>("");  // *endp is only read
       switch (flag->type()) {
-        case Flag::BOOL:
+        case Flag::TYPE_BOOL:
           *flag->bool_variable() = !is_bool;
           break;
-        case Flag::INT:
+        case Flag::TYPE_INT:
           *flag->int_variable() = strtol(value, &endp, 10);  // NOLINT
           break;
-        case Flag::FLOAT:
+        case Flag::TYPE_FLOAT:
           *flag->float_variable() = strtod(value, &endp);
           break;
-        case Flag::STRING:
+        case Flag::TYPE_STRING:
           *flag->string_variable() = value;
           break;
       }
 
       // handle errors
-      if ((flag->type() == Flag::BOOL && value != NULL) ||
-          (flag->type() != Flag::BOOL && is_bool) ||
+      if ((flag->type() == Flag::TYPE_BOOL && value != NULL) ||
+          (flag->type() != Flag::TYPE_BOOL && is_bool) ||
           *endp != '\0') {
         fprintf(stderr, "Error: illegal value for flag %s of type %s\n",
                 arg, Type2String(flag->type()));
@@ -384,6 +392,7 @@ static char* SkipBlackSpace(char* p) {
 }
 
 
+// static
 int FlagList::SetFlagsFromString(const char* str, int len) {
   // make a 0-terminated copy of str
   char* copy0 = NewArray<char>(len + 1);
@@ -427,12 +436,23 @@ int FlagList::SetFlagsFromString(const char* str, int len) {
 }
 
 
-void FlagList::Register(Flag* flag) {
-  ASSERT(flag != NULL && strlen(flag->name()) > 0);
-  if (Lookup(flag->name()) != NULL)
-    V8_Fatal(flag->file(), 0, "flag %s declared twice", flag->name());
-  flag->next_ = list_;
-  list_ = flag;
+// static
+void FlagList::ResetAllFlags() {
+  for (size_t i = 0; i < num_flags; ++i) {
+    flags[i].Reset();
+  }
+}
+
+
+// static
+void FlagList::PrintHelp() {
+  for (size_t i = 0; i < num_flags; ++i) {
+    Flag* f = &flags[i];
+    char* value = ToString(f);
+    printf("  --%s (%s)  type: %s  default: %s\n",
+           f->name(), f->comment(), Type2String(f->type()), value);
+    DeleteArray(value);
+  }
 }
 
 } }  // namespace v8::internal
diff --git a/src/flags.defs b/src/flags.defs
new file mode 100755 (executable)
index 0000000..ac0aeb6
--- /dev/null
@@ -0,0 +1,318 @@
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// This file defines all of the flags.  It is separated into different section,
+// for Debug, Release, Logging and Profiling, etc.  To add a new flag, find the
+// correct section, and use one of the DEFINE_ macros, without a trailing ';'.
+//
+// This include does not have a guard, because it is a template-style include,
+// which can be included multiple times in different modes.  It expects to have
+// a mode defined before it's included.  The modes are FLAG_MODE_... below:
+
+// We want to declare the names of the variables for the header file.  Normally
+// this will just be an extern declaration, but for a readonly flag we let the
+// compiler make better optimizations by giving it the value.
+#if defined(FLAG_MODE_DECLARE)
+#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
+  extern ctype FLAG_##nam;
+#define FLAG_READONLY(ftype, ctype, nam, def, cmt) \
+  static ctype const FLAG_##nam = def;
+
+// We want to supply the actual storage and value for the flag variable in the
+// .cc file.  We only do this for writable flags.
+#elif defined(FLAG_MODE_DEFINE)
+#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
+  ctype FLAG_##nam = def;
+#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
+
+// 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,
+// for MODE_META, so there is no impact on the flags interface.
+#elif defined(FLAG_MODE_DEFINE_DEFAULTS)
+#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
+  static ctype const FLAGDEFAULT_##nam = def;
+#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
+
+
+// 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.
+#elif defined(FLAG_MODE_META)
+#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
+  { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt },
+#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
+
+#else
+#error No mode supplied when including flags.defs
+#endif
+
+#define DEFINE_bool(nam, def, cmt) FLAG(BOOL, bool, nam, def, cmt)
+#define DEFINE_int(nam, def, cmt) FLAG(INT, int, nam, def, cmt)
+#define DEFINE_float(nam, def, cmt) FLAG(FLOAT, double, nam, def, cmt)
+#define DEFINE_string(nam, def, cmt) FLAG(STRING, const char*, nam, def, cmt)
+
+//
+// Flags in all modes.
+//
+#define FLAG FLAG_FULL
+
+// assembler-ia32.cc / assembler-arm.cc
+DEFINE_bool(debug_code, false,
+            "generate extra code (comments, assertions) for debugging")
+DEFINE_bool(emit_branch_hints, false, "emit branch hints")
+DEFINE_bool(push_pop_elimination, true,
+            "eliminate redundant push/pops in assembly code")
+DEFINE_bool(print_push_pop_elimination, false,
+            "print elimination of redundant push/pops in assembly code")
+DEFINE_bool(eliminate_jumps, true, "eliminate jumps to jumps in assembly code")
+DEFINE_bool(print_jump_elimination, false,
+            "print elimination of jumps to jumps in assembly code")
+
+// bootstrapper.cc
+DEFINE_string(expose_natives_as, NULL, "expose natives in global object")
+DEFINE_string(expose_debug_as, NULL, "expose debug in global object")
+DEFINE_string(natives_file, NULL, "alternative natives file")
+DEFINE_bool(expose_gc, false, "expose gc extension")
+
+// builtins-ia32.cc
+DEFINE_bool(inline_new, true, "use fast inline allocation")
+
+// checks.cc
+DEFINE_bool(stack_trace_on_abort, true,
+            "print a stack trace if an assertion failure occurs")
+
+// codegen-ia32.cc / codegen-arm.cc
+DEFINE_bool(trace, false, "trace function calls")
+DEFINE_bool(defer_negation, true, "defer negation operation")
+DEFINE_bool(check_stack, true,
+            "check stack for overflow, interrupt, breakpoint")
+
+// codegen.cc
+DEFINE_bool(lazy, true, "use lazy compilation")
+DEFINE_bool(debug_info, true, "add debug information to compiled functions")
+
+// compiler.cc
+DEFINE_bool(strict, false, "strict error checking")
+DEFINE_int(min_preparse_length, 1024,
+           "Minimum length for automatic enable preparsing")
+
+// debug.cc
+DEFINE_bool(remote_debugging, false, "enable remote debugging")
+DEFINE_bool(trace_debug_json, false, "trace debugging JSON request/response")
+
+// execution.cc
+DEFINE_bool(call_regexp, false, "allow calls to RegExp objects")
+
+// frames.cc
+DEFINE_int(max_stack_trace_source_length, 300,
+           "maximum length of function source code printed in a stack trace.")
+
+// heap.cc
+DEFINE_int(new_space_size, 0, "size of (each semispace in) the new generation")
+DEFINE_int(old_space_size, 0, "size of the old generation")
+DEFINE_bool(gc_global, false, "always perform global GCs")
+DEFINE_int(gc_interval, -1, "garbage collect after <n> allocations")
+DEFINE_bool(trace_gc, false,
+            "print one trace line following each garbage collection")
+
+// ic.cc
+DEFINE_bool(use_ic, true, "use inline caching")
+
+// macro-assembler-ia32.cc
+DEFINE_bool(native_code_counters, false,
+            "generate extra code for manipulating stats counters")
+
+// mark-compact.cc
+DEFINE_bool(always_compact, false, "Perform compaction on every full GC")
+DEFINE_bool(never_compact, false,
+            "Never perform compaction on full GC - testing only")
+DEFINE_bool(cleanup_ics_at_gc, true,
+            "Flush inline caches prior to mark compact collection.")
+DEFINE_bool(cleanup_caches_in_maps_at_gc, true,
+            "Flush code caches in maps during mark compact cycle.")
+
+// mksnapshot.cc
+DEFINE_bool(h, false, "print this message")
+
+// parser.cc
+DEFINE_bool(allow_natives_syntax, false, "allow natives syntax")
+
+// simulator-arm.cc
+DEFINE_bool(trace_sim, false, "trace simulator execution")
+DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions")
+
+// top.cc
+DEFINE_bool(trace_exception, false,
+            "print stack trace when throwing exceptions")
+DEFINE_bool(preallocate_message_memory, false,
+            "preallocate some memory to build stack traces.")
+
+// usage-analyzer.cc
+DEFINE_bool(usage_computation, true, "compute variable usage counts")
+
+// v8.cc
+DEFINE_bool(preemption, false,
+            "activate a 100ms timer that switches between V8 threads")
+
+// Testing flags test/cctest/test-{flags,api,serialization}.cc
+DEFINE_bool(testing_bool_flag, true, "testing_bool_flag")
+DEFINE_int(testing_int_flag, 13, "testing_int_flag")
+DEFINE_float(testing_float_flag, 2.5, "float-flag")
+DEFINE_string(testing_string_flag, "Hello, world!", "string-flag")
+DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness")
+#ifdef WIN32
+DEFINE_string(testing_serialization_file, "C:\\Windows\\Temp\\serdes",
+              "file in which to testing_serialize heap")
+#else
+DEFINE_string(testing_serialization_file, "/tmp/serdes",
+              "file in which to serialize heap")
+#endif
+
+
+
+//
+// Debug only flags
+//
+#undef FLAG
+#ifdef DEBUG
+#define FLAG FLAG_FULL
+#else
+#define FLAG FLAG_READONLY
+#endif
+
+// checks.cc
+DEFINE_bool(enable_slow_asserts, false,
+            "enable asserts that are slow to execute")
+
+// code-stubs.cc
+DEFINE_bool(print_code_stubs, false, "print code stubs")
+
+// codegen-ia32.cc / codegen-arm.cc
+DEFINE_bool(trace_codegen, false,
+            "print name of functions for which code is generated")
+DEFINE_bool(print_builtin_code, false, "print generated code for builtins")
+DEFINE_bool(print_source, false, "pretty print source code")
+DEFINE_bool(print_builtin_source, false,
+            "pretty print source code for builtins")
+DEFINE_bool(print_ast, false, "print source AST")
+DEFINE_bool(print_builtin_ast, false, "print source AST for builtins")
+DEFINE_bool(trace_calls, false, "trace calls")
+DEFINE_bool(trace_builtin_calls, false, "trace builtins calls")
+DEFINE_string(stop_at, "", "function name where to insert a breakpoint")
+
+// compiler.cc
+DEFINE_bool(print_builtin_scopes, false, "print scopes for builtins")
+DEFINE_bool(print_scopes, false, "print scopes")
+
+// contexts.cc
+DEFINE_bool(trace_contexts, false, "trace contexts operations")
+
+// heap.cc
+DEFINE_bool(gc_greedy, false, "perform GC prior to some allocations")
+DEFINE_bool(gc_verbose, false, "print stuff during garbage collection")
+DEFINE_bool(heap_stats, false, "report heap statistics before and after GC")
+DEFINE_bool(code_stats, false, "report code statistics after GC")
+DEFINE_bool(verify_heap, false, "verify heap pointers before and after GC")
+DEFINE_bool(print_handles, false, "report handles after GC")
+DEFINE_bool(print_global_handles, false, "report global handles after GC")
+DEFINE_bool(print_rset, false, "print remembered sets before GC")
+
+// ic.cc
+DEFINE_bool(trace_ic, false, "trace inline cache state transitions")
+
+// objects.cc
+DEFINE_bool(trace_normalization,
+            false,
+            "prints when objects are turned into dictionaries.")
+
+// runtime.cc
+DEFINE_bool(trace_lazy, false, "trace lazy compilation")
+
+// serialize.cc
+DEFINE_bool(debug_serialization, false,
+            "write debug information into the snapshot.")
+
+// spaces.cc
+DEFINE_bool(collect_heap_spill_statistics, false,
+            "report heap spill statistics along with heap_stats "
+            "(requires heap_stats)")
+
+//
+// Logging and profiling only flags
+//
+#undef FLAG
+#ifdef ENABLE_LOGGING_AND_PROFILING
+#define FLAG FLAG_FULL
+#else
+#define FLAG FLAG_READONLY
+#endif
+
+// log.cc
+DEFINE_bool(log, false,
+            "Minimal logging (no API, code, GC, suspect, or handles samples).")
+DEFINE_bool(log_all, false, "Log all events to the log file.")
+DEFINE_bool(log_api, false, "Log API events to the log file.")
+DEFINE_bool(log_code, false,
+            "Log code events to the log file without profiling.")
+DEFINE_bool(log_gc, false,
+            "Log heap samples on garbage collection for the hp2ps tool.")
+DEFINE_bool(log_handles, false, "Log global handle events.")
+DEFINE_bool(log_state_changes, false, "Log state changes.")
+DEFINE_bool(log_suspect, false, "Log suspect operations.")
+DEFINE_bool(prof, false,
+            "Log statistical profiling information (implies --log-code).")
+DEFINE_bool(log_regexp, false, "Log regular expression execution.")
+DEFINE_bool(sliding_state_window, false,
+            "Update sliding state window counters.")
+DEFINE_string(logfile, "v8.log", "Specify the name of the log file.")
+
+//
+// Disassembler only flags
+//
+#undef FLAG
+#ifdef ENABLE_DISASSEMBLER
+#define FLAG FLAG_FULL
+#else
+#define FLAG FLAG_READONLY
+#endif
+
+// codegen-ia32.cc / codegen-arm.cc
+DEFINE_bool(print_code, false, "print generated code")
+
+
+// Cleanup...
+#undef FLAG_FULL
+#undef FLAG_READONLY
+#undef FLAG
+
+#undef DEFINE_bool
+#undef DEFINE_int
+#undef DEFINE_string
+
+#undef FLAG_MODE_DECLARE
+#undef FLAG_MODE_DEFINE
+#undef FLAG_MODE_DEFINE_DEFAULTS
+#undef FLAG_MODE_META
index 07eb691..bad0d26 100644 (file)
 #ifndef V8_FLAGS_H_
 #define V8_FLAGS_H_
 
-namespace v8 { namespace internal {
-
-// Internal use only.
-union FlagValue {
-  static FlagValue New_BOOL(bool b)  {
-    FlagValue v;
-    v.b = b;
-    return v;
-  }
-  static FlagValue New_INT(int i)  {
-    FlagValue v;
-    v.i = i;
-    return v;
-  }
-  static FlagValue New_FLOAT(float f)  {
-    FlagValue v;
-    v.f = f;
-    return v;
-  }
-  static FlagValue New_STRING(const char* s)  {
-    FlagValue v;
-    v.s = s;
-    return v;
-  }
-
-  bool b;
-  int i;
-  double f;
-  const char* s;
-};
-
-
-// Each flag can be accessed programmatically via a Flag object.
-class Flag {
- public:
-  enum Type { BOOL, INT, FLOAT, STRING };
-
-  // Internal use only.
-  Flag(const char* file, const char* name, const char* comment,
-       Type type, void* variable, FlagValue default_);
-
-  // General flag information
-  const char* file() const  { return file_; }
-  const char* name() const  { return name_; }
-  const char* comment() const  { return comment_; }
-
-  // Flag type
-  Type type() const  { return type_; }
-
-  // Flag variables
-  inline bool* bool_variable() const;
-  inline int* int_variable() const;
-  inline double* float_variable() const;
-  inline const char** string_variable() const;
-
-  // Default values
-  inline bool bool_default() const;
-  inline int int_default() const;
-  inline double float_default() const;
-  inline const char* string_default() const;
-
-  // Resets a flag to its default value
-  void SetToDefault();
-
-  // True if a flag is set to its default value
-  bool IsDefault() const;
-
-  // Iteration support
-  Flag* next() const  { return next_; }
-
-  // Prints flag information. The current flag value is only printed
-  // if print_current_value is set.
-  void Print(bool print_current_value);
-
-
-  // Returns the string formatted value of the flag. The caller is responsible
-  // for disposing the string.
-  char* StringValue() const;
+#include "checks.h"
 
- private:
-  const char* file_;
-  const char* name_;
-  const char* comment_;
-
-  Type type_;
-  FlagValue* variable_;
-  FlagValue default_;
-
-  Flag* next_;
-
-  friend class FlagList;  // accesses next_
-};
-
-
-// Internal use only.
-#define DEFINE_FLAG(type, c_type, name, default, comment) \
-  /* define and initialize the flag */                    \
-  c_type FLAG_##name = (default);                         \
-  /* register the flag */                                 \
-  static v8::internal::Flag Flag_##name(__FILE__,         \
-      #name,                                              \
-      (comment),                                          \
-      v8::internal::Flag::type,                           \
-      &FLAG_##name,                                       \
-      v8::internal::FlagValue::New_##type(default))
-
-
-// Internal use only.
-#define DECLARE_FLAG(c_type, name)              \
-  /* declare the external flag */               \
-  extern c_type FLAG_##name
-
-
-// Use the following macros to define a new flag:
-#define DEFINE_bool(name, default, comment) \
-  DEFINE_FLAG(BOOL, bool, name, default, comment)
-#define DEFINE_int(name, default, comment) \
-  DEFINE_FLAG(INT, int, name, default, comment)
-#define DEFINE_float(name, default, comment) \
-  DEFINE_FLAG(FLOAT, double, name, default, comment)
-#define DEFINE_string(name, default, comment) \
-  DEFINE_FLAG(STRING, const char*, name, default, comment)
-
-
-// Use the following macros to declare a flag defined elsewhere:
-#define DECLARE_bool(name)  DECLARE_FLAG(bool, name)
-#define DECLARE_int(name)  DECLARE_FLAG(int, name)
-#define DECLARE_float(name)  DECLARE_FLAG(double, name)
-#define DECLARE_string(name)  DECLARE_FLAG(const char*, name)
+namespace v8 { namespace internal {
 
+// Declare all of our flags.
+#define FLAG_MODE_DECLARE
+#include "flags.defs"
 
 // The global list of all flags.
 class FlagList {
  public:
-  // The NULL-terminated list of all flags. Traverse with Flag::next().
-  static Flag* list()  { return list_; }
-
   // The list of all flags with a value different from the default
   // and their values. The format of the list is like the format of the
   // argv array passed to the main function, e.g.
@@ -172,25 +46,6 @@ class FlagList {
   // The caller is responsible for disposing the list.
   static List<char *>* argv();
 
-  // If file != NULL, prints information for all flags defined in file;
-  // otherwise prints information for all flags in all files. The current
-  // flag value is only printed if print_current_value is set.
-  static void Print(const char* file, bool print_current_value);
-
-  // Lookup a flag by name. Returns the matching flag or NULL.
-  static Flag* Lookup(const char* name);
-
-  // Helper function to parse flags: Takes an argument arg and splits it into
-  // a flag name and flag value (or NULL if they are missing). is_bool is set
-  // if the arg started with "-no" or "--no". The buffer may be used to NUL-
-  // terminate the name, it must be large enough to hold any possible name.
-  static void SplitArgument(const char* arg,
-                            char* buffer,
-                            int buffer_size,
-                            const char** name,
-                            const char** value,
-                            bool* is_bool);
-
   // Set the flag values by parsing the command line. If remove_flags is
   // set, the flags and associated values are removed from (argc,
   // argv). Returns 0 if no error occurred. Otherwise, returns the argv
@@ -211,12 +66,11 @@ class FlagList {
   // and then calls SetFlagsFromCommandLine() and returns its result.
   static int SetFlagsFromString(const char* str, int len);
 
-  // Registers a new flag. Called during program initialization. Not
-  // thread-safe.
-  static void Register(Flag* flag);
+  // Reset all flags to their default value.
+  static void ResetAllFlags();
 
- private:
-  static Flag* list_;
+  // Print help to stdout with flags, types, and default values.
+  static void PrintHelp();
 };
 
 } }  // namespace v8::internal
index 2857a3c..f5a72ec 100644 (file)
 
 namespace v8 { namespace internal {
 
-
-DEFINE_int(max_stack_trace_source_length, 300,
-           "maximum length of function source code printed in a stack trace.");
-
-
-// -------------------------------------------------------------------------
-
-
 // Iterator that supports traversing the stack handlers of a
 // particular frame. Needs to know the top of the handler chain.
 class StackHandlerIterator BASE_EMBEDDED {
index 84d91df..1fbb8ae 100644 (file)
 
 namespace v8 { namespace internal {
 
-DECLARE_bool(allow_natives_syntax);
-
-#ifdef DEBUG
-DECLARE_bool(gc_greedy);
-#endif
-
 #define CALL_GC(RESULT)                                             \
   {                                                                 \
     Failure* __failure__ = Failure::cast(RESULT);                   \
index e84c6eb..ea6c480 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DECLARE_bool(gc_greedy);
-DECLARE_int(gc_interval);
-#endif
-
-
 int Heap::MaxHeapObjectSize() {
   return Page::kMaxHeapObjectSize;
 }
index 2f67da4..dd166ee 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DEFINE_bool(gc_greedy, false, "perform GC prior to some allocations");
-DEFINE_bool(gc_verbose, false, "print stuff during garbage collection");
-DEFINE_bool(heap_stats, false, "report heap statistics before and after GC");
-DEFINE_bool(code_stats, false, "report code statistics after GC");
-DEFINE_bool(verify_heap, false, "verify heap pointers before and after GC");
-DEFINE_bool(print_handles, false, "report handles after GC");
-DEFINE_bool(print_global_handles, false, "report global handles after GC");
-DEFINE_bool(print_rset, false, "print remembered sets before GC");
-#endif
-
-DEFINE_int(new_space_size, 0, "size of (each semispace in) the new generation");
-DEFINE_int(old_space_size, 0, "size of the old generation");
-
-DEFINE_bool(gc_global, false, "always perform global GCs");
-DEFINE_int(gc_interval, -1, "garbage collect after <n> allocations");
-DEFINE_bool(trace_gc, false,
-            "print one trace line following each garbage collection");
-
-
-#ifdef ENABLE_LOGGING_AND_PROFILING
-DECLARE_bool(log_gc);
-#endif
-
-
 #define ROOT_ALLOCATION(type, name) type* Heap::name##_;
   ROOT_LIST(ROOT_ALLOCATION)
 #undef ROOT_ALLOCATION
index 7a9b678..37c35ee 100644 (file)
 
 namespace v8 { namespace internal {
 
-
-DECLARE_bool(debug_code);
-
-
 // ----------------------------------------------------------------------------
 // Static IC stub generators.
 //
index baac44b..df1e120 100644 (file)
--- a/src/ic.cc
+++ b/src/ic.cc
 namespace v8 { namespace internal {
 
 #ifdef DEBUG
-DEFINE_bool(trace_ic, false, "trace inline cache state transitions");
-#endif
-DEFINE_bool(use_ic, true, "use inline caching");
-DECLARE_bool(strict);
-
-
-#ifdef DEBUG
 static char TransitionMarkFromState(IC::State state) {
   switch (state) {
     case UNINITIALIZED: return '0';
index c650d4a..ac9c97f 100644 (file)
@@ -37,30 +37,6 @@ namespace v8 { namespace internal {
 #ifdef ENABLE_LOGGING_AND_PROFILING
 
 //
-// Command line flags used by Logger.
-//
-DEFINE_bool(log, false,
-            "Minimal logging (no API, code, GC, suspect, or handles samples).");
-DEFINE_bool(log_all, false, "Log all events to the log file.");
-DEFINE_bool(log_api, false, "Log API events to the log file.");
-DEFINE_bool(log_code, false,
-            "Log code events to the log file without profiling.");
-DEFINE_bool(log_gc, false,
-            "Log heap samples on garbage collection for the hp2ps tool.");
-DEFINE_bool(log_handles, false, "Log global handle events.");
-DEFINE_bool(log_state_changes, false, "Log state changes.");
-DEFINE_bool(log_suspect, false, "Log suspect operations.");
-DEFINE_bool(prof, false,
-            "Log statistical profiling information (implies --log-code).");
-DEFINE_bool(log_regexp, false,
-            "Log regular expression execution.");
-DEFINE_bool(sliding_state_window, false,
-            "Update sliding state window counters.");
-
-DEFINE_string(logfile, "v8.log", "Specify the name of the log file.");
-
-
-//
 // Sliding state window.  Updates counters to keep track of the last
 // window of kBufferSize states.  This is useful to track where we
 // spent our time.
index a1c199e..a1b1ea0 100644 (file)
 
 namespace v8 { namespace internal {
 
-DECLARE_bool(debug_code);
-DECLARE_bool(optimize_locals);
-
-
 // Give alias names to registers
 Register cp = {  8 };  // JavaScript context pointer
 Register pp = { 10 };  // parameter pointer
index e79f3ff..896190b 100644 (file)
 
 namespace v8 { namespace internal {
 
-DECLARE_bool(debug_code);
-DEFINE_bool(native_code_counters, false,
-            "generate extra code for manipulating stats counters");
-
-
 MacroAssembler::MacroAssembler(void* buffer, int size)
     : Assembler(buffer, size),
       unresolved_(0),
index e155e77..9ab6ae6 100644 (file)
@@ -42,21 +42,8 @@ namespace v8 { namespace internal {
 // TODO(1240833): Fix the heap verification code and turn this into a real
 // flag.
 static const bool FLAG_verify_global_gc = false;
-
-DECLARE_bool(gc_verbose);
 #endif  // DEBUG
 
-DEFINE_bool(always_compact, false, "Perform compaction on every full GC");
-DEFINE_bool(never_compact, false,
-            "Never perform compaction on full GC - testing only");
-
-DEFINE_bool(cleanup_ics_at_gc, true,
-            "Flush inline caches prior to mark compact collection.");
-DEFINE_bool(cleanup_caches_in_maps_at_gc, true,
-            "Flush code caches in maps during mark compact cycle.");
-
-DECLARE_bool(gc_global);
-
 // ----------------------------------------------------------------------------
 // MarkCompactCollector
 
index 5ee9511..166f4ff 100644 (file)
 #include "platform.h"
 #include "serialize.h"
 
-DEFINE_bool(h, false, "print this message");
-
-namespace v8 { namespace internal {
-#ifdef ENABLE_LOGGING_AND_PROFILING
-  DECLARE_bool(log_code);
-#endif
-} }
-
 // use explicit namespace to avoid clashing with types in namespace v8
 namespace i = v8::internal;
 using namespace v8;
index 6312e4e..22640e8 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DEFINE_bool(trace_normalization,
-            false,
-            "prints when objects are turned into dictionaries.");
-#endif
-
 // Getters and setters are stored in a fixed array property.  These are
 // constants for their indices.
 const int kGetterIndex = 0;
index 5d7ed0f..a7dbf99 100644 (file)
 
 namespace v8 { namespace internal {
 
-DECLARE_bool(lazy);
-DEFINE_bool(allow_natives_syntax, false, "allow natives syntax");
-
-
 class ParserFactory;
 class ParserLog;
 class TemporaryScope;
index b433c30..c579a20 100644 (file)
@@ -2723,11 +2723,6 @@ static Object* Runtime_NewObject(Arguments args) {
 }
 
 
-#ifdef DEBUG
-DEFINE_bool(trace_lazy, false, "trace lazy compilation");
-#endif
-
-
 static Object* Runtime_LazyCompile(Arguments args) {
   HandleScope scope;
   ASSERT(args.length() == 1);
index 96f0c60..88a6820 100644 (file)
@@ -826,8 +826,6 @@ void Scope::AllocateNonParameterLocal(Variable* var) {
 }
 
 
-DECLARE_bool(usage_computation);
-
 void Scope::AllocateNonParameterLocals() {
   // Each variable occurs exactly once in the locals_ list; all
   // variables that have no rewrite yet are non-parameter locals.
index 6478a90..a6c5361 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DEFINE_bool(debug_serialization, false,
-            "write debug information into the snapshot.");
-#endif
-
-
 // Encoding: a RelativeAddress must be able to fit in a pointer:
 // it is encoded as an Address with (from MS to LS bits):
 // 27 bits identifying a word in the space, in one of three formats:
@@ -1021,12 +1015,6 @@ void Serializer::PutHeader() {
 }
 
 
-#ifdef ENABLE_LOGGING_AND_PROFILING
-  DECLARE_bool(log_code);
-  DECLARE_string(logfile);
-#endif
-
-
 void Serializer::PutLog() {
 #ifdef ENABLE_LOGGING_AND_PROFILING
   if (FLAG_log_code) {
@@ -1301,10 +1289,6 @@ void Deserializer::VisitRuntimeEntry(RelocInfo* rinfo) {
 }
 
 
-DECLARE_bool(use_ic);
-DECLARE_bool(debug_code);
-DECLARE_bool(lazy);
-
 void Deserializer::GetFlags() {
   reader_.ExpectC('F');
   int argc = reader_.GetInt() + 1;
index 768885a..4d8bcdc 100644 (file)
@@ -45,9 +45,6 @@ using ::v8::internal::ReadLine;
 using ::v8::internal::DeleteArray;
 
 
-DEFINE_bool(trace_sim, false, "trace simulator execution");
-
-
 // The Debugger class is used by the simulator while debugging simulated ARM
 // code.
 class Debugger {
@@ -1393,9 +1390,6 @@ void Simulator::InstructionDecode(Instr* instr) {
 }
 
 
-DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions");
-
-
 //
 void Simulator::execute() {
   // Get the PC to simulate. Cannot use the accessor here as we need the
index 7920187..e8f460c 100644 (file)
 
 namespace v8 { namespace internal {
 
-#ifdef DEBUG
-DECLARE_bool(heap_stats);
-DEFINE_bool(collect_heap_spill_statistics, false,
-            "report heap spill statistics along with heap_stats "
-            "(requires heap_stats)");
-#endif
-
-#ifdef ENABLE_LOGGING_AND_PROFILING
-DECLARE_bool(log_gc);
-#endif
-
 // For contiguous spaces, top should be in the space (or at the end) and limit
 // should be the end of the space.
 #define ASSERT_SEMISPACE_ALLOCATION_INFO(info, space) \
index 84272a2..8d7c395 100644 (file)
@@ -912,7 +912,6 @@ Object* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) {
 }
 
 
-DECLARE_bool(print_code_stubs);
 Object* StubCompiler::GetCodeWithFlags(Code::Flags flags) {
   CodeDesc desc;
   masm_.GetCode(&desc);
index e9d8b6e..2320895 100644 (file)
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(trace_exception, false,
-            "print stack trace when throwing exceptions");
-DEFINE_bool(preallocate_message_memory, false,
-            "preallocate some memory to build stack traces.");
-
 ThreadLocalTop Top::thread_local_;
 Mutex* Top::break_access_ = OS::CreateMutex();
 StackFrame::Id Top::break_frame_id_;
index 0f234d8..2910fc6 100644 (file)
@@ -33,8 +33,6 @@
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(usage_computation, true, "compute variable usage counts");
-
 // Weight boundaries
 static const int MinWeight = 1;
 static const int MaxWeight = 1000000;
index 4a7dc6f..29013fd 100644 (file)
--- a/src/v8.cc
+++ b/src/v8.cc
@@ -34,9 +34,6 @@
 
 namespace v8 { namespace internal {
 
-DEFINE_bool(preemption, false,
-            "activate a 100ms timer that switches between V8 threads");
-
 bool V8::has_been_setup_ = false;
 bool V8::has_been_disposed_ = false;
 
index acdb119..328c88c 100644 (file)
--- a/src/v8.h
+++ b/src/v8.h
@@ -53,7 +53,7 @@
 #include "checks.h"
 #include "allocation.h"
 #include "utils.h"
-#include "flags-inl.h"
+#include "flags.h"
 
 // Objects & heap
 #include "objects.h"
index 273f77f..ce6ac84 100644 (file)
@@ -4480,15 +4480,11 @@ void ApiTestFuzzer::Run() {
 }
 
 
-DECLARE_int(prng_seed);
-DEFINE_int(prng_seed, 42, "Seed used for threading test randomness");
-
-
 static unsigned linear_congruential_generator;
 
 
 void ApiTestFuzzer::Setup(PartOfTest part) {
-  linear_congruential_generator = FLAG_prng_seed;
+  linear_congruential_generator = i::FLAG_testing_prng_seed;
   fuzzing_ = true;
   int start = (part == FIRST_PART) ? 0 : (RegisterThreadedTest::count() >> 1);
   int end = (part == FIRST_PART)
index 277a545..2720aa8 100644 (file)
@@ -54,12 +54,6 @@ using ::v8::internal::StepOut;  // From StepAction enum
 // Size of temp buffer for formatting small strings.
 #define SMALL_STRING_BUFFER_SIZE 80
 
-#ifdef DEBUG
-namespace v8 { namespace internal {
-DECLARE_bool(verify_heap);
-} }
-#endif
-
 // --- A d d i t i o n a l   C h e c k   H e l p e r s
 
 
index b4827b6..a3aa4b2 100644 (file)
 
 using namespace v8::internal;
 
-DEFINE_bool(bool_flag, true, "bool_flag");
-DEFINE_int(int_flag, 13, "int_flag");
-DEFINE_float(float_flag, 2.5, "float-flag");
-DEFINE_string(string_flag, "Hello, world!", "string-flag");
-
-
 // This test must be executed first!
 TEST(Default) {
-  CHECK(FLAG_bool_flag);
-  CHECK_EQ(13, FLAG_int_flag);
-  CHECK_EQ(2.5, FLAG_float_flag);
-  CHECK_EQ(0, strcmp(FLAG_string_flag, "Hello, world!"));
+  CHECK(FLAG_testing_bool_flag);
+  CHECK_EQ(13, FLAG_testing_int_flag);
+  CHECK_EQ(2.5, FLAG_testing_float_flag);
+  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "Hello, world!"));
 }
 
 
 static void SetFlagsToDefault() {
-  for (Flag* f = FlagList::list(); f != NULL; f = f->next()) {
-    f->SetToDefault();
-  }
+  FlagList::ResetAllFlags();
   TestDefault();
 }
 
 
 TEST(Flags1) {
-  FlagList::Print(__FILE__, false);
-  FlagList::Print(NULL, true);
+  FlagList::PrintHelp();
 }
 
 
 TEST(Flags2) {
   SetFlagsToDefault();
   int argc = 7;
-  const char* argv[] = { "Test2", "-nobool-flag", "notaflag", "--int_flag=77",
-                         "-float_flag=.25", "--string_flag", "no way!" };
+  const char* argv[] = { "Test2", "-notesting-bool-flag", "notaflag",
+                         "--testing_int_flag=77", "-testing_float_flag=.25",
+                         "--testing_string_flag", "no way!" };
   CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
                                                 const_cast<char **>(argv),
                                                 false));
   CHECK_EQ(7, argc);
-  CHECK(!FLAG_bool_flag);
-  CHECK_EQ(77, FLAG_int_flag);
-  CHECK_EQ(.25, FLAG_float_flag);
-  CHECK_EQ(0, strcmp(FLAG_string_flag, "no way!"));
+  CHECK(!FLAG_testing_bool_flag);
+  CHECK_EQ(77, FLAG_testing_int_flag);
+  CHECK_EQ(.25, FLAG_testing_float_flag);
+  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no way!"));
 }
 
 
 TEST(Flags2b) {
   SetFlagsToDefault();
   const char* str =
-      " -nobool-flag notaflag   --int_flag=77 -float_flag=.25  "
-      "--string_flag   no_way!  ";
+      " -notesting-bool-flag notaflag   --testing_int_flag=77 "
+      "-testing_float_flag=.25  "
+      "--testing_string_flag   no_way!  ";
   CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str)));
-  CHECK(!FLAG_bool_flag);
-  CHECK_EQ(77, FLAG_int_flag);
-  CHECK_EQ(.25, FLAG_float_flag);
-  CHECK_EQ(0, strcmp(FLAG_string_flag, "no_way!"));
+  CHECK(!FLAG_testing_bool_flag);
+  CHECK_EQ(77, FLAG_testing_int_flag);
+  CHECK_EQ(.25, FLAG_testing_float_flag);
+  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no_way!"));
 }
 
 
@@ -94,36 +87,38 @@ TEST(Flags3) {
   SetFlagsToDefault();
   int argc = 8;
   const char* argv[] =
-      { "Test3", "--bool_flag", "notaflag", "--int_flag", "-666",
-        "--float_flag", "-12E10", "-string-flag=foo-bar" };
+      { "Test3", "--testing_bool_flag", "notaflag",
+        "--testing_int_flag", "-666",
+        "--testing_float_flag", "-12E10", "-testing-string-flag=foo-bar" };
   CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
                                                 const_cast<char **>(argv),
                                                 true));
   CHECK_EQ(2, argc);
-  CHECK(FLAG_bool_flag);
-  CHECK_EQ(-666, FLAG_int_flag);
-  CHECK_EQ(-12E10, FLAG_float_flag);
-  CHECK_EQ(0, strcmp(FLAG_string_flag, "foo-bar"));
+  CHECK(FLAG_testing_bool_flag);
+  CHECK_EQ(-666, FLAG_testing_int_flag);
+  CHECK_EQ(-12E10, FLAG_testing_float_flag);
+  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar"));
 }
 
 
 TEST(Flags3b) {
   SetFlagsToDefault();
   const char* str =
-      "--bool_flag notaflag --int_flag -666 --float_flag -12E10 "
-      "-string-flag=foo-bar";
+      "--testing_bool_flag notaflag --testing_int_flag -666 "
+      "--testing_float_flag -12E10 "
+      "-testing-string-flag=foo-bar";
   CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str)));
-  CHECK(FLAG_bool_flag);
-  CHECK_EQ(-666, FLAG_int_flag);
-  CHECK_EQ(-12E10, FLAG_float_flag);
-  CHECK_EQ(0, strcmp(FLAG_string_flag, "foo-bar"));
+  CHECK(FLAG_testing_bool_flag);
+  CHECK_EQ(-666, FLAG_testing_int_flag);
+  CHECK_EQ(-12E10, FLAG_testing_float_flag);
+  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar"));
 }
 
 
 TEST(Flags4) {
   SetFlagsToDefault();
   int argc = 3;
-  const char* argv[] = { "Test4", "--bool_flag", "--foo" };
+  const char* argv[] = { "Test4", "--testing_bool_flag", "--foo" };
   CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
                                                 const_cast<char **>(argv),
                                                 true));
@@ -133,7 +128,7 @@ TEST(Flags4) {
 
 TEST(Flags4b) {
   SetFlagsToDefault();
-  const char* str = "--bool_flag --foo";
+  const char* str = "--testing_bool_flag --foo";
   CHECK_EQ(2, FlagList::SetFlagsFromString(str, strlen(str)));
 }
 
@@ -141,7 +136,7 @@ TEST(Flags4b) {
 TEST(Flags5) {
   SetFlagsToDefault();
   int argc = 2;
-  const char* argv[] = { "Test5", "--int_flag=\"foobar\"" };
+  const char* argv[] = { "Test5", "--testing_int_flag=\"foobar\"" };
   CHECK_EQ(1, FlagList::SetFlagsFromCommandLine(&argc,
                                                 const_cast<char **>(argv),
                                                 true));
@@ -151,7 +146,7 @@ TEST(Flags5) {
 
 TEST(Flags5b) {
   SetFlagsToDefault();
-  const char* str = "                     --int_flag=\"foobar\"";
+  const char* str = "                     --testing_int_flag=\"foobar\"";
   CHECK_EQ(1, FlagList::SetFlagsFromString(str, strlen(str)));
 }
 
@@ -159,7 +154,8 @@ TEST(Flags5b) {
 TEST(Flags6) {
   SetFlagsToDefault();
   int argc = 4;
-  const char* argv[] = { "Test5", "--int-flag", "0", "--float_flag" };
+  const char* argv[] = { "Test5", "--testing-int-flag", "0",
+                         "--testing_float_flag" };
   CHECK_EQ(3, FlagList::SetFlagsFromCommandLine(&argc,
                                                 const_cast<char **>(argv),
                                                 true));
@@ -169,6 +165,6 @@ TEST(Flags6) {
 
 TEST(Flags6b) {
   SetFlagsToDefault();
-  const char* str = "              --int-flag 0       --float_flag    ";
+  const char* str = "       --testing-int-flag 0      --testing_float_flag    ";
   CHECK_EQ(3, FlagList::SetFlagsFromString(str, strlen(str)));
 }
index 5d488df..36b286a 100644 (file)
 #include "top.h"
 #include "cctest.h"
 
-namespace v8 { namespace internal {
-DECLARE_bool(gc_global);
-DECLARE_bool(always_compact);
-} }
-
 using namespace v8::internal;
 
 static v8::Persistent<v8::Context> env;
index 3072664..7fc38a8 100644 (file)
 #include "snapshot.h"
 #include "cctest.h"
 
-namespace v8 { namespace internal {
-
-#ifdef WIN32
-DEFINE_string(serialization_file, "C:\\Windows\\Temp\\serdes",
-              "file in which to serialize heap");
-#else
-DEFINE_string(serialization_file, "/tmp/serdes",
-              "file in which to serialize heap");
-#endif
-DECLARE_bool(debug_serialization);
-}}  // namespace v8::internal
-
 using namespace v8::internal;
 
-
 static int local_counters[256];
 static int counter_count = 0;
 static std::map<std::wstring, int> counter_table;
@@ -174,7 +161,7 @@ static void Serialize() {
   v8::Persistent<v8::Context> env = v8::Context::New(&extensions);
   env->Enter();
 
-  Snapshot::WriteToFile(FLAG_serialization_file);
+  Snapshot::WriteToFile(FLAG_testing_serialization_file);
 }
 
 
@@ -218,7 +205,7 @@ static void Deserialize() {
 #ifdef DEBUG
   FLAG_debug_serialization = true;
 #endif
-  CHECK(Snapshot::Initialize(FLAG_serialization_file));
+  CHECK(Snapshot::Initialize(FLAG_testing_serialization_file));
 }
 
 
index 6165204..7a2aa94 100644 (file)
                897FF1310E719B8F00D62E90 /* execution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = execution.h; sourceTree = "<group>"; };
                897FF1320E719B8F00D62E90 /* factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = factory.cc; sourceTree = "<group>"; };
                897FF1330E719B8F00D62E90 /* factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = factory.h; sourceTree = "<group>"; };
-               897FF1340E719B8F00D62E90 /* flags-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "flags-inl.h"; sourceTree = "<group>"; };
                897FF1350E719B8F00D62E90 /* flags.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flags.cc; sourceTree = "<group>"; };
                897FF1360E719B8F00D62E90 /* flags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flags.h; sourceTree = "<group>"; };
                897FF1370E719B8F00D62E90 /* frames-arm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "frames-arm.cc"; sourceTree = "<group>"; };
                                897FF1310E719B8F00D62E90 /* execution.h */,
                                897FF1320E719B8F00D62E90 /* factory.cc */,
                                897FF1330E719B8F00D62E90 /* factory.h */,
-                               897FF1340E719B8F00D62E90 /* flags-inl.h */,
                                897FF1350E719B8F00D62E90 /* flags.cc */,
                                897FF1360E719B8F00D62E90 /* flags.h */,
                                897FF1370E719B8F00D62E90 /* frames-arm.cc */,