Chromium Code Reviews| 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()); |