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 // This file relies on the fact that the following declarations have been made | 5 // This file relies on the fact that the following declarations have been made |
6 // in runtime.js: | 6 // in runtime.js: |
7 // var $Object = global.Object; | 7 // var $Object = global.Object; |
8 // var $Boolean = global.Boolean; | 8 // var $Boolean = global.Boolean; |
9 // var $Number = global.Number; | 9 // var $Number = global.Number; |
10 // var $Function = global.Function; | 10 // var $Function = global.Function; |
(...skipping 1214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1225 %FunctionSetPrototype(obj, prototype); | 1225 %FunctionSetPrototype(obj, prototype); |
1226 obj.length = 0; | 1226 obj.length = 0; |
1227 } else { | 1227 } else { |
1228 %Fix(obj); | 1228 %Fix(obj); |
1229 } | 1229 } |
1230 ObjectDefineProperties(obj, props); | 1230 ObjectDefineProperties(obj, props); |
1231 } | 1231 } |
1232 | 1232 |
1233 | 1233 |
1234 // ES5 section 15.2.3.8. | 1234 // ES5 section 15.2.3.8. |
1235 function ObjectSeal(obj) { | 1235 function ObjectSealJS(obj) { |
1236 if (!IS_SPEC_OBJECT(obj)) { | 1236 if (!IS_SPEC_OBJECT(obj)) { |
1237 throw MakeTypeError("called_on_non_object", ["Object.seal"]); | 1237 throw MakeTypeError("called_on_non_object", ["Object.seal"]); |
1238 } | 1238 } |
1239 if (%_IsJSProxy(obj)) { | 1239 var isProxy = %_IsJSProxy(obj); |
1240 ProxyFix(obj); | 1240 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) { |
| 1241 if (isProxy) { |
| 1242 ProxyFix(obj); |
| 1243 } |
| 1244 var names = ObjectGetOwnPropertyNames(obj); |
| 1245 for (var i = 0; i < names.length; i++) { |
| 1246 var name = names[i]; |
| 1247 var desc = GetOwnPropertyJS(obj, name); |
| 1248 if (desc.isConfigurable()) { |
| 1249 desc.setConfigurable(false); |
| 1250 DefineOwnProperty(obj, name, desc, true); |
| 1251 } |
| 1252 } |
| 1253 %PreventExtensions(obj); |
| 1254 } else { |
| 1255 // TODO(adamk): Is it worth going to this fast path if the |
| 1256 // object's properties are already in dictionary mode? |
| 1257 %ObjectSeal(obj); |
1241 } | 1258 } |
1242 var names = ObjectGetOwnPropertyNames(obj); | |
1243 for (var i = 0; i < names.length; i++) { | |
1244 var name = names[i]; | |
1245 var desc = GetOwnPropertyJS(obj, name); | |
1246 if (desc.isConfigurable()) { | |
1247 desc.setConfigurable(false); | |
1248 DefineOwnProperty(obj, name, desc, true); | |
1249 } | |
1250 } | |
1251 %PreventExtensions(obj); | |
1252 return obj; | 1259 return obj; |
1253 } | 1260 } |
1254 | 1261 |
1255 | 1262 |
1256 // ES5 section 15.2.3.9. | 1263 // ES5 section 15.2.3.9. |
1257 function ObjectFreezeJS(obj) { | 1264 function ObjectFreezeJS(obj) { |
1258 if (!IS_SPEC_OBJECT(obj)) { | 1265 if (!IS_SPEC_OBJECT(obj)) { |
1259 throw MakeTypeError("called_on_non_object", ["Object.freeze"]); | 1266 throw MakeTypeError("called_on_non_object", ["Object.freeze"]); |
1260 } | 1267 } |
1261 var isProxy = %_IsJSProxy(obj); | 1268 var isProxy = %_IsJSProxy(obj); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 "getPrototypeOf", ObjectGetPrototypeOf, | 1430 "getPrototypeOf", ObjectGetPrototypeOf, |
1424 "setPrototypeOf", ObjectSetPrototypeOf, | 1431 "setPrototypeOf", ObjectSetPrototypeOf, |
1425 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, | 1432 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, |
1426 "getOwnPropertyNames", ObjectGetOwnPropertyNames, | 1433 "getOwnPropertyNames", ObjectGetOwnPropertyNames, |
1427 // getOwnPropertySymbols is added in symbol.js. | 1434 // getOwnPropertySymbols is added in symbol.js. |
1428 "is", ObjectIs, | 1435 "is", ObjectIs, |
1429 "isExtensible", ObjectIsExtensible, | 1436 "isExtensible", ObjectIsExtensible, |
1430 "isFrozen", ObjectIsFrozen, | 1437 "isFrozen", ObjectIsFrozen, |
1431 "isSealed", ObjectIsSealed, | 1438 "isSealed", ObjectIsSealed, |
1432 "preventExtensions", ObjectPreventExtension, | 1439 "preventExtensions", ObjectPreventExtension, |
1433 "seal", ObjectSeal | 1440 "seal", ObjectSealJS |
1434 // deliverChangeRecords, getNotifier, observe and unobserve are added | 1441 // deliverChangeRecords, getNotifier, observe and unobserve are added |
1435 // in object-observe.js. | 1442 // in object-observe.js. |
1436 )); | 1443 )); |
1437 } | 1444 } |
1438 | 1445 |
1439 SetUpObject(); | 1446 SetUpObject(); |
1440 | 1447 |
1441 | 1448 |
1442 // ---------------------------------------------------------------------------- | 1449 // ---------------------------------------------------------------------------- |
1443 // Boolean | 1450 // Boolean |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1890 } | 1897 } |
1891 if (!IS_SPEC_FUNCTION(method)) { | 1898 if (!IS_SPEC_FUNCTION(method)) { |
1892 throw MakeTypeError('not_iterable', [obj]); | 1899 throw MakeTypeError('not_iterable', [obj]); |
1893 } | 1900 } |
1894 var iterator = %_CallFunction(obj, method); | 1901 var iterator = %_CallFunction(obj, method); |
1895 if (!IS_SPEC_OBJECT(iterator)) { | 1902 if (!IS_SPEC_OBJECT(iterator)) { |
1896 throw MakeTypeError('not_an_iterator', [iterator]); | 1903 throw MakeTypeError('not_an_iterator', [iterator]); |
1897 } | 1904 } |
1898 return iterator; | 1905 return iterator; |
1899 } | 1906 } |
OLD | NEW |