Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(854)

Unified Diff: runtime/vm/isolate.h

Issue 1162033005: Fix http://dartbug.com/23578: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Update to ToT. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/isolate.h
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index a74bc944ba82f8e8ca29bae50a03f012e99a8d39..a3758a2ec19664cb362eefbf8f9c9506d9516767 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -23,11 +23,6 @@
namespace dart {
-DECLARE_FLAG(bool, enable_type_checks);
-DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, error_on_bad_type);
-DECLARE_FLAG(bool, error_on_bad_override);
-
// Forward declarations.
class AbstractType;
class ApiState;
@@ -126,7 +121,9 @@ class Isolate : public BaseIsolate {
}
static void InitOnce();
- static Isolate* Init(const char* name_prefix, bool is_vm_isolate = false);
+ static Isolate* Init(const char* name_prefix,
+ const Dart_IsolateFlags& api_flags,
+ bool is_vm_isolate = false);
void Shutdown();
// Register a newly introduced class.
@@ -383,19 +380,51 @@ class Isolate : public BaseIsolate {
void set_has_compiled(bool value) { has_compiled_ = value; }
bool has_compiled() const { return has_compiled_; }
- void set_strict_compilation(bool value) { strict_compilation_ = value; }
- bool strict_compilation() const { return strict_compilation_; }
- bool TypeChecksEnabled() {
- return FLAG_enable_type_checks || strict_compilation_;
- }
- bool AssertsEnabled() {
- return FLAG_enable_asserts || strict_compilation_;
- }
- bool ErrorOnBadTypeEnabled() {
- return FLAG_error_on_bad_type || strict_compilation_;
- }
- bool ErrorOnBadOverrideEnabled() {
- return FLAG_error_on_bad_override || strict_compilation_;
+ // TODO(iposva): Evaluate whether two different isolate flag structures are
+ // needed. Currently it serves as a separation between publicly visible flags
+ // and VM internal flags.
+ class Flags : public ValueObject {
+ public:
+ // Construct default flags as specified by the options.
+ Flags();
+
+ bool type_checks() const { return type_checks_; }
+ bool asserts() const { return asserts_; }
+ bool error_on_bad_type() const { return error_on_bad_type_; }
+ bool error_on_bad_override() const { return error_on_bad_override_; }
+
+ void set_checked(bool val) {
+ type_checks_ = val;
+ asserts_ = val;
+ }
+
+ void CopyFrom(const Flags& orig);
Florian Schneider 2015/06/08 11:25:49 Are these used outside constructors? Otherwise, ju
+ void CopyFrom(const Dart_IsolateFlags& api_flags);
+ void CopyTo(Dart_IsolateFlags* api_flags) const;
+
+ private:
+ bool type_checks_;
+ bool asserts_;
+ bool error_on_bad_type_;
+ bool error_on_bad_override_;
+
+ friend class Isolate;
+
+ DISALLOW_ALLOCATION();
+ DISALLOW_COPY_AND_ASSIGN(Flags);
+ };
+
+ const Flags& flags() const { return flags_; }
+
+ // Set the checks in the compiler to the highest level. Statically and when
+ // executing generated code. Needs to be called before any code has been
+ // compiled.
+ void set_strict_compilation() {
+ ASSERT(!has_compiled());
+ flags_.type_checks_ = true;
+ flags_.asserts_ = true;
+ flags_.error_on_bad_type_ = true;
+ flags_.error_on_bad_override_ = true;
}
// Requests that the debugger resume execution.
@@ -677,7 +706,7 @@ class Isolate : public BaseIsolate {
void PauseEventHandler();
private:
- Isolate();
+ explicit Isolate(const Dart_IsolateFlags& api_flags);
void BuildName(const char* name_prefix);
void PrintInvokedFunctions();
@@ -720,7 +749,7 @@ class Isolate : public BaseIsolate {
bool single_step_;
bool resume_request_;
bool has_compiled_;
- bool strict_compilation_;
+ Flags flags_;
Random random_;
Simulator* simulator_;
LongJumpScope* long_jump_base_;
@@ -926,15 +955,13 @@ class IsolateSpawnState {
IsolateSpawnState(Dart_Port parent_port,
const Function& func,
const Instance& message,
- bool paused,
- bool checked);
+ bool paused);
IsolateSpawnState(Dart_Port parent_port,
const char* script_url,
const char* package_root,
const Instance& args,
const Instance& message,
- bool paused,
- bool checked);
+ bool paused);
~IsolateSpawnState();
Isolate* isolate() const { return isolate_; }
@@ -948,7 +975,7 @@ class IsolateSpawnState {
char* function_name() const { return function_name_; }
bool is_spawn_uri() const { return library_url_ == NULL; }
bool paused() const { return paused_; }
- bool checked_mode() const { return checked_; }
+ Isolate::Flags* isolate_flags() { return &isolate_flags_; }
RawObject* ResolveFunction();
RawInstance* BuildArgs(Zone* zone);
@@ -967,8 +994,8 @@ class IsolateSpawnState {
intptr_t serialized_args_len_;
uint8_t* serialized_message_;
intptr_t serialized_message_len_;
+ Isolate::Flags isolate_flags_;
bool paused_;
- bool checked_;
};
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698