| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/objects.h" | 5 #include "src/objects.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <iomanip> | 8 #include <iomanip> |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 9986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9997 descriptors->CopyFrom(i, *desc); | 9997 descriptors->CopyFrom(i, *desc); |
| 9998 } | 9998 } |
| 9999 } | 9999 } |
| 10000 | 10000 |
| 10001 if (desc->number_of_descriptors() != enumeration_index) descriptors->Sort(); | 10001 if (desc->number_of_descriptors() != enumeration_index) descriptors->Sort(); |
| 10002 | 10002 |
| 10003 return descriptors; | 10003 return descriptors; |
| 10004 } | 10004 } |
| 10005 | 10005 |
| 10006 | 10006 |
| 10007 bool DescriptorArray::IsEqualUpTo(DescriptorArray* desc, int nof_descriptors) { |
| 10008 for (int i = 0; i < nof_descriptors; i++) { |
| 10009 if (GetKey(i) != desc->GetKey(i) || GetValue(i) != desc->GetValue(i)) { |
| 10010 return false; |
| 10011 } |
| 10012 PropertyDetails details = GetDetails(i); |
| 10013 PropertyDetails other_details = desc->GetDetails(i); |
| 10014 if (details.type() != other_details.type() || |
| 10015 !details.representation().Equals(other_details.representation())) { |
| 10016 return false; |
| 10017 } |
| 10018 } |
| 10019 return true; |
| 10020 } |
| 10021 |
| 10022 |
| 10007 Handle<Map> Map::CopyReplaceDescriptor(Handle<Map> map, | 10023 Handle<Map> Map::CopyReplaceDescriptor(Handle<Map> map, |
| 10008 Handle<DescriptorArray> descriptors, | 10024 Handle<DescriptorArray> descriptors, |
| 10009 Descriptor* descriptor, | 10025 Descriptor* descriptor, |
| 10010 int insertion_index, | 10026 int insertion_index, |
| 10011 TransitionFlag flag) { | 10027 TransitionFlag flag) { |
| 10012 // Ensure the key is unique. | 10028 // Ensure the key is unique. |
| 10013 descriptor->KeyToUniqueName(); | 10029 descriptor->KeyToUniqueName(); |
| 10014 | 10030 |
| 10015 Handle<Name> key = descriptor->GetKey(); | 10031 Handle<Name> key = descriptor->GetKey(); |
| 10016 DCHECK(*key == descriptors->GetKey(insertion_index)); | 10032 DCHECK(*key == descriptors->GetKey(insertion_index)); |
| (...skipping 2156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12173 first->bit_field() == second->bit_field() && | 12189 first->bit_field() == second->bit_field() && |
| 12174 first->is_extensible() == second->is_extensible() && | 12190 first->is_extensible() == second->is_extensible() && |
| 12175 first->is_strong() == second->is_strong() && | 12191 first->is_strong() == second->is_strong() && |
| 12176 first->is_hidden_prototype() == second->is_hidden_prototype(); | 12192 first->is_hidden_prototype() == second->is_hidden_prototype(); |
| 12177 } | 12193 } |
| 12178 | 12194 |
| 12179 } // namespace | 12195 } // namespace |
| 12180 | 12196 |
| 12181 | 12197 |
| 12182 bool Map::EquivalentToForTransition(Map* other) { | 12198 bool Map::EquivalentToForTransition(Map* other) { |
| 12183 return CheckEquivalent(this, other); | 12199 if (!CheckEquivalent(this, other)) return false; |
| 12200 if (instance_type() == JS_FUNCTION_TYPE) { |
| 12201 // JSFunctions require more checks to ensure that sloppy function is |
| 12202 // not equvalent to strict function. |
| 12203 int nof = Min(NumberOfOwnDescriptors(), other->NumberOfOwnDescriptors()); |
| 12204 return instance_descriptors()->IsEqualUpTo(other->instance_descriptors(), |
| 12205 nof); |
| 12206 } |
| 12207 return true; |
| 12184 } | 12208 } |
| 12185 | 12209 |
| 12186 | 12210 |
| 12187 bool Map::EquivalentToForNormalization(Map* other, | 12211 bool Map::EquivalentToForNormalization(Map* other, |
| 12188 PropertyNormalizationMode mode) { | 12212 PropertyNormalizationMode mode) { |
| 12189 int properties = | 12213 int properties = |
| 12190 mode == CLEAR_INOBJECT_PROPERTIES ? 0 : other->GetInObjectProperties(); | 12214 mode == CLEAR_INOBJECT_PROPERTIES ? 0 : other->GetInObjectProperties(); |
| 12191 return CheckEquivalent(this, other) && bit_field2() == other->bit_field2() && | 12215 return CheckEquivalent(this, other) && bit_field2() == other->bit_field2() && |
| 12192 GetInObjectProperties() == properties; | 12216 GetInObjectProperties() == properties; |
| 12193 } | 12217 } |
| (...skipping 7414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19608 if (cell->value() != *new_value) { | 19632 if (cell->value() != *new_value) { |
| 19609 cell->set_value(*new_value); | 19633 cell->set_value(*new_value); |
| 19610 Isolate* isolate = cell->GetIsolate(); | 19634 Isolate* isolate = cell->GetIsolate(); |
| 19611 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19635 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 19612 isolate, DependentCode::kPropertyCellChangedGroup); | 19636 isolate, DependentCode::kPropertyCellChangedGroup); |
| 19613 } | 19637 } |
| 19614 } | 19638 } |
| 19615 | 19639 |
| 19616 } // namespace internal | 19640 } // namespace internal |
| 19617 } // namespace v8 | 19641 } // namespace v8 |
| OLD | NEW |