| 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 (function(global, utils) { | 5 (function(global, utils) { |
| 6 | 6 |
| 7 %CheckIsBootstrapping(); | 7 %CheckIsBootstrapping(); |
| 8 | 8 |
| 9 // ---------------------------------------------------------------------------- | 9 // ---------------------------------------------------------------------------- |
| 10 // Imports | 10 // Imports |
| (...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1133 | 1133 |
| 1134 | 1134 |
| 1135 // ES5 section 15.2.3.8. | 1135 // ES5 section 15.2.3.8. |
| 1136 function ObjectSealJS(obj) { | 1136 function ObjectSealJS(obj) { |
| 1137 if (!IS_SPEC_OBJECT(obj)) return obj; | 1137 if (!IS_SPEC_OBJECT(obj)) return obj; |
| 1138 var isProxy = %_IsJSProxy(obj); | 1138 var isProxy = %_IsJSProxy(obj); |
| 1139 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) { | 1139 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) { |
| 1140 if (isProxy) { | 1140 if (isProxy) { |
| 1141 ProxyFix(obj); | 1141 ProxyFix(obj); |
| 1142 } | 1142 } |
| 1143 var names = ObjectGetOwnPropertyNames(obj); | 1143 var names = OwnPropertyKeys(obj); |
| 1144 for (var i = 0; i < names.length; i++) { | 1144 for (var i = 0; i < names.length; i++) { |
| 1145 var name = names[i]; | 1145 var name = names[i]; |
| 1146 var desc = GetOwnPropertyJS(obj, name); | 1146 var desc = GetOwnPropertyJS(obj, name); |
| 1147 if (desc.isConfigurable()) { | 1147 if (desc.isConfigurable()) { |
| 1148 desc.setConfigurable(false); | 1148 desc.setConfigurable(false); |
| 1149 DefineOwnProperty(obj, name, desc, true); | 1149 DefineOwnProperty(obj, name, desc, true); |
| 1150 } | 1150 } |
| 1151 } | 1151 } |
| 1152 %PreventExtensions(obj); | 1152 %PreventExtensions(obj); |
| 1153 } else { | 1153 } else { |
| 1154 // TODO(adamk): Is it worth going to this fast path if the | 1154 // TODO(adamk): Is it worth going to this fast path if the |
| 1155 // object's properties are already in dictionary mode? | 1155 // object's properties are already in dictionary mode? |
| 1156 %ObjectSeal(obj); | 1156 %ObjectSeal(obj); |
| 1157 } | 1157 } |
| 1158 return obj; | 1158 return obj; |
| 1159 } | 1159 } |
| 1160 | 1160 |
| 1161 | 1161 |
| 1162 // ES5 section 15.2.3.9. | 1162 // ES5 section 15.2.3.9. |
| 1163 function ObjectFreezeJS(obj) { | 1163 function ObjectFreezeJS(obj) { |
| 1164 if (!IS_SPEC_OBJECT(obj)) return obj; | 1164 if (!IS_SPEC_OBJECT(obj)) return obj; |
| 1165 var isProxy = %_IsJSProxy(obj); | 1165 var isProxy = %_IsJSProxy(obj); |
| 1166 // TODO(conradw): Investigate modifying the fast path to accommodate strong | 1166 // TODO(conradw): Investigate modifying the fast path to accommodate strong |
| 1167 // objects. | 1167 // objects. |
| 1168 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) || | 1168 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) || |
| 1169 IS_STRONG(obj)) { | 1169 IS_STRONG(obj)) { |
| 1170 if (isProxy) { | 1170 if (isProxy) { |
| 1171 ProxyFix(obj); | 1171 ProxyFix(obj); |
| 1172 } | 1172 } |
| 1173 var names = ObjectGetOwnPropertyNames(obj); | 1173 var names = OwnPropertyKeys(obj); |
| 1174 for (var i = 0; i < names.length; i++) { | 1174 for (var i = 0; i < names.length; i++) { |
| 1175 var name = names[i]; | 1175 var name = names[i]; |
| 1176 var desc = GetOwnPropertyJS(obj, name); | 1176 var desc = GetOwnPropertyJS(obj, name); |
| 1177 if (desc.isWritable() || desc.isConfigurable()) { | 1177 if (desc.isWritable() || desc.isConfigurable()) { |
| 1178 if (IsDataDescriptor(desc)) desc.setWritable(false); | 1178 if (IsDataDescriptor(desc)) desc.setWritable(false); |
| 1179 desc.setConfigurable(false); | 1179 desc.setConfigurable(false); |
| 1180 DefineOwnProperty(obj, name, desc, true); | 1180 DefineOwnProperty(obj, name, desc, true); |
| 1181 } | 1181 } |
| 1182 } | 1182 } |
| 1183 %PreventExtensions(obj); | 1183 %PreventExtensions(obj); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1203 | 1203 |
| 1204 // ES5 section 15.2.3.11 | 1204 // ES5 section 15.2.3.11 |
| 1205 function ObjectIsSealed(obj) { | 1205 function ObjectIsSealed(obj) { |
| 1206 if (!IS_SPEC_OBJECT(obj)) return true; | 1206 if (!IS_SPEC_OBJECT(obj)) return true; |
| 1207 if (%_IsJSProxy(obj)) { | 1207 if (%_IsJSProxy(obj)) { |
| 1208 return false; | 1208 return false; |
| 1209 } | 1209 } |
| 1210 if (%IsExtensible(obj)) { | 1210 if (%IsExtensible(obj)) { |
| 1211 return false; | 1211 return false; |
| 1212 } | 1212 } |
| 1213 var names = ObjectGetOwnPropertyNames(obj); | 1213 var names = OwnPropertyKeys(obj); |
| 1214 for (var i = 0; i < names.length; i++) { | 1214 for (var i = 0; i < names.length; i++) { |
| 1215 var name = names[i]; | 1215 var name = names[i]; |
| 1216 var desc = GetOwnPropertyJS(obj, name); | 1216 var desc = GetOwnPropertyJS(obj, name); |
| 1217 if (desc.isConfigurable()) { | 1217 if (desc.isConfigurable()) { |
| 1218 return false; | 1218 return false; |
| 1219 } | 1219 } |
| 1220 } | 1220 } |
| 1221 return true; | 1221 return true; |
| 1222 } | 1222 } |
| 1223 | 1223 |
| 1224 | 1224 |
| 1225 // ES5 section 15.2.3.12 | 1225 // ES5 section 15.2.3.12 |
| 1226 function ObjectIsFrozen(obj) { | 1226 function ObjectIsFrozen(obj) { |
| 1227 if (!IS_SPEC_OBJECT(obj)) return true; | 1227 if (!IS_SPEC_OBJECT(obj)) return true; |
| 1228 if (%_IsJSProxy(obj)) { | 1228 if (%_IsJSProxy(obj)) { |
| 1229 return false; | 1229 return false; |
| 1230 } | 1230 } |
| 1231 if (%IsExtensible(obj)) { | 1231 if (%IsExtensible(obj)) { |
| 1232 return false; | 1232 return false; |
| 1233 } | 1233 } |
| 1234 var names = ObjectGetOwnPropertyNames(obj); | 1234 var names = OwnPropertyKeys(obj); |
| 1235 for (var i = 0; i < names.length; i++) { | 1235 for (var i = 0; i < names.length; i++) { |
| 1236 var name = names[i]; | 1236 var name = names[i]; |
| 1237 var desc = GetOwnPropertyJS(obj, name); | 1237 var desc = GetOwnPropertyJS(obj, name); |
| 1238 if (IsDataDescriptor(desc) && desc.isWritable()) return false; | 1238 if (IsDataDescriptor(desc) && desc.isWritable()) return false; |
| 1239 if (desc.isConfigurable()) return false; | 1239 if (desc.isConfigurable()) return false; |
| 1240 } | 1240 } |
| 1241 return true; | 1241 return true; |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 | 1244 |
| (...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1841 %InstallToContext([ | 1841 %InstallToContext([ |
| 1842 "global_eval_fun", GlobalEval, | 1842 "global_eval_fun", GlobalEval, |
| 1843 "object_value_of", ObjectValueOf, | 1843 "object_value_of", ObjectValueOf, |
| 1844 "object_to_string", ObjectToString, | 1844 "object_to_string", ObjectToString, |
| 1845 "object_define_own_property", DefineOwnPropertyFromAPI, | 1845 "object_define_own_property", DefineOwnPropertyFromAPI, |
| 1846 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, | 1846 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, |
| 1847 "to_complete_property_descriptor", ToCompletePropertyDescriptor, | 1847 "to_complete_property_descriptor", ToCompletePropertyDescriptor, |
| 1848 ]); | 1848 ]); |
| 1849 | 1849 |
| 1850 }) | 1850 }) |
| OLD | NEW |