| Index: runtime/vm/isolate.h
 | 
| diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
 | 
| index 316c26a488a9ca4e285ef916ed10bbac92b8a276..ecf072890bab7155502f827320fc7a0a53102af7 100644
 | 
| --- a/runtime/vm/isolate.h
 | 
| +++ b/runtime/vm/isolate.h
 | 
| @@ -132,15 +132,17 @@ typedef FixedCache<intptr_t, CatchEntryState, 16> CatchEntryStateCache;
 | 
|  //       V(name, Dart_IsolateFlags-member-name, command-line-flag-name)
 | 
|  //
 | 
|  #define ISOLATE_FLAG_LIST(V)                                                   \
 | 
| -  V(type_checks, EnableTypeChecks, enable_type_checks,                         \
 | 
| +  V(NONPRODUCT, type_checks, EnableTypeChecks, enable_type_checks,             \
 | 
|      FLAG_enable_type_checks)                                                   \
 | 
| -  V(asserts, EnableAsserts, enable_asserts, FLAG_enable_asserts)               \
 | 
| -  V(error_on_bad_type, ErrorOnBadType, enable_error_on_bad_type,               \
 | 
| +  V(NONPRODUCT, asserts, EnableAsserts, enable_asserts, FLAG_enable_asserts)   \
 | 
| +  V(NONPRODUCT, error_on_bad_type, ErrorOnBadType, enable_error_on_bad_type,   \
 | 
|      FLAG_error_on_bad_type)                                                    \
 | 
| -  V(error_on_bad_override, ErrorOnBadOverride, enable_error_on_bad_override,   \
 | 
| -    FLAG_error_on_bad_override)                                                \
 | 
| -  V(use_field_guards, UseFieldGuards, use_field_guards, FLAG_use_field_guards) \
 | 
| -  V(use_osr, UseOsr, use_osr, FLAG_use_osr)
 | 
| +  V(NONPRODUCT, error_on_bad_override, ErrorOnBadOverride,                     \
 | 
| +    enable_error_on_bad_override, FLAG_error_on_bad_override)                  \
 | 
| +  V(NONPRODUCT, use_field_guards, UseFieldGuards, use_field_guards,            \
 | 
| +    FLAG_use_field_guards)                                                     \
 | 
| +  V(NONPRODUCT, use_osr, UseOsr, use_osr, FLAG_use_osr)                        \
 | 
| +  V(PRECOMPILER, obfuscate, Obfuscate, obfuscate, false_by_default)
 | 
|  
 | 
|  class Isolate : public BaseIsolate {
 | 
|   public:
 | 
| @@ -295,9 +297,9 @@ class Isolate : public BaseIsolate {
 | 
|    MessageHandler* message_handler() const { return message_handler_; }
 | 
|    void set_message_handler(MessageHandler* value) { message_handler_ = value; }
 | 
|  
 | 
| -  bool is_runnable() const { return RunnableBit::decode(isolate_flags_); }
 | 
| +  bool is_runnable() const { return IsRunnableBit::decode(isolate_flags_); }
 | 
|    void set_is_runnable(bool value) {
 | 
| -    isolate_flags_ = RunnableBit::update(value, isolate_flags_);
 | 
| +    isolate_flags_ = IsRunnableBit::update(value, isolate_flags_);
 | 
|  #if !defined(PRODUCT)
 | 
|      if (is_runnable()) {
 | 
|        set_last_resume_timestamp();
 | 
| @@ -685,28 +687,50 @@ class Isolate : public BaseIsolate {
 | 
|    RawFunction* ClosureFunctionFromIndex(intptr_t idx) const;
 | 
|  
 | 
|    bool is_service_isolate() const {
 | 
| -    return ServiceIsolateBit::decode(isolate_flags_);
 | 
| +    return IsServiceIsolateBit::decode(isolate_flags_);
 | 
|    }
 | 
|    void set_is_service_isolate(bool value) {
 | 
| -    isolate_flags_ = ServiceIsolateBit::update(value, isolate_flags_);
 | 
| +    isolate_flags_ = IsServiceIsolateBit::update(value, isolate_flags_);
 | 
|    }
 | 
|  
 | 
| +  Dart_QualifiedFunctionName* embedder_entry_points() const {
 | 
| +    return embedder_entry_points_;
 | 
| +  }
 | 
| +
 | 
| +  void set_obfuscation_map(const char** map) { obfuscation_map_ = map; }
 | 
| +  const char** obfuscation_map() const { return obfuscation_map_; }
 | 
| +
 | 
|    // Isolate-specific flag handling.
 | 
|    static void FlagsInitialize(Dart_IsolateFlags* api_flags);
 | 
|    void FlagsCopyTo(Dart_IsolateFlags* api_flags) const;
 | 
|    void FlagsCopyFrom(const Dart_IsolateFlags& api_flags);
 | 
|  
 | 
| -#if defined(PRODUCT)
 | 
| -#define DECLARE_GETTER(name, bitname, isolate_flag_name, flag_name)            \
 | 
| -  bool name() const { return flag_name; }
 | 
| +#if defined(DART_PRECOMPILER)
 | 
| +#define FLAG_FOR_PRECOMPILER(from_field, from_flag) (from_field)
 | 
| +#else
 | 
| +#define FLAG_FOR_PRECOMPILER(from_field, from_flag) (from_flag)
 | 
| +#endif
 | 
| +
 | 
| +#if !defined(PRODUCT)
 | 
| +#define FLAG_FOR_NONPRODUCT(from_field, from_flag) (from_field)
 | 
| +#else
 | 
| +#define FLAG_FOR_NONPRODUCT(from_field, from_flag) (from_flag)
 | 
| +#endif
 | 
| +
 | 
| +#define DECLARE_GETTER(when, name, bitname, isolate_flag_name, flag_name)      \
 | 
| +  bool name() const {                                                          \
 | 
| +    const bool false_by_default = false;                                       \
 | 
| +    USE(false_by_default);                                                     \
 | 
| +    return FLAG_FOR_##when(bitname##Bit::decode(isolate_flags_), flag_name);   \
 | 
| +  }
 | 
|    ISOLATE_FLAG_LIST(DECLARE_GETTER)
 | 
| +#undef FLAG_FOR_NONPRODUCT
 | 
| +#undef FLAG_FOR_PRECOMPILER
 | 
|  #undef DECLARE_GETTER
 | 
| +
 | 
| +#if defined(PRODUCT)
 | 
|    void set_use_osr(bool use_osr) { ASSERT(!use_osr); }
 | 
|  #else  // defined(PRODUCT)
 | 
| -#define DECLARE_GETTER(name, bitname, isolate_flag_name, flag_name)            \
 | 
| -  bool name() const { return bitname##Bit::decode(isolate_flags_); }
 | 
| -  ISOLATE_FLAG_LIST(DECLARE_GETTER)
 | 
| -#undef DECLARE_GETTER
 | 
|    void set_use_osr(bool use_osr) {
 | 
|      isolate_flags_ = UseOsrBit::update(use_osr, isolate_flags_);
 | 
|    }
 | 
| @@ -805,55 +829,37 @@ class Isolate : public BaseIsolate {
 | 
|    ClassTable class_table_;
 | 
|    bool single_step_;
 | 
|  
 | 
| +#define ISOLATE_FLAG_BITS(V)                                                   \
 | 
| +  V(ErrorsFatal)                                                               \
 | 
| +  V(IsRunnable)                                                                \
 | 
| +  V(IsServiceIsolate)                                                          \
 | 
| +  V(CompilationAllowed)                                                        \
 | 
| +  V(AllClassesFinalized)                                                       \
 | 
| +  V(RemappingCids)                                                             \
 | 
| +  V(ResumeRequest)                                                             \
 | 
| +  V(HasAttemptedReload)                                                        \
 | 
| +  V(ShouldPausePostServiceRequest)                                             \
 | 
| +  V(UseDartFrontEnd)                                                           \
 | 
| +  V(EnableTypeChecks)                                                          \
 | 
| +  V(EnableAsserts)                                                             \
 | 
| +  V(ErrorOnBadType)                                                            \
 | 
| +  V(ErrorOnBadOverride)                                                        \
 | 
| +  V(UseFieldGuards)                                                            \
 | 
| +  V(UseOsr)                                                                    \
 | 
| +  V(Obfuscate)
 | 
| +
 | 
|    // Isolate specific flags.
 | 
|    enum FlagBits {
 | 
| -    kErrorsFatalBit = 0,
 | 
| -    kIsRunnableBit = 1,
 | 
| -    kIsServiceIsolateBit = 2,
 | 
| -    kCompilationAllowedBit = 3,
 | 
| -    kAllClassesFinalizedBit = 4,
 | 
| -    kRemappingCidsBit = 5,
 | 
| -    kResumeRequestBit = 6,
 | 
| -    kHasAttemptedReloadBit = 7,
 | 
| -    kShouldPausePostServiceRequestBit = 8,
 | 
| -    kUseDartFrontEndBit = 9,
 | 
| -    kEnableTypeChecksBit = 10,
 | 
| -    kEnableAssertsBit = 11,
 | 
| -    kErrorOnBadTypeBit = 12,
 | 
| -    kErrorOnBadOverrideBit = 13,
 | 
| -    kUseFieldGuardsBit = 14,
 | 
| -    kUseOsrBit = 15,
 | 
| +#define DECLARE_BIT(Name) k##Name##Bit,
 | 
| +    ISOLATE_FLAG_BITS(DECLARE_BIT)
 | 
| +#undef DECLARE_BIT
 | 
|    };
 | 
| -  class ErrorsFatalBit : public BitField<uint32_t, bool, kErrorsFatalBit, 1> {};
 | 
| -  class RunnableBit : public BitField<uint32_t, bool, kIsRunnableBit, 1> {};
 | 
| -  class ServiceIsolateBit
 | 
| -      : public BitField<uint32_t, bool, kIsServiceIsolateBit, 1> {};
 | 
| -  class CompilationAllowedBit
 | 
| -      : public BitField<uint32_t, bool, kCompilationAllowedBit, 1> {};
 | 
| -  class AllClassesFinalizedBit
 | 
| -      : public BitField<uint32_t, bool, kAllClassesFinalizedBit, 1> {};
 | 
| -  class RemappingCidsBit
 | 
| -      : public BitField<uint32_t, bool, kRemappingCidsBit, 1> {};
 | 
| -  class ResumeRequestBit
 | 
| -      : public BitField<uint32_t, bool, kResumeRequestBit, 1> {};
 | 
| -  class HasAttemptedReloadBit
 | 
| -      : public BitField<uint32_t, bool, kHasAttemptedReloadBit, 1> {};
 | 
| -  class ShouldPausePostServiceRequestBit
 | 
| -      : public BitField<uint32_t, bool, kShouldPausePostServiceRequestBit, 1> {
 | 
| -  };
 | 
| -  class UseDartFrontEndBit
 | 
| -      : public BitField<uint32_t, bool, kUseDartFrontEndBit, 1> {};
 | 
| -  class EnableTypeChecksBit
 | 
| -      : public BitField<uint32_t, bool, kEnableTypeChecksBit, 1> {};
 | 
| -  class EnableAssertsBit
 | 
| -      : public BitField<uint32_t, bool, kEnableAssertsBit, 1> {};
 | 
| -  class ErrorOnBadTypeBit
 | 
| -      : public BitField<uint32_t, bool, kErrorOnBadTypeBit, 1> {};
 | 
| -  class ErrorOnBadOverrideBit
 | 
| -      : public BitField<uint32_t, bool, kErrorOnBadOverrideBit, 1> {};
 | 
| -  class UseFieldGuardsBit
 | 
| -      : public BitField<uint32_t, bool, kUseFieldGuardsBit, 1> {};
 | 
| -  class UseOsrBit : public BitField<uint32_t, bool, kUseOsrBit, 1> {};
 | 
| +
 | 
| +#define DECLARE_BITFIELD(Name)                                                 \
 | 
| +  class Name##Bit : public BitField<uint32_t, bool, k##Name##Bit, 1> {};
 | 
| +  ISOLATE_FLAG_BITS(DECLARE_BITFIELD)
 | 
| +#undef DECLARE_BITFIELD
 | 
| +
 | 
|    uint32_t isolate_flags_;
 | 
|  
 | 
|    // Background compilation.
 | 
| @@ -969,6 +975,9 @@ class Isolate : public BaseIsolate {
 | 
|    HandlerInfoCache handler_info_cache_;
 | 
|    CatchEntryStateCache catch_entry_state_cache_;
 | 
|  
 | 
| +  Dart_QualifiedFunctionName* embedder_entry_points_;
 | 
| +  const char** obfuscation_map_;
 | 
| +
 | 
|    static Dart_IsolateCreateCallback create_callback_;
 | 
|    static Dart_IsolateShutdownCallback shutdown_callback_;
 | 
|    static Dart_IsolateCleanupCallback cleanup_callback_;
 | 
| 
 |