OLD | NEW |
---|---|
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/become.h" | 10 #include "vm/become.h" |
(...skipping 4482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4493 } | 4493 } |
4494 | 4494 |
4495 | 4495 |
4496 void Class::InsertCanonicalNumber(Zone* zone, | 4496 void Class::InsertCanonicalNumber(Zone* zone, |
4497 intptr_t index, | 4497 intptr_t index, |
4498 const Number& constant) const { | 4498 const Number& constant) const { |
4499 // The constant needs to be added to the list. Grow the list if it is full. | 4499 // The constant needs to be added to the list. Grow the list if it is full. |
4500 Array& canonical_list = Array::Handle(zone, constants()); | 4500 Array& canonical_list = Array::Handle(zone, constants()); |
4501 const intptr_t list_len = canonical_list.Length(); | 4501 const intptr_t list_len = canonical_list.Length(); |
4502 if (index >= list_len) { | 4502 if (index >= list_len) { |
4503 const intptr_t new_length = (list_len == 0) ? 4 : list_len + 4; | 4503 const intptr_t new_length = list_len + 4 + (list_len >> 2); |
Vyacheslav Egorov (Google)
2017/04/10 10:59:28
This CL contains seemingly unrelated changes in th
erikcorry
2017/04/19 15:06:41
Done.
| |
4504 canonical_list ^= Array::Grow(canonical_list, new_length, Heap::kOld); | 4504 canonical_list ^= Array::Grow(canonical_list, new_length, Heap::kOld); |
4505 set_constants(canonical_list); | 4505 set_constants(canonical_list); |
4506 } | 4506 } |
4507 canonical_list.SetAt(index, constant); | 4507 canonical_list.SetAt(index, constant); |
4508 } | 4508 } |
4509 | 4509 |
4510 | 4510 |
4511 void Class::RehashConstants(Zone* zone) const { | 4511 void Class::RehashConstants(Zone* zone) const { |
4512 intptr_t cid = id(); | 4512 intptr_t cid = id(); |
4513 if ((cid == kMintCid) || (cid == kBigintCid) || (cid == kDoubleCid)) { | 4513 if ((cid == kMintCid) || (cid == kBigintCid) || (cid == kDoubleCid)) { |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5043 // Instantiation did not result in bound error. Canonicalize type arguments. | 5043 // Instantiation did not result in bound error. Canonicalize type arguments. |
5044 result = result.Canonicalize(); | 5044 result = result.Canonicalize(); |
5045 // InstantiateAndCanonicalizeFrom is not reentrant. It cannot have been called | 5045 // InstantiateAndCanonicalizeFrom is not reentrant. It cannot have been called |
5046 // indirectly, so the prior_instantiations array cannot have grown. | 5046 // indirectly, so the prior_instantiations array cannot have grown. |
5047 ASSERT(prior_instantiations.raw() == instantiations()); | 5047 ASSERT(prior_instantiations.raw() == instantiations()); |
5048 // Add instantiator and result to instantiations array. | 5048 // Add instantiator and result to instantiations array. |
5049 intptr_t length = prior_instantiations.Length(); | 5049 intptr_t length = prior_instantiations.Length(); |
5050 if ((index + 2) >= length) { | 5050 if ((index + 2) >= length) { |
5051 // Grow the instantiations array. | 5051 // Grow the instantiations array. |
5052 // The initial array is Object::zero_array() of length 1. | 5052 // The initial array is Object::zero_array() of length 1. |
5053 length = (length > 64) ? (length + 64) | 5053 length = length + 2 + (length >> 2); |
5054 : ((length == 1) ? 3 : ((length - 1) * 2 + 1)); | |
5055 prior_instantiations = | 5054 prior_instantiations = |
5056 Array::Grow(prior_instantiations, length, Heap::kOld); | 5055 Array::Grow(prior_instantiations, length, Heap::kOld); |
5057 set_instantiations(prior_instantiations); | 5056 set_instantiations(prior_instantiations); |
5058 ASSERT((index + 2) < length); | 5057 ASSERT((index + 2) < length); |
5059 } | 5058 } |
5060 prior_instantiations.SetAt(index, instantiator_type_arguments); | 5059 prior_instantiations.SetAt(index, instantiator_type_arguments); |
5061 prior_instantiations.SetAt(index + 1, result); | 5060 prior_instantiations.SetAt(index + 1, result); |
5062 prior_instantiations.SetAt(index + 2, | 5061 prior_instantiations.SetAt(index + 2, |
5063 Smi::Handle(Smi::New(StubCode::kNoInstantiator))); | 5062 Smi::Handle(Smi::New(StubCode::kNoInstantiator))); |
5064 return result.raw(); | 5063 return result.raw(); |
(...skipping 5672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
10737 StorePointer(&raw_ptr()->imports_, Object::empty_array().raw()); | 10736 StorePointer(&raw_ptr()->imports_, Object::empty_array().raw()); |
10738 StorePointer(&raw_ptr()->exports_, Object::empty_array().raw()); | 10737 StorePointer(&raw_ptr()->exports_, Object::empty_array().raw()); |
10739 StoreNonPointer(&raw_ptr()->num_imports_, 0); | 10738 StoreNonPointer(&raw_ptr()->num_imports_, 0); |
10740 } | 10739 } |
10741 | 10740 |
10742 | 10741 |
10743 void Library::AddImport(const Namespace& ns) const { | 10742 void Library::AddImport(const Namespace& ns) const { |
10744 Array& imports = Array::Handle(this->imports()); | 10743 Array& imports = Array::Handle(this->imports()); |
10745 intptr_t capacity = imports.Length(); | 10744 intptr_t capacity = imports.Length(); |
10746 if (num_imports() == capacity) { | 10745 if (num_imports() == capacity) { |
10747 capacity = capacity + kImportsCapacityIncrement; | 10746 capacity = capacity + kImportsCapacityIncrement + (capacity >> 2); |
10748 imports = Array::Grow(imports, capacity); | 10747 imports = Array::Grow(imports, capacity); |
10749 StorePointer(&raw_ptr()->imports_, imports.raw()); | 10748 StorePointer(&raw_ptr()->imports_, imports.raw()); |
10750 } | 10749 } |
10751 intptr_t index = num_imports(); | 10750 intptr_t index = num_imports(); |
10752 imports.SetAt(index, ns); | 10751 imports.SetAt(index, ns); |
10753 set_num_imports(index + 1); | 10752 set_num_imports(index + 1); |
10754 } | 10753 } |
10755 | 10754 |
10756 | 10755 |
10757 // Convenience function to determine whether the export list is | 10756 // Convenience function to determine whether the export list is |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11297 intptr_t num_current_imports = num_imports(); | 11296 intptr_t num_current_imports = num_imports(); |
11298 | 11297 |
11299 // Prefixes with deferred libraries can only contain one library. | 11298 // Prefixes with deferred libraries can only contain one library. |
11300 ASSERT((num_current_imports == 0) || !is_deferred_load()); | 11299 ASSERT((num_current_imports == 0) || !is_deferred_load()); |
11301 | 11300 |
11302 // The library needs to be added to the list. | 11301 // The library needs to be added to the list. |
11303 Array& imports = Array::Handle(this->imports()); | 11302 Array& imports = Array::Handle(this->imports()); |
11304 const intptr_t length = (imports.IsNull()) ? 0 : imports.Length(); | 11303 const intptr_t length = (imports.IsNull()) ? 0 : imports.Length(); |
11305 // Grow the list if it is full. | 11304 // Grow the list if it is full. |
11306 if (num_current_imports >= length) { | 11305 if (num_current_imports >= length) { |
11307 const intptr_t new_length = length + kIncrementSize; | 11306 const intptr_t new_length = length + kIncrementSize + (length >> 2); |
11308 imports = Array::Grow(imports, new_length, Heap::kOld); | 11307 imports = Array::Grow(imports, new_length, Heap::kOld); |
11309 set_imports(imports); | 11308 set_imports(imports); |
11310 } | 11309 } |
11311 imports.SetAt(num_current_imports, import); | 11310 imports.SetAt(num_current_imports, import); |
11312 set_num_imports(num_current_imports + 1); | 11311 set_num_imports(num_current_imports + 1); |
11313 } | 11312 } |
11314 | 11313 |
11315 | 11314 |
11316 RawObject* LibraryPrefix::LookupObject(const String& name) const { | 11315 RawObject* LibraryPrefix::LookupObject(const String& name) const { |
11317 if (!is_loaded() && !FLAG_load_deferred_eagerly) { | 11316 if (!is_loaded() && !FLAG_load_deferred_eagerly) { |
(...skipping 2428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
13746 const intptr_t len = NumberOfChecks(); | 13745 const intptr_t len = NumberOfChecks(); |
13747 for (intptr_t i = 1; i < len; i++) { | 13746 for (intptr_t i = 1; i < len; i++) { |
13748 if (IsUsedAt(i) && (GetTargetAt(i) != first_target.raw())) { | 13747 if (IsUsedAt(i) && (GetTargetAt(i) != first_target.raw())) { |
13749 return false; | 13748 return false; |
13750 } | 13749 } |
13751 } | 13750 } |
13752 return true; | 13751 return true; |
13753 } | 13752 } |
13754 | 13753 |
13755 | 13754 |
13756 bool ICData::HasOnlyDispatcherOrImplicitAccessorTargets() const { | |
13757 const intptr_t len = NumberOfChecks(); | |
13758 Function& target = Function::Handle(); | |
13759 for (intptr_t i = 0; i < len; i++) { | |
13760 target = GetTargetAt(i); | |
13761 if (!target.IsDispatcherOrImplicitAccessor()) { | |
13762 return false; | |
13763 } | |
13764 } | |
13765 return true; | |
13766 } | |
13767 | |
13768 | |
13769 void ICData::GetUsedCidsForTwoArgs(GrowableArray<intptr_t>* first, | 13755 void ICData::GetUsedCidsForTwoArgs(GrowableArray<intptr_t>* first, |
13770 GrowableArray<intptr_t>* second) const { | 13756 GrowableArray<intptr_t>* second) const { |
13771 ASSERT(NumArgsTested() == 2); | 13757 ASSERT(NumArgsTested() == 2); |
13772 first->Clear(); | 13758 first->Clear(); |
13773 second->Clear(); | 13759 second->Clear(); |
13774 GrowableArray<intptr_t> class_ids; | 13760 GrowableArray<intptr_t> class_ids; |
13775 const intptr_t len = NumberOfChecks(); | 13761 const intptr_t len = NumberOfChecks(); |
13776 for (intptr_t i = 0; i < len; i++) { | 13762 for (intptr_t i = 0; i < len; i++) { |
13777 if (GetCountAt(i) > 0) { | 13763 if (GetCountAt(i) > 0) { |
13778 GetClassIdsAt(i, &class_ids); | 13764 GetClassIdsAt(i, &class_ids); |
(...skipping 9300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
23079 return UserTag::null(); | 23065 return UserTag::null(); |
23080 } | 23066 } |
23081 | 23067 |
23082 | 23068 |
23083 const char* UserTag::ToCString() const { | 23069 const char* UserTag::ToCString() const { |
23084 const String& tag_label = String::Handle(label()); | 23070 const String& tag_label = String::Handle(label()); |
23085 return tag_label.ToCString(); | 23071 return tag_label.ToCString(); |
23086 } | 23072 } |
23087 | 23073 |
23088 } // namespace dart | 23074 } // namespace dart |
OLD | NEW |