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 3304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3315 if (!value->IsNumber() && !value->IsUndefined()) { | 3315 if (!value->IsNumber() && !value->IsUndefined()) { |
3316 ASSIGN_RETURN_ON_EXCEPTION(it->isolate(), to_assign, | 3316 ASSIGN_RETURN_ON_EXCEPTION(it->isolate(), to_assign, |
3317 Execution::ToNumber(it->isolate(), value), | 3317 Execution::ToNumber(it->isolate(), value), |
3318 Object); | 3318 Object); |
3319 // ToNumber above might modify the receiver, causing the cached | 3319 // ToNumber above might modify the receiver, causing the cached |
3320 // holder_map to mismatch the actual holder->map() after this point. | 3320 // holder_map to mismatch the actual holder->map() after this point. |
3321 // Reload the map to be in consistent state. Other cached state cannot | 3321 // Reload the map to be in consistent state. Other cached state cannot |
3322 // have been invalidated since typed array elements cannot be reconfigured | 3322 // have been invalidated since typed array elements cannot be reconfigured |
3323 // in any way. | 3323 // in any way. |
3324 it->ReloadHolderMap(); | 3324 it->ReloadHolderMap(); |
| 3325 |
| 3326 // We have to recheck the length. However, it can only change if the |
| 3327 // underlying buffer was neutered, so just check that. |
| 3328 if (Handle<JSArrayBufferView>::cast(receiver)->WasNeutered()) { |
| 3329 return value; |
| 3330 } |
3325 } | 3331 } |
3326 } | 3332 } |
3327 | 3333 |
3328 // Possibly migrate to the most up-to-date map that will be able to store | 3334 // Possibly migrate to the most up-to-date map that will be able to store |
3329 // |value| under it->name(). | 3335 // |value| under it->name(). |
3330 it->PrepareForDataProperty(to_assign); | 3336 it->PrepareForDataProperty(to_assign); |
3331 | 3337 |
3332 // Write the property value. | 3338 // Write the property value. |
3333 it->WriteDataValue(to_assign); | 3339 it->WriteDataValue(to_assign); |
3334 | 3340 |
(...skipping 12437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15772 if (cell->value() != *new_value) { | 15778 if (cell->value() != *new_value) { |
15773 cell->set_value(*new_value); | 15779 cell->set_value(*new_value); |
15774 Isolate* isolate = cell->GetIsolate(); | 15780 Isolate* isolate = cell->GetIsolate(); |
15775 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 15781 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
15776 isolate, DependentCode::kPropertyCellChangedGroup); | 15782 isolate, DependentCode::kPropertyCellChangedGroup); |
15777 } | 15783 } |
15778 } | 15784 } |
15779 | 15785 |
15780 } // namespace internal | 15786 } // namespace internal |
15781 } // namespace v8 | 15787 } // namespace v8 |
OLD | NEW |