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

Side by Side Diff: runtime/vm/object.cc

Issue 1289643005: Rename accessors of class Field to make it more apparent as to what is being accessed - static fiel… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: self-code-review Created 5 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 1492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 String& field_name = String::Handle(isolate); 1503 String& field_name = String::Handle(isolate);
1504 1504
1505 #define CLASS_LIST_WITH_NULL(V) \ 1505 #define CLASS_LIST_WITH_NULL(V) \
1506 V(Null) \ 1506 V(Null) \
1507 CLASS_LIST_NO_OBJECT(V) 1507 CLASS_LIST_NO_OBJECT(V)
1508 1508
1509 #define ADD_SET_FIELD(clazz) \ 1509 #define ADD_SET_FIELD(clazz) \
1510 field_name = Symbols::New("cid"#clazz); \ 1510 field_name = Symbols::New("cid"#clazz); \
1511 field = Field::New(field_name, true, false, true, false, cls, 0); \ 1511 field = Field::New(field_name, true, false, true, false, cls, 0); \
1512 value = Smi::New(k##clazz##Cid); \ 1512 value = Smi::New(k##clazz##Cid); \
1513 field.set_value(value); \ 1513 field.SetStaticFieldValue(value, true); \
1514 field.set_type(Type::Handle(Type::IntType())); \ 1514 field.set_type(Type::Handle(Type::IntType())); \
1515 cls.AddField(field); \ 1515 cls.AddField(field); \
1516 1516
1517 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) 1517 CLASS_LIST_WITH_NULL(ADD_SET_FIELD)
1518 #undef ADD_SET_FIELD 1518 #undef ADD_SET_FIELD
1519 1519
1520 isolate->object_store()->InitKnownObjects(); 1520 isolate->object_store()->InitKnownObjects();
1521 1521
1522 return Error::null(); 1522 return Error::null();
1523 #else // defined(DART_NO_SNAPSHOT). 1523 #else // defined(DART_NO_SNAPSHOT).
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 const intptr_t length = raw_ptr()->instance_size_in_words_; 2027 const intptr_t length = raw_ptr()->instance_size_in_words_;
2028 array = Array::New(length, Heap::kOld); 2028 array = Array::New(length, Heap::kOld);
2029 Class& cls = Class::Handle(this->raw()); 2029 Class& cls = Class::Handle(this->raw());
2030 Array& fields = Array::Handle(); 2030 Array& fields = Array::Handle();
2031 Field& f = Field::Handle(); 2031 Field& f = Field::Handle();
2032 while (!cls.IsNull()) { 2032 while (!cls.IsNull()) {
2033 fields = cls.fields(); 2033 fields = cls.fields();
2034 for (intptr_t i = 0; i < fields.Length(); ++i) { 2034 for (intptr_t i = 0; i < fields.Length(); ++i) {
2035 f ^= fields.At(i); 2035 f ^= fields.At(i);
2036 if (!f.is_static()) { 2036 if (!f.is_static()) {
2037 array.SetAt(f.Offset() >> kWordSizeLog2, f); 2037 array.SetAt(f.InstanceFieldOffset() >> kWordSizeLog2, f);
2038 } 2038 }
2039 } 2039 }
2040 cls = cls.SuperClass(); 2040 cls = cls.SuperClass();
2041 } 2041 }
2042 StorePointer(&raw_ptr()->offset_in_words_to_field_, array.raw()); 2042 StorePointer(&raw_ptr()->offset_in_words_to_field_, array.raw());
2043 } 2043 }
2044 return array.raw(); 2044 return array.raw();
2045 } 2045 }
2046 2046
2047 2047
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
2577 } 2577 }
2578 } 2578 }
2579 set_type_arguments_field_offset(type_args_field_offset); 2579 set_type_arguments_field_offset(type_args_field_offset);
2580 ASSERT(offset > 0); 2580 ASSERT(offset > 0);
2581 Field& field = Field::Handle(); 2581 Field& field = Field::Handle();
2582 intptr_t len = flds.Length(); 2582 intptr_t len = flds.Length();
2583 for (intptr_t i = 0; i < len; i++) { 2583 for (intptr_t i = 0; i < len; i++) {
2584 field ^= flds.At(i); 2584 field ^= flds.At(i);
2585 // Offset is computed only for instance fields. 2585 // Offset is computed only for instance fields.
2586 if (!field.is_static()) { 2586 if (!field.is_static()) {
2587 ASSERT(field.Offset() == 0); 2587 ASSERT(field.InstanceFieldOffset() == 0);
2588 field.SetOffset(offset); 2588 field.SetInstanceFieldOffset(offset);
2589 offset += kWordSize; 2589 offset += kWordSize;
2590 } 2590 }
2591 } 2591 }
2592 set_instance_size(RoundedAllocationSize(offset)); 2592 set_instance_size(RoundedAllocationSize(offset));
2593 set_next_field_offset(offset); 2593 set_next_field_offset(offset);
2594 } 2594 }
2595 2595
2596 2596
2597 RawFunction* Class::GetInvocationDispatcher(const String& target_name, 2597 RawFunction* Class::GetInvocationDispatcher(const String& target_name,
2598 const Array& args_desc, 2598 const Array& args_desc,
(...skipping 4640 matching lines...) Expand 10 before | Expand all | Expand 10 after
7239 RawClass* Field::origin() const { 7239 RawClass* Field::origin() const {
7240 const Object& obj = Object::Handle(raw_ptr()->owner_); 7240 const Object& obj = Object::Handle(raw_ptr()->owner_);
7241 if (obj.IsClass()) { 7241 if (obj.IsClass()) {
7242 return Class::Cast(obj).raw(); 7242 return Class::Cast(obj).raw();
7243 } 7243 }
7244 ASSERT(obj.IsPatchClass()); 7244 ASSERT(obj.IsPatchClass());
7245 return PatchClass::Cast(obj).source_class(); 7245 return PatchClass::Cast(obj).source_class();
7246 } 7246 }
7247 7247
7248 7248
7249 RawInstance* Field::value() const { 7249 RawInstance* Field::StaticFieldValue() const {
7250 ASSERT(is_static()); // Valid only for static dart fields. 7250 ASSERT(is_static()); // Valid only for static dart fields.
7251 return raw_ptr()->value_; 7251 return raw_ptr()->value_.static_value_;
7252 } 7252 }
7253 7253
7254 7254
7255 void Field::set_value(const Instance& value) const { 7255 void Field::SetStaticFieldValue(const Instance& value,
7256 bool save_initial_value) const {
7256 ASSERT(is_static()); // Valid only for static dart fields. 7257 ASSERT(is_static()); // Valid only for static dart fields.
7257 StorePointer(&raw_ptr()->value_, value.raw()); 7258 StorePointer(&raw_ptr()->value_.static_value_, value.raw());
7259 if (save_initial_value) {
7260 StorePointer(&raw_ptr()->initializer_.saved_initial_value_, value.raw());
7261 }
7258 } 7262 }
7259 7263
7260 7264
7261 void Field::set_type(const AbstractType& value) const { 7265 void Field::set_type(const AbstractType& value) const {
7262 ASSERT(!value.IsNull()); 7266 ASSERT(!value.IsNull());
7263 StorePointer(&raw_ptr()->type_, value.raw()); 7267 StorePointer(&raw_ptr()->type_, value.raw());
7264 } 7268 }
7265 7269
7266 7270
7267 RawField* Field::New() { 7271 RawField* Field::New() {
7268 ASSERT(Object::field_class() != Class::null()); 7272 ASSERT(Object::field_class() != Class::null());
7269 RawObject* raw = Object::Allocate(Field::kClassId, 7273 RawObject* raw = Object::Allocate(Field::kClassId,
7270 Field::InstanceSize(), 7274 Field::InstanceSize(),
7271 Heap::kOld); 7275 Heap::kOld);
7272 return reinterpret_cast<RawField*>(raw); 7276 return reinterpret_cast<RawField*>(raw);
7273 } 7277 }
7274 7278
7275 7279
7276 RawField* Field::New(const String& name, 7280 RawField* Field::New(const String& name,
7277 bool is_static, 7281 bool is_static,
7278 bool is_final, 7282 bool is_final,
7279 bool is_const, 7283 bool is_const,
7280 bool is_reflectable, 7284 bool is_reflectable,
7281 const Class& owner, 7285 const Class& owner,
7282 intptr_t token_pos) { 7286 intptr_t token_pos) {
7283 ASSERT(!owner.IsNull()); 7287 ASSERT(!owner.IsNull());
7284 const Field& result = Field::Handle(Field::New()); 7288 const Field& result = Field::Handle(Field::New());
7285 result.set_name(name); 7289 result.set_name(name);
7286 result.set_is_static(is_static); 7290 result.set_is_static(is_static);
7287 if (is_static) { 7291 if (!is_static) {
7288 result.set_value(Object::null_instance()); 7292 result.SetInstanceFieldOffset(0);
7289 } else {
7290 result.SetOffset(0);
7291 } 7293 }
7292 result.set_is_final(is_final); 7294 result.set_is_final(is_final);
7293 result.set_is_const(is_const); 7295 result.set_is_const(is_const);
7294 result.set_is_reflectable(is_reflectable); 7296 result.set_is_reflectable(is_reflectable);
7295 result.set_is_double_initialized(false); 7297 result.set_is_double_initialized(false);
7296 result.set_owner(owner); 7298 result.set_owner(owner);
7297 result.set_token_pos(token_pos); 7299 result.set_token_pos(token_pos);
7298 result.set_has_initializer(false); 7300 result.set_has_initializer(false);
7299 result.set_is_unboxing_candidate(true); 7301 result.set_is_unboxing_candidate(true);
7300 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); 7302 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid);
(...skipping 11 matching lines...) Expand all
7312 7314
7313 7315
7314 RawField* Field::Clone(const Class& new_owner) const { 7316 RawField* Field::Clone(const Class& new_owner) const {
7315 Field& clone = Field::Handle(); 7317 Field& clone = Field::Handle();
7316 clone ^= Object::Clone(*this, Heap::kOld); 7318 clone ^= Object::Clone(*this, Heap::kOld);
7317 const Class& owner = Class::Handle(this->owner()); 7319 const Class& owner = Class::Handle(this->owner());
7318 const PatchClass& clone_owner = 7320 const PatchClass& clone_owner =
7319 PatchClass::Handle(PatchClass::New(new_owner, owner)); 7321 PatchClass::Handle(PatchClass::New(new_owner, owner));
7320 clone.set_owner(clone_owner); 7322 clone.set_owner(clone_owner);
7321 if (!clone.is_static()) { 7323 if (!clone.is_static()) {
7322 clone.SetOffset(0); 7324 clone.SetInstanceFieldOffset(0);
7323 } 7325 }
7324 if (new_owner.NumTypeParameters() > 0) { 7326 if (new_owner.NumTypeParameters() > 0) {
7325 // Adjust the field type to refer to type parameters of the new owner. 7327 // Adjust the field type to refer to type parameters of the new owner.
7326 AbstractType& type = AbstractType::Handle(clone.type()); 7328 AbstractType& type = AbstractType::Handle(clone.type());
7327 type ^= type.CloneUninstantiated(new_owner); 7329 type ^= type.CloneUninstantiated(new_owner);
7328 clone.set_type(type); 7330 clone.set_type(type);
7329 } 7331 }
7330 return clone.raw(); 7332 return clone.raw();
7331 } 7333 }
7332 7334
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
7421 7423
7422 AbstractType& declared_type = AbstractType::Handle(type()); 7424 AbstractType& declared_type = AbstractType::Handle(type());
7423 jsobj.AddProperty("declaredType", declared_type); 7425 jsobj.AddProperty("declaredType", declared_type);
7424 jsobj.AddProperty("static", is_static()); 7426 jsobj.AddProperty("static", is_static());
7425 jsobj.AddProperty("final", is_final()); 7427 jsobj.AddProperty("final", is_final());
7426 jsobj.AddProperty("const", is_const()); 7428 jsobj.AddProperty("const", is_const());
7427 if (ref) { 7429 if (ref) {
7428 return; 7430 return;
7429 } 7431 }
7430 if (is_static()) { 7432 if (is_static()) {
7431 const Instance& valueObj = Instance::Handle(value()); 7433 const Instance& valueObj = Instance::Handle(StaticFieldValue());
7432 jsobj.AddProperty("staticValue", valueObj); 7434 jsobj.AddProperty("staticValue", valueObj);
7433 } 7435 }
7434 7436
7435 jsobj.AddProperty("_guardNullable", is_nullable()); 7437 jsobj.AddProperty("_guardNullable", is_nullable());
7436 if (guarded_cid() == kIllegalCid) { 7438 if (guarded_cid() == kIllegalCid) {
7437 jsobj.AddProperty("_guardClass", "unknown"); 7439 jsobj.AddProperty("_guardClass", "unknown");
7438 } else if (guarded_cid() == kDynamicCid) { 7440 } else if (guarded_cid() == kDynamicCid) {
7439 jsobj.AddProperty("_guardClass", "dynamic"); 7441 jsobj.AddProperty("_guardClass", "dynamic");
7440 } else { 7442 } else {
7441 ClassTable* table = Isolate::Current()->class_table(); 7443 ClassTable* table = Isolate::Current()->class_table();
(...skipping 25 matching lines...) Expand all
7467 String& closure_name = String::Handle(this->name()); 7469 String& closure_name = String::Handle(this->name());
7468 closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name); 7470 closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name);
7469 if (make_setter) { 7471 if (make_setter) {
7470 closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name); 7472 closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name);
7471 } 7473 }
7472 7474
7473 Field& closure_field = Field::Handle(); 7475 Field& closure_field = Field::Handle();
7474 closure_field = field_owner.LookupStaticField(closure_name); 7476 closure_field = field_owner.LookupStaticField(closure_name);
7475 if (!closure_field.IsNull()) { 7477 if (!closure_field.IsNull()) {
7476 ASSERT(closure_field.is_static()); 7478 ASSERT(closure_field.is_static());
7477 const Instance& closure = Instance::Handle(closure_field.value()); 7479 const Instance& closure =
7480 Instance::Handle(closure_field.StaticFieldValue());
7478 ASSERT(!closure.IsNull()); 7481 ASSERT(!closure.IsNull());
7479 ASSERT(closure.IsClosure()); 7482 ASSERT(closure.IsClosure());
7480 return closure.raw(); 7483 return closure.raw();
7481 } 7484 }
7482 7485
7483 // This is the first time a closure for this field is requested. 7486 // This is the first time a closure for this field is requested.
7484 // Create the closure and a new static field in which it is stored. 7487 // Create the closure and a new static field in which it is stored.
7485 const char* field_name = String::Handle(name()).ToCString(); 7488 const char* field_name = String::Handle(name()).ToCString();
7486 String& expr_src = String::Handle(); 7489 String& expr_src = String::Handle();
7487 if (make_setter) { 7490 if (make_setter) {
(...skipping 12 matching lines...) Expand all
7500 // the result here, since Object::Clone() is a private method. 7503 // the result here, since Object::Clone() is a private method.
7501 result = Object::Clone(result, Heap::kOld); 7504 result = Object::Clone(result, Heap::kOld);
7502 7505
7503 closure_field = Field::New(closure_name, 7506 closure_field = Field::New(closure_name,
7504 true, // is_static 7507 true, // is_static
7505 true, // is_final 7508 true, // is_final
7506 true, // is_const 7509 true, // is_const
7507 false, // is_reflectable 7510 false, // is_reflectable
7508 field_owner, 7511 field_owner,
7509 this->token_pos()); 7512 this->token_pos());
7510 closure_field.set_value(Instance::Cast(result)); 7513 closure_field.SetStaticFieldValue(Instance::Cast(result), true);
7511 closure_field.set_type(Type::Handle(Type::DynamicType())); 7514 closure_field.set_type(Type::Handle(Type::DynamicType()));
7512 field_owner.AddField(closure_field); 7515 field_owner.AddField(closure_field);
7513 7516
7514 return Instance::RawCast(result.raw()); 7517 return Instance::RawCast(result.raw());
7515 } 7518 }
7516 7519
7517 7520
7518 RawInstance* Field::GetterClosure() const { 7521 RawInstance* Field::GetterClosure() const {
7519 return AccessorClosure(false); 7522 return AccessorClosure(false);
7520 } 7523 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
7576 } 7579 }
7577 7580
7578 7581
7579 void Field::DeoptimizeDependentCode() const { 7582 void Field::DeoptimizeDependentCode() const {
7580 FieldDependentArray a(*this); 7583 FieldDependentArray a(*this);
7581 a.DisableCode(); 7584 a.DisableCode();
7582 } 7585 }
7583 7586
7584 7587
7585 bool Field::IsUninitialized() const { 7588 bool Field::IsUninitialized() const {
7586 const Instance& value = Instance::Handle(raw_ptr()->value_); 7589 const Instance& value = Instance::Handle(raw_ptr()->value_.static_value_);
7587 ASSERT(value.raw() != Object::transition_sentinel().raw()); 7590 ASSERT(value.raw() != Object::transition_sentinel().raw());
7588 return value.raw() == Object::sentinel().raw(); 7591 return value.raw() == Object::sentinel().raw();
7589 } 7592 }
7590 7593
7591 7594
7592 void Field::set_initializer(const Function& initializer) const { 7595 void Field::SetPrecompiledInitializer(const Function& initializer) const {
7593 StorePointer(&raw_ptr()->initializer_, initializer.raw()); 7596 StorePointer(&raw_ptr()->initializer_.precompiled_initializer_,
7597 initializer.raw());
7598 }
7599
7600
7601 bool Field::HasPrecompiledInitializer() const {
7602 return raw_ptr()->initializer_.value_->IsFunction();
7603 }
7604
7605
7606 void Field::SetSavedInitialStaticValue(const Instance& value) const {
7607 StorePointer(&raw_ptr()->initializer_.saved_initial_value_, value.raw());
7594 } 7608 }
7595 7609
7596 7610
7597 void Field::EvaluateInitializer() const { 7611 void Field::EvaluateInitializer() const {
7598 ASSERT(is_static()); 7612 ASSERT(is_static());
7599 if (value() == Object::sentinel().raw()) { 7613 if (StaticFieldValue() == Object::sentinel().raw()) {
7600 set_value(Object::transition_sentinel()); 7614 SetStaticFieldValue(Object::transition_sentinel());
7601 Object& value = Object::Handle(Compiler::EvaluateStaticInitializer(*this)); 7615 Object& value = Object::Handle(Compiler::EvaluateStaticInitializer(*this));
7602 if (value.IsError()) { 7616 if (value.IsError()) {
7603 set_value(Object::null_instance()); 7617 SetStaticFieldValue(Object::null_instance());
7604 Exceptions::PropagateError(Error::Cast(value)); 7618 Exceptions::PropagateError(Error::Cast(value));
7605 UNREACHABLE(); 7619 UNREACHABLE();
7606 } 7620 }
7607 ASSERT(value.IsNull() || value.IsInstance()); 7621 ASSERT(value.IsNull() || value.IsInstance());
7608 set_value(value.IsNull() ? Instance::null_instance() 7622 SetStaticFieldValue(value.IsNull() ? Instance::null_instance()
7609 : Instance::Cast(value)); 7623 : Instance::Cast(value));
7610 return; 7624 return;
7611 } else if (value() == Object::transition_sentinel().raw()) { 7625 } else if (StaticFieldValue() == Object::transition_sentinel().raw()) {
7612 set_value(Object::null_instance()); 7626 SetStaticFieldValue(Object::null_instance());
7613 const Array& ctor_args = Array::Handle(Array::New(1)); 7627 const Array& ctor_args = Array::Handle(Array::New(1));
7614 const String& field_name = String::Handle(name()); 7628 const String& field_name = String::Handle(name());
7615 ctor_args.SetAt(0, field_name); 7629 ctor_args.SetAt(0, field_name);
7616 Exceptions::ThrowByType(Exceptions::kCyclicInitializationError, ctor_args); 7630 Exceptions::ThrowByType(Exceptions::kCyclicInitializationError, ctor_args);
7617 UNREACHABLE(); 7631 UNREACHABLE();
7618 return; 7632 return;
7619 } 7633 }
7620 UNREACHABLE(); 7634 UNREACHABLE();
7621 } 7635 }
7622 7636
(...skipping 1468 matching lines...) Expand 10 before | Expand all | Expand 10 after
9091 intptr_t token_pos) const { 9105 intptr_t token_pos) const {
9092 const String& metaname = String::Handle(Symbols::New(name)); 9106 const String& metaname = String::Handle(Symbols::New(name));
9093 Field& field = Field::Handle(Field::New(metaname, 9107 Field& field = Field::Handle(Field::New(metaname,
9094 true, // is_static 9108 true, // is_static
9095 false, // is_final 9109 false, // is_final
9096 false, // is_const 9110 false, // is_const
9097 false, // is_reflectable 9111 false, // is_reflectable
9098 cls, 9112 cls,
9099 token_pos)); 9113 token_pos));
9100 field.set_type(Type::Handle(Type::DynamicType())); 9114 field.set_type(Type::Handle(Type::DynamicType()));
9101 field.set_value(Array::empty_array()); 9115 field.SetStaticFieldValue(Array::empty_array(), true);
9102 GrowableObjectArray& metadata = 9116 GrowableObjectArray& metadata =
9103 GrowableObjectArray::Handle(this->metadata()); 9117 GrowableObjectArray::Handle(this->metadata());
9104 metadata.Add(field, Heap::kOld); 9118 metadata.Add(field, Heap::kOld);
9105 cls.AddField(field); 9119 cls.AddField(field);
9106 } 9120 }
9107 9121
9108 9122
9109 void Library::AddClassMetadata(const Class& cls, 9123 void Library::AddClassMetadata(const Class& cls,
9110 const Class& toplevel_class, 9124 const Class& toplevel_class,
9111 intptr_t token_pos) const { 9125 intptr_t token_pos) const {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
9185 !obj.IsLibrary() && !obj.IsTypeParameter()) { 9199 !obj.IsLibrary() && !obj.IsTypeParameter()) {
9186 return Object::null(); 9200 return Object::null();
9187 } 9201 }
9188 const String& metaname = String::Handle(MakeMetadataName(obj)); 9202 const String& metaname = String::Handle(MakeMetadataName(obj));
9189 Field& field = Field::Handle(GetMetadataField(metaname)); 9203 Field& field = Field::Handle(GetMetadataField(metaname));
9190 if (field.IsNull()) { 9204 if (field.IsNull()) {
9191 // There is no metadata for this object. 9205 // There is no metadata for this object.
9192 return Object::empty_array().raw(); 9206 return Object::empty_array().raw();
9193 } 9207 }
9194 Object& metadata = Object::Handle(); 9208 Object& metadata = Object::Handle();
9195 metadata = field.value(); 9209 metadata = field.StaticFieldValue();
9196 if (field.value() == Object::empty_array().raw()) { 9210 if (field.StaticFieldValue() == Object::empty_array().raw()) {
9197 metadata = Parser::ParseMetadata(Class::Handle(field.owner()), 9211 metadata = Parser::ParseMetadata(Class::Handle(field.owner()),
9198 field.token_pos()); 9212 field.token_pos());
9199 if (metadata.IsArray()) { 9213 if (metadata.IsArray()) {
9200 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); 9214 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw());
9201 field.set_value(Array::Cast(metadata)); 9215 field.SetStaticFieldValue(Array::Cast(metadata), true);
9202 } 9216 }
9203 } 9217 }
9204 return metadata.raw(); 9218 return metadata.raw();
9205 } 9219 }
9206 9220
9207 9221
9208 static bool ShouldBePrivate(const String& name) { 9222 static bool ShouldBePrivate(const String& name) {
9209 return 9223 return
9210 (name.Length() >= 1 && 9224 (name.Length() >= 1 &&
9211 name.CharAt(0) == '_') || 9225 name.CharAt(0) == '_') ||
(...skipping 1387 matching lines...) Expand 10 before | Expand all | Expand 10 after
10599 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { 10613 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) {
10600 ASSERT(Field::Handle(metadata_field()).IsNull()); 10614 ASSERT(Field::Handle(metadata_field()).IsNull());
10601 Field& field = Field::Handle(Field::New(Symbols::TopLevel(), 10615 Field& field = Field::Handle(Field::New(Symbols::TopLevel(),
10602 true, // is_static 10616 true, // is_static
10603 false, // is_final 10617 false, // is_final
10604 false, // is_const 10618 false, // is_const
10605 false, // is_reflectable 10619 false, // is_reflectable
10606 owner_class, 10620 owner_class,
10607 token_pos)); 10621 token_pos));
10608 field.set_type(Type::Handle(Type::DynamicType())); 10622 field.set_type(Type::Handle(Type::DynamicType()));
10609 field.set_value(Array::empty_array()); 10623 field.SetStaticFieldValue(Array::empty_array(), true);
10610 set_metadata_field(field); 10624 set_metadata_field(field);
10611 owner_class.AddField(field); 10625 owner_class.AddField(field);
10612 } 10626 }
10613 10627
10614 10628
10615 RawObject* Namespace::GetMetadata() const { 10629 RawObject* Namespace::GetMetadata() const {
10616 Field& field = Field::Handle(metadata_field()); 10630 Field& field = Field::Handle(metadata_field());
10617 if (field.IsNull()) { 10631 if (field.IsNull()) {
10618 // There is no metadata for this object. 10632 // There is no metadata for this object.
10619 return Object::empty_array().raw(); 10633 return Object::empty_array().raw();
10620 } 10634 }
10621 Object& metadata = Object::Handle(); 10635 Object& metadata = Object::Handle();
10622 metadata = field.value(); 10636 metadata = field.StaticFieldValue();
10623 if (field.value() == Object::empty_array().raw()) { 10637 if (field.StaticFieldValue() == Object::empty_array().raw()) {
10624 metadata = Parser::ParseMetadata(Class::Handle(field.owner()), 10638 metadata = Parser::ParseMetadata(Class::Handle(field.owner()),
10625 field.token_pos()); 10639 field.token_pos());
10626 if (metadata.IsArray()) { 10640 if (metadata.IsArray()) {
10627 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); 10641 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw());
10628 field.set_value(Array::Cast(metadata)); 10642 field.SetStaticFieldValue(Array::Cast(metadata), true);
10629 } 10643 }
10630 } 10644 }
10631 return metadata.raw(); 10645 return metadata.raw();
10632 } 10646 }
10633 10647
10634 10648
10635 const char* Namespace::ToCString() const { 10649 const char* Namespace::ToCString() const {
10636 const char* kFormat = "Namespace for library '%s'"; 10650 const char* kFormat = "Namespace for library '%s'";
10637 const Library& lib = Library::Handle(library()); 10651 const Library& lib = Library::Handle(library());
10638 intptr_t len = OS::SNPrint(NULL, 0, kFormat, lib.ToCString()) + 1; 10652 intptr_t len = OS::SNPrint(NULL, 0, kFormat, lib.ToCString()) + 1;
(...skipping 10851 matching lines...) Expand 10 before | Expand all | Expand 10 after
21490 return tag_label.ToCString(); 21504 return tag_label.ToCString();
21491 } 21505 }
21492 21506
21493 21507
21494 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 21508 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
21495 Instance::PrintJSONImpl(stream, ref); 21509 Instance::PrintJSONImpl(stream, ref);
21496 } 21510 }
21497 21511
21498 21512
21499 } // namespace dart 21513 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698