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

Unified Diff: runtime/vm/kernel_reader.cc

Issue 2732273002: VM: [Kernel] Set DoubleInitializedBit on fields with double initializers. (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_reader.cc
diff --git a/runtime/vm/kernel_reader.cc b/runtime/vm/kernel_reader.cc
index b89479fa236e65358db9b4d721db98f953ff4595..80a82ddc518a2ee674aacaf7061baa905ccd5bd5 100644
--- a/runtime/vm/kernel_reader.cc
+++ b/runtime/vm/kernel_reader.cc
@@ -562,18 +562,28 @@ Script& KernelReader::ScriptAt(intptr_t source_uri_index, String* import_uri) {
void KernelReader::GenerateFieldAccessors(const dart::Class& klass,
const dart::Field& field,
Field* kernel_field) {
- if (kernel_field->IsStatic() && kernel_field->initializer() != NULL) {
- // Static fields with initializers either have the static value set to the
- // initializer value if it is simple enough or else set to an uninitialized
- // sentinel.
+ if (kernel_field->initializer() != NULL) {
SimpleExpressionConverter converter(H.thread());
- if (converter.IsSimple(kernel_field->initializer())) {
- // We do not need a getter.
- field.SetStaticValue(converter.SimpleValue(), true);
- return;
+ const bool has_simple_initializer =
+ converter.IsSimple(kernel_field->initializer());
+ if (kernel_field->IsStatic()) {
+ // Static fields with initializers either have the static value set to the
+ // initializer value if it is simple enough or else set to an
+ // uninitialized sentinel.
+ if (has_simple_initializer) {
+ // We do not need a getter.
+ field.SetStaticValue(converter.SimpleValue(), true);
+ return;
+ }
+ // We do need a getter that evaluates the initializer if necessary.
+ field.SetStaticValue(Object::sentinel(), true);
+ } else if (has_simple_initializer) {
+ field.RecordStore(converter.SimpleValue());
+ if (!converter.SimpleValue().IsNull() &&
+ converter.SimpleValue().IsDouble()) {
+ field.set_is_double_initialized(true);
erikcorry 2017/03/07 12:32:50 Comment suggestion: The field is initialized with
Vyacheslav Egorov (Google) 2017/03/07 13:44:25 Added a comment
+ }
}
- // We do need a getter that evaluates the initializer if necessary.
- field.SetStaticValue(Object::sentinel(), true);
}
const dart::String& getter_name = H.DartGetterName(kernel_field->name());
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698