OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 var $functionSourceString; | 5 var $functionSourceString; |
6 var $globalEval; | 6 var $globalEval; |
7 var $objectGetOwnPropertyDescriptor; | 7 var $objectGetOwnPropertyDescriptor; |
8 var $toCompletePropertyDescriptor; | 8 var $toCompletePropertyDescriptor; |
9 | 9 |
10 (function(global, utils) { | 10 (function(global, utils) { |
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 // Step 9a | 674 // Step 9a |
675 if (IsDataDescriptor(current) != IsDataDescriptor(desc)) { | 675 if (IsDataDescriptor(current) != IsDataDescriptor(desc)) { |
676 if (should_throw) { | 676 if (should_throw) { |
677 throw MakeTypeError(kRedefineDisallowed, p); | 677 throw MakeTypeError(kRedefineDisallowed, p); |
678 } else { | 678 } else { |
679 return false; | 679 return false; |
680 } | 680 } |
681 } | 681 } |
682 // Step 10a | 682 // Step 10a |
683 if (IsDataDescriptor(current) && IsDataDescriptor(desc)) { | 683 if (IsDataDescriptor(current) && IsDataDescriptor(desc)) { |
684 if (!current.isWritable() && desc.isWritable()) { | 684 var currentIsWritable = current.isWritable(); |
685 if (should_throw) { | 685 if (currentIsWritable != desc.isWritable()) { |
686 throw MakeTypeError(kRedefineDisallowed, p); | 686 if (!currentIsWritable || IS_STRONG(obj)) { |
687 } else { | 687 if (should_throw) { |
688 return false; | 688 throw currentIsWritable |
| 689 ? MakeTypeError(kStrongRedefineDisallowed, obj, p) |
| 690 : MakeTypeError(kRedefineDisallowed, p); |
| 691 } else { |
| 692 return false; |
| 693 } |
689 } | 694 } |
690 } | 695 } |
691 if (!current.isWritable() && desc.hasValue() && | 696 if (!currentIsWritable && desc.hasValue() && |
692 !$sameValue(desc.getValue(), current.getValue())) { | 697 !$sameValue(desc.getValue(), current.getValue())) { |
693 if (should_throw) { | 698 if (should_throw) { |
694 throw MakeTypeError(kRedefineDisallowed, p); | 699 throw MakeTypeError(kRedefineDisallowed, p); |
695 } else { | 700 } else { |
696 return false; | 701 return false; |
697 } | 702 } |
698 } | 703 } |
699 } | 704 } |
700 // Step 11 | 705 // Step 11 |
701 if (IsAccessorDescriptor(desc) && IsAccessorDescriptor(current)) { | 706 if (IsAccessorDescriptor(desc) && IsAccessorDescriptor(current)) { |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 %ObjectSeal(obj); | 1209 %ObjectSeal(obj); |
1205 } | 1210 } |
1206 return obj; | 1211 return obj; |
1207 } | 1212 } |
1208 | 1213 |
1209 | 1214 |
1210 // ES5 section 15.2.3.9. | 1215 // ES5 section 15.2.3.9. |
1211 function ObjectFreezeJS(obj) { | 1216 function ObjectFreezeJS(obj) { |
1212 if (!IS_SPEC_OBJECT(obj)) return obj; | 1217 if (!IS_SPEC_OBJECT(obj)) return obj; |
1213 var isProxy = %_IsJSProxy(obj); | 1218 var isProxy = %_IsJSProxy(obj); |
1214 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) { | 1219 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) || |
| 1220 IS_STRONG(obj)) { |
1215 if (isProxy) { | 1221 if (isProxy) { |
1216 ProxyFix(obj); | 1222 ProxyFix(obj); |
1217 } | 1223 } |
1218 var names = ObjectGetOwnPropertyNames(obj); | 1224 var names = ObjectGetOwnPropertyNames(obj); |
1219 for (var i = 0; i < names.length; i++) { | 1225 for (var i = 0; i < names.length; i++) { |
1220 var name = names[i]; | 1226 var name = names[i]; |
1221 var desc = GetOwnPropertyJS(obj, name); | 1227 var desc = GetOwnPropertyJS(obj, name); |
1222 if (desc.isWritable() || desc.isConfigurable()) { | 1228 if (desc.isWritable() || desc.isConfigurable()) { |
1223 if (IsDataDescriptor(desc)) desc.setWritable(false); | 1229 if (IsDataDescriptor(desc)) desc.setWritable(false); |
1224 desc.setConfigurable(false); | 1230 desc.setConfigurable(false); |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1844 to.ObjectGetOwnPropertyKeys = ObjectGetOwnPropertyKeys; | 1850 to.ObjectGetOwnPropertyKeys = ObjectGetOwnPropertyKeys; |
1845 to.ObjectHasOwnProperty = ObjectHasOwnProperty; | 1851 to.ObjectHasOwnProperty = ObjectHasOwnProperty; |
1846 to.ObjectIsFrozen = ObjectIsFrozen; | 1852 to.ObjectIsFrozen = ObjectIsFrozen; |
1847 to.ObjectIsSealed = ObjectIsSealed; | 1853 to.ObjectIsSealed = ObjectIsSealed; |
1848 to.ObjectToString = ObjectToString; | 1854 to.ObjectToString = ObjectToString; |
1849 to.OwnPropertyKeys = OwnPropertyKeys; | 1855 to.OwnPropertyKeys = OwnPropertyKeys; |
1850 to.ToNameArray = ToNameArray; | 1856 to.ToNameArray = ToNameArray; |
1851 }); | 1857 }); |
1852 | 1858 |
1853 }) | 1859 }) |
OLD | NEW |