Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(985)

Side by Side Diff: src/objects.cc

Issue 1413723011: Fix accessor map transitions vs. Object.defineProperty (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: add testcase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 6126 matching lines...) Expand 10 before | Expand all | Expand 10 after
6137 // of object O whose [[Get]], [[Set]], [[Enumerable]] and 6137 // of object O whose [[Get]], [[Set]], [[Enumerable]] and
6138 // [[Configurable]] attribute values are described by Desc. If the value 6138 // [[Configurable]] attribute values are described by Desc. If the value
6139 // of an attribute field of Desc is absent, the attribute of the newly 6139 // of an attribute field of Desc is absent, the attribute of the newly
6140 // created property is set to its default value. 6140 // created property is set to its default value.
6141 if (!object->IsUndefined()) { 6141 if (!object->IsUndefined()) {
6142 if (!desc->has_enumerable()) desc->set_enumerable(false); 6142 if (!desc->has_enumerable()) desc->set_enumerable(false);
6143 if (!desc->has_configurable()) desc->set_configurable(false); 6143 if (!desc->has_configurable()) desc->set_configurable(false);
6144 Handle<Object> getter( 6144 Handle<Object> getter(
6145 desc->has_get() 6145 desc->has_get()
6146 ? desc->get() 6146 ? desc->get()
6147 : Handle<Object>::cast(isolate->factory()->undefined_value())); 6147 : Handle<Object>::cast(isolate->factory()->null_value()));
6148 Handle<Object> setter( 6148 Handle<Object> setter(
6149 desc->has_set() 6149 desc->has_set()
6150 ? desc->set() 6150 ? desc->set()
6151 : Handle<Object>::cast(isolate->factory()->undefined_value())); 6151 : Handle<Object>::cast(isolate->factory()->null_value()));
6152 MaybeHandle<Object> result = 6152 MaybeHandle<Object> result =
6153 JSObject::DefineAccessor(it, getter, setter, desc->ToAttributes()); 6153 JSObject::DefineAccessor(it, getter, setter, desc->ToAttributes());
6154 if (result.is_null()) return false; 6154 if (result.is_null()) return false;
6155 } 6155 }
6156 } 6156 }
6157 // 2e. Return true. 6157 // 2e. Return true.
6158 return true; 6158 return true;
6159 } 6159 }
6160 // 3. Return true, if every field in Desc is absent. 6160 // 3. Return true, if every field in Desc is absent.
6161 // 4. Return true, if every field in Desc also occurs in current and the 6161 // 4. Return true, if every field in Desc also occurs in current and the
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
6334 MaybeHandle<Object> result = JSObject::DefineOwnPropertyIgnoreAttributes( 6334 MaybeHandle<Object> result = JSObject::DefineOwnPropertyIgnoreAttributes(
6335 it, value, attrs, JSObject::DONT_FORCE_FIELD); 6335 it, value, attrs, JSObject::DONT_FORCE_FIELD);
6336 if (result.is_null()) return false; 6336 if (result.is_null()) return false;
6337 } else { 6337 } else {
6338 DCHECK(desc_is_accessor_descriptor || 6338 DCHECK(desc_is_accessor_descriptor ||
6339 (desc_is_generic_descriptor && 6339 (desc_is_generic_descriptor &&
6340 PropertyDescriptor::IsAccessorDescriptor(&current))); 6340 PropertyDescriptor::IsAccessorDescriptor(&current)));
6341 Handle<Object> getter( 6341 Handle<Object> getter(
6342 desc->has_get() 6342 desc->has_get()
6343 ? desc->get() 6343 ? desc->get()
6344 : current.has_get() ? current.get() 6344 : current.has_get()
6345 : Handle<Object>::cast( 6345 ? current.get()
6346 isolate->factory()->undefined_value())); 6346 : Handle<Object>::cast(isolate->factory()->null_value()));
6347 Handle<Object> setter( 6347 Handle<Object> setter(
6348 desc->has_set() 6348 desc->has_set()
6349 ? desc->set() 6349 ? desc->set()
6350 : current.has_set() ? current.set() 6350 : current.has_set()
6351 : Handle<Object>::cast( 6351 ? current.set()
6352 isolate->factory()->undefined_value())); 6352 : Handle<Object>::cast(isolate->factory()->null_value()));
6353 MaybeHandle<Object> result = 6353 MaybeHandle<Object> result =
6354 JSObject::DefineAccessor(it, getter, setter, attrs); 6354 JSObject::DefineAccessor(it, getter, setter, attrs);
6355 if (result.is_null()) return false; 6355 if (result.is_null()) return false;
6356 } 6356 }
6357 } 6357 }
6358 6358
6359 // 11. Return true. 6359 // 11. Return true.
6360 return true; 6360 return true;
6361 } 6361 }
6362 6362
(...skipping 11670 matching lines...) Expand 10 before | Expand all | Expand 10 after
18033 if (cell->value() != *new_value) { 18033 if (cell->value() != *new_value) {
18034 cell->set_value(*new_value); 18034 cell->set_value(*new_value);
18035 Isolate* isolate = cell->GetIsolate(); 18035 Isolate* isolate = cell->GetIsolate();
18036 cell->dependent_code()->DeoptimizeDependentCodeGroup( 18036 cell->dependent_code()->DeoptimizeDependentCodeGroup(
18037 isolate, DependentCode::kPropertyCellChangedGroup); 18037 isolate, DependentCode::kPropertyCellChangedGroup);
18038 } 18038 }
18039 } 18039 }
18040 18040
18041 } // namespace internal 18041 } // namespace internal
18042 } // namespace v8 18042 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698