OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "src/objects/literal-objects.h" |
| 6 |
| 7 #include "src/factory.h" |
| 8 #include "src/isolate.h" |
| 9 #include "src/objects-inl.h" |
| 10 |
| 11 namespace v8 { |
| 12 namespace internal { |
| 13 |
| 14 Object* BoilerplateDescription::name(int index) const { |
| 15 // get() already checks for out of bounds access, but we do not want to allow |
| 16 // access to the last element, if it is the number of properties. |
| 17 DCHECK_NE(size(), index); |
| 18 return get(2 * index); |
| 19 } |
| 20 |
| 21 Object* BoilerplateDescription::value(int index) const { |
| 22 return get(2 * index + 1); |
| 23 } |
| 24 |
| 25 int BoilerplateDescription::size() const { |
| 26 DCHECK_EQ(0, (length() - (this->has_number_of_properties() ? 1 : 0)) % 2); |
| 27 // Rounding is intended. |
| 28 return length() / 2; |
| 29 } |
| 30 |
| 31 int BoilerplateDescription::backing_store_size() const { |
| 32 if (has_number_of_properties()) { |
| 33 // If present, the last entry contains the number of properties. |
| 34 return Smi::cast(this->get(length() - 1))->value(); |
| 35 } |
| 36 // If the number is not given explicitly, we assume there are no |
| 37 // properties with computed names. |
| 38 return size(); |
| 39 } |
| 40 |
| 41 void BoilerplateDescription::set_backing_store_size(Isolate* isolate, |
| 42 int backing_store_size) { |
| 43 DCHECK(has_number_of_properties()); |
| 44 DCHECK_NE(size(), backing_store_size); |
| 45 Handle<Object> backing_store_size_obj = |
| 46 isolate->factory()->NewNumberFromInt(backing_store_size); |
| 47 set(length() - 1, *backing_store_size_obj); |
| 48 } |
| 49 |
| 50 bool BoilerplateDescription::has_number_of_properties() const { |
| 51 return length() % 2 != 0; |
| 52 } |
| 53 |
| 54 } // namespace internal |
| 55 } // namespace v8 |
OLD | NEW |