| 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 <iomanip> | 5 #include <iomanip> |
| 6 #include <sstream> | 6 #include <sstream> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
| (...skipping 3274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3285 if (is_observed) maybe_old = it->GetDataValue(); | 3285 if (is_observed) maybe_old = it->GetDataValue(); |
| 3286 | 3286 |
| 3287 Handle<Object> to_assign = value; | 3287 Handle<Object> to_assign = value; |
| 3288 // Convert the incoming value to a number for storing into typed arrays. | 3288 // Convert the incoming value to a number for storing into typed arrays. |
| 3289 if (it->IsElement() && (receiver->HasExternalArrayElements() || | 3289 if (it->IsElement() && (receiver->HasExternalArrayElements() || |
| 3290 receiver->HasFixedTypedArrayElements())) { | 3290 receiver->HasFixedTypedArrayElements())) { |
| 3291 if (!value->IsNumber() && !value->IsUndefined()) { | 3291 if (!value->IsNumber() && !value->IsUndefined()) { |
| 3292 ASSIGN_RETURN_ON_EXCEPTION(it->isolate(), to_assign, | 3292 ASSIGN_RETURN_ON_EXCEPTION(it->isolate(), to_assign, |
| 3293 Execution::ToNumber(it->isolate(), value), | 3293 Execution::ToNumber(it->isolate(), value), |
| 3294 Object); | 3294 Object); |
| 3295 // ToNumber above might modify the receiver, causing the cached |
| 3296 // holder_map to mismatch the actual holder->map() after this point. |
| 3297 // Reload the map to be in consistent state. Other cached state cannot |
| 3298 // have been invalidated since typed array elements cannot be reconfigured |
| 3299 // in any way. |
| 3300 it->ReloadHolderMap(); |
| 3295 } | 3301 } |
| 3296 } | 3302 } |
| 3297 | 3303 |
| 3298 // Possibly migrate to the most up-to-date map that will be able to store | 3304 // Possibly migrate to the most up-to-date map that will be able to store |
| 3299 // |value| under it->name(). | 3305 // |value| under it->name(). |
| 3300 it->PrepareForDataProperty(to_assign); | 3306 it->PrepareForDataProperty(to_assign); |
| 3301 | 3307 |
| 3302 // Write the property value. | 3308 // Write the property value. |
| 3303 it->WriteDataValue(to_assign); | 3309 it->WriteDataValue(to_assign); |
| 3304 | 3310 |
| (...skipping 12821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16126 Handle<Object> new_value) { | 16132 Handle<Object> new_value) { |
| 16127 if (cell->value() != *new_value) { | 16133 if (cell->value() != *new_value) { |
| 16128 cell->set_value(*new_value); | 16134 cell->set_value(*new_value); |
| 16129 Isolate* isolate = cell->GetIsolate(); | 16135 Isolate* isolate = cell->GetIsolate(); |
| 16130 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 16136 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 16131 isolate, DependentCode::kPropertyCellChangedGroup); | 16137 isolate, DependentCode::kPropertyCellChangedGroup); |
| 16132 } | 16138 } |
| 16133 } | 16139 } |
| 16134 } // namespace internal | 16140 } // namespace internal |
| 16135 } // namespace v8 | 16141 } // namespace v8 |
| OLD | NEW |