| Index: runtime/vm/isolate.cc | 
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc | 
| index 9381e1f74b1cb9c29907c14d357c67c92064d5fe..7250da98bc0a5dd6d1ac951c4a1fc70f99703c14 100644 | 
| --- a/runtime/vm/isolate.cc | 
| +++ b/runtime/vm/isolate.cc | 
| @@ -691,31 +691,74 @@ MessageHandler::MessageStatus IsolateMessageHandler::ProcessUnhandledException( | 
| } | 
|  | 
| void Isolate::FlagsInitialize(Dart_IsolateFlags* api_flags) { | 
| +  const bool false_by_default = false; | 
| +  const bool true_by_default = true; | 
| +  USE(true_by_default); | 
| +  USE(false_by_default); | 
| + | 
| api_flags->version = DART_FLAGS_CURRENT_VERSION; | 
| -#define INIT_FROM_FLAG(name, bitname, isolate_flag, flag)                      \ | 
| +#define INIT_FROM_FLAG(when, name, bitname, isolate_flag, flag)                \ | 
| api_flags->isolate_flag = flag; | 
| ISOLATE_FLAG_LIST(INIT_FROM_FLAG) | 
| #undef INIT_FROM_FLAG | 
| api_flags->use_dart_frontend = false; | 
| +  api_flags->entry_points = NULL; | 
| } | 
|  | 
| void Isolate::FlagsCopyTo(Dart_IsolateFlags* api_flags) const { | 
| api_flags->version = DART_FLAGS_CURRENT_VERSION; | 
| -#define INIT_FROM_FIELD(name, bitname, isolate_flag, flag)                     \ | 
| +#define INIT_FROM_FIELD(when, name, bitname, isolate_flag, flag)               \ | 
| api_flags->isolate_flag = name(); | 
| ISOLATE_FLAG_LIST(INIT_FROM_FIELD) | 
| #undef INIT_FROM_FIELD | 
| api_flags->use_dart_frontend = use_dart_frontend(); | 
| +  api_flags->entry_points = NULL; | 
| } | 
|  | 
| void Isolate::FlagsCopyFrom(const Dart_IsolateFlags& api_flags) { | 
| +#if defined(DART_PRECOMPILER) | 
| +#define FLAG_FOR_PRECOMPILER(action) action | 
| +#else | 
| +#define FLAG_FOR_PRECOMPILER(action) | 
| +#endif | 
| + | 
| #if !defined(PRODUCT) | 
| -#define SET_FROM_FLAG(name, bitname, isolate_flag, flag)                       \ | 
| -  isolate_flags_ = bitname##Bit::update(api_flags.isolate_flag, isolate_flags_); | 
| +#define FLAG_FOR_NONPRODUCT(action) action | 
| +#else | 
| +#define FLAG_FOR_NONPRODUCT(action) | 
| +#endif | 
| + | 
| +#define SET_FROM_FLAG(when, name, bitname, isolate_flag, flag)                 \ | 
| +  FLAG_FOR_##when(isolate_flags_ = bitname##Bit::update(                       \ | 
| +                      api_flags.isolate_flag, isolate_flags_)); | 
| + | 
| ISOLATE_FLAG_LIST(SET_FROM_FLAG) | 
| + | 
| +#undef FLAG_FOR_NONPRODUCT | 
| +#undef FLAG_FOR_PRECOMPILER | 
| #undef SET_FROM_FLAG | 
| -#endif  // !defined(PRODUCT) | 
| + | 
| set_use_dart_frontend(api_flags.use_dart_frontend); | 
| + | 
| +  // Copy entry points list. | 
| +  ASSERT(embedder_entry_points_ == NULL); | 
| +  if (api_flags.entry_points != NULL) { | 
| +    intptr_t count = 0; | 
| +    while (api_flags.entry_points[count].function_name != NULL) | 
| +      count++; | 
| +    embedder_entry_points_ = new Dart_QualifiedFunctionName[count + 1]; | 
| +    for (intptr_t i = 0; i < count; i++) { | 
| +      embedder_entry_points_[i].library_uri = | 
| +          strdup(api_flags.entry_points[i].library_uri); | 
| +      embedder_entry_points_[i].class_name = | 
| +          strdup(api_flags.entry_points[i].class_name); | 
| +      embedder_entry_points_[i].function_name = | 
| +          strdup(api_flags.entry_points[i].function_name); | 
| +    } | 
| +    memset(&embedder_entry_points_[count], 0, | 
| +           sizeof(Dart_QualifiedFunctionName)); | 
| +  } | 
| + | 
| // Leave others at defaults. | 
| } | 
|  | 
| @@ -815,7 +858,9 @@ Isolate::Isolate(const Dart_IsolateFlags& api_flags) | 
| spawn_count_monitor_(new Monitor()), | 
| spawn_count_(0), | 
| handler_info_cache_(), | 
| -      catch_entry_state_cache_() { | 
| +      catch_entry_state_cache_(), | 
| +      embedder_entry_points_(NULL), | 
| +      obfuscation_map_(NULL) { | 
| FlagsCopyFrom(api_flags); | 
| SetErrorsFatal(true); | 
| set_compilation_allowed(true); | 
| @@ -823,6 +868,13 @@ Isolate::Isolate(const Dart_IsolateFlags& api_flags) | 
| // how the vm_tag (kEmbedderTagId) can be set, these tags need to | 
| // move to the OSThread structure. | 
| set_user_tag(UserTags::kDefaultUserTag); | 
| + | 
| +  if (obfuscate()) { | 
| +    OS::PrintErr( | 
| +        "Warning: This VM has been configured to obfuscate symbol information " | 
| +        "which violates the Dart standard.\n" | 
| +        "         See dartbug.com/30524 for more information.\n"); | 
| +  } | 
| } | 
|  | 
| #undef REUSABLE_HANDLE_SCOPE_INIT | 
| @@ -870,6 +922,22 @@ Isolate::~Isolate() { | 
| delete spawn_count_monitor_; | 
| delete safepoint_handler_; | 
| delete thread_registry_; | 
| + | 
| +  if (obfuscation_map_ != NULL) { | 
| +    for (intptr_t i = 0; obfuscation_map_[i] != NULL; i++) { | 
| +      delete[] obfuscation_map_[i]; | 
| +    } | 
| +    delete[] obfuscation_map_; | 
| +  } | 
| + | 
| +  if (embedder_entry_points_ != NULL) { | 
| +    for (intptr_t i = 0; embedder_entry_points_[i].function_name != NULL; i++) { | 
| +      free(const_cast<char*>(embedder_entry_points_[i].library_uri)); | 
| +      free(const_cast<char*>(embedder_entry_points_[i].class_name)); | 
| +      free(const_cast<char*>(embedder_entry_points_[i].function_name)); | 
| +    } | 
| +    delete[] embedder_entry_points_; | 
| +  } | 
| } | 
|  | 
| void Isolate::InitOnce() { | 
|  |