OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 6599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6610 DCHECK(!isolate->has_pending_exception()); | 6610 DCHECK(!isolate->has_pending_exception()); |
6611 | 6611 |
6612 // 3. Let D be a newly created Property Descriptor with no fields. | 6612 // 3. Let D be a newly created Property Descriptor with no fields. |
6613 DCHECK(desc->is_empty()); | 6613 DCHECK(desc->is_empty()); |
6614 // 4. Let X be O's own property whose key is P. | 6614 // 4. Let X be O's own property whose key is P. |
6615 // 5. If X is a data property, then | 6615 // 5. If X is a data property, then |
6616 bool is_accessor_pair = it->state() == LookupIterator::ACCESSOR && | 6616 bool is_accessor_pair = it->state() == LookupIterator::ACCESSOR && |
6617 it->GetAccessors()->IsAccessorPair(); | 6617 it->GetAccessors()->IsAccessorPair(); |
6618 if (!is_accessor_pair) { | 6618 if (!is_accessor_pair) { |
6619 // 5a. Set D.[[Value]] to the value of X's [[Value]] attribute. | 6619 // 5a. Set D.[[Value]] to the value of X's [[Value]] attribute. |
6620 Handle<Object> value = JSObject::GetProperty(it).ToHandleChecked(); | 6620 Handle<Object> value; |
| 6621 if (!JSObject::GetProperty(it).ToHandle(&value)) { |
| 6622 DCHECK(isolate->has_pending_exception()); |
| 6623 return false; |
| 6624 } |
6621 desc->set_value(value); | 6625 desc->set_value(value); |
6622 // 5b. Set D.[[Writable]] to the value of X's [[Writable]] attribute | 6626 // 5b. Set D.[[Writable]] to the value of X's [[Writable]] attribute |
6623 desc->set_writable((attrs & READ_ONLY) == 0); | 6627 desc->set_writable((attrs & READ_ONLY) == 0); |
6624 } else { | 6628 } else { |
6625 // 6. Else X is an accessor property, so | 6629 // 6. Else X is an accessor property, so |
6626 Handle<AccessorPair> accessors = | 6630 Handle<AccessorPair> accessors = |
6627 Handle<AccessorPair>::cast(it->GetAccessors()); | 6631 Handle<AccessorPair>::cast(it->GetAccessors()); |
6628 // 6a. Set D.[[Get]] to the value of X's [[Get]] attribute. | 6632 // 6a. Set D.[[Get]] to the value of X's [[Get]] attribute. |
6629 desc->set_get(handle(accessors->GetComponent(ACCESSOR_GETTER), isolate)); | 6633 desc->set_get(handle(accessors->GetComponent(ACCESSOR_GETTER), isolate)); |
6630 // 6b. Set D.[[Set]] to the value of X's [[Set]] attribute. | 6634 // 6b. Set D.[[Set]] to the value of X's [[Set]] attribute. |
(...skipping 11241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17872 if (cell->value() != *new_value) { | 17876 if (cell->value() != *new_value) { |
17873 cell->set_value(*new_value); | 17877 cell->set_value(*new_value); |
17874 Isolate* isolate = cell->GetIsolate(); | 17878 Isolate* isolate = cell->GetIsolate(); |
17875 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 17879 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
17876 isolate, DependentCode::kPropertyCellChangedGroup); | 17880 isolate, DependentCode::kPropertyCellChangedGroup); |
17877 } | 17881 } |
17878 } | 17882 } |
17879 | 17883 |
17880 } // namespace internal | 17884 } // namespace internal |
17881 } // namespace v8 | 17885 } // namespace v8 |
OLD | NEW |