Index: runtime/vm/parser.cc |
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc |
index f7e3a273d4def38aee2bb6b2c1ce9a7f6f1ca575..7fb89f4c03390076311ba1791d289647d9cc7c2d 100644 |
--- a/runtime/vm/parser.cc |
+++ b/runtime/vm/parser.cc |
@@ -4048,7 +4048,7 @@ void Parser::ParseFieldDefinition(ClassDesc* members, MemberDesc* field) { |
// For static final fields (this includes static const fields), set value to |
// "uninitialized" and create a kImplicitStaticFinalGetter getter method. |
if (field->has_static && has_initializer) { |
- class_field.set_value(init_value); |
+ class_field.SetStaticFieldValue(init_value, true); |
if (!has_simple_literal) { |
String& getter_name = |
String::Handle(Z, Field::GetterSymbol(*field->name)); |
@@ -4787,7 +4787,7 @@ void Parser::ParseEnumDefinition(const Class& cls) { |
// Initialize the field with the ordinal value. It will be patched |
// later with the enum constant instance. |
const Smi& ordinal_value = Smi::Handle(Z, Smi::New(i)); |
- enum_value.set_value(ordinal_value); |
+ enum_value.SetStaticFieldValue(ordinal_value, true); |
enum_value.RecordStore(ordinal_value); |
i++; |
@@ -4825,7 +4825,7 @@ void Parser::ParseEnumDefinition(const Class& cls) { |
// Allocate the immutable array containing the enumeration values. |
// The actual enum instance values will be patched in later. |
const Array& values_array = Array::Handle(Z, Array::New(i, Heap::kOld)); |
- values_field.set_value(values_array); |
+ values_field.SetStaticFieldValue(values_array, true); |
values_field.RecordStore(values_array); |
// Create a static field that contains the list of enumeration names. |
@@ -4836,7 +4836,7 @@ void Parser::ParseEnumDefinition(const Class& cls) { |
names_field = names_field.Clone(cls); |
enum_members.AddField(names_field); |
const Array& names_array = Array::Handle(Array::MakeArray(enum_names)); |
- names_field.set_value(names_array); |
+ names_field.SetStaticFieldValue(names_array, true); |
names_field.RecordStore(names_array); |
// Clone the toString() function from the helper class. |
@@ -5429,7 +5429,7 @@ void Parser::ParseTopLevelVariable(TopLevel* top_level, |
field = Field::New(var_name, is_static, is_final, is_const, is_reflectable, |
current_class(), name_pos); |
field.set_type(type); |
- field.set_value(Object::null_instance()); |
+ field.SetStaticFieldValue(Object::null_instance(), true); |
top_level->AddField(field); |
library_.AddObject(field, var_name); |
if (metadata_pos >= 0) { |
@@ -5443,7 +5443,7 @@ void Parser::ParseTopLevelVariable(TopLevel* top_level, |
has_simple_literal = IsSimpleLiteral(type, &field_value); |
} |
SkipExpr(); |
- field.set_value(field_value); |
+ field.SetStaticFieldValue(field_value, true); |
field.set_has_initializer(true); |
if (!has_simple_literal) { |
@@ -10828,10 +10828,11 @@ static AstNode* LiteralIfStaticConst(Zone* zone, AstNode* expr) { |
const Field& field = expr->AsLoadStaticFieldNode()->field(); |
if (field.is_const() && |
!expr->AsLoadStaticFieldNode()->is_deferred_reference()) { |
- ASSERT(field.value() != Object::sentinel().raw()); |
- ASSERT(field.value() != Object::transition_sentinel().raw()); |
- return new(zone) LiteralNode(expr->token_pos(), |
- Instance::ZoneHandle(zone, field.value())); |
+ ASSERT(field.StaticFieldValue() != Object::sentinel().raw()); |
+ ASSERT(field.StaticFieldValue() != Object::transition_sentinel().raw()); |
+ return new(zone) LiteralNode( |
+ expr->token_pos(), |
+ Instance::ZoneHandle(zone, field.StaticFieldValue())); |
} |
} |
return expr; |
@@ -11993,7 +11994,7 @@ StaticGetterNode* Parser::RunStaticFieldInitializer(const Field& field, |
const String& getter_name = String::Handle(Z, Field::GetterName(field_name)); |
const Function& getter = Function::Handle(Z, |
field_owner.LookupStaticFunction(getter_name)); |
- const Instance& value = Instance::Handle(Z, field.value()); |
+ const Instance& value = Instance::Handle(Z, field.StaticFieldValue()); |
if (value.raw() == Object::transition_sentinel().raw()) { |
if (field.is_const()) { |
ReportError("circular dependency while initializing static field '%s'", |
@@ -12008,7 +12009,7 @@ StaticGetterNode* Parser::RunStaticFieldInitializer(const Field& field, |
// not been evaluated. If the field is const, call the static getter method |
// to evaluate the expression and canonicalize the value. |
if (field.is_const()) { |
- field.set_value(Object::transition_sentinel()); |
+ field.SetStaticFieldValue(Object::transition_sentinel()); |
const int kNumArguments = 0; // no arguments. |
const Function& func = Function::Handle(Z, |
Resolver::ResolveStatic(field_owner, |
@@ -12029,7 +12030,7 @@ StaticGetterNode* Parser::RunStaticFieldInitializer(const Field& field, |
// generated AST is not deterministic. Therefore mark the function as |
// not optimizable. |
current_function().SetIsOptimizable(false); |
- field.set_value(Object::null_instance()); |
+ field.SetStaticFieldValue(Object::null_instance()); |
// It is a compile-time error if evaluation of a compile-time constant |
// would raise an exception. |
const String& field_name = String::Handle(Z, field.name()); |
@@ -12046,7 +12047,7 @@ StaticGetterNode* Parser::RunStaticFieldInitializer(const Field& field, |
Instance& instance = Instance::Handle(Z); |
instance ^= const_value.raw(); |
instance = TryCanonicalize(instance, field_ref_pos); |
- field.set_value(instance); |
+ field.SetStaticFieldValue(instance); |
return NULL; // Constant |
} else { |
return new(Z) StaticGetterNode( |
@@ -13910,9 +13911,9 @@ const Instance& Parser::EvaluateConstExpr(intptr_t expr_pos, AstNode* expr) { |
// We already checked that this field is const and has been |
// initialized. |
ASSERT(field.is_const()); |
- ASSERT(field.value() != Object::sentinel().raw()); |
- ASSERT(field.value() != Object::transition_sentinel().raw()); |
- return Instance::ZoneHandle(Z, field.value()); |
+ ASSERT(field.StaticFieldValue() != Object::sentinel().raw()); |
+ ASSERT(field.StaticFieldValue() != Object::transition_sentinel().raw()); |
+ return Instance::ZoneHandle(Z, field.StaticFieldValue()); |
} else { |
ASSERT(expr->EvalConstExpr() != NULL); |
ReturnNode* ret = new(Z) ReturnNode(expr->token_pos(), expr); |