| 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 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 } | 765 } |
| 766 | 766 |
| 767 if (IS_RECEIVER(obj)) { | 767 if (IS_RECEIVER(obj)) { |
| 768 %SetPrototype(obj, proto); | 768 %SetPrototype(obj, proto); |
| 769 } | 769 } |
| 770 | 770 |
| 771 return obj; | 771 return obj; |
| 772 } | 772 } |
| 773 | 773 |
| 774 | 774 |
| 775 // ES5 section 15.2.3.4. |
| 776 function ObjectGetOwnPropertyNames(obj) { |
| 777 obj = TO_OBJECT(obj); |
| 778 return %GetOwnPropertyKeys(obj, PROPERTY_FILTER_SKIP_SYMBOLS); |
| 779 } |
| 780 |
| 781 |
| 775 // ES5 section 15.2.3.6. | 782 // ES5 section 15.2.3.6. |
| 776 function ObjectDefineProperty(obj, p, attributes) { | 783 function ObjectDefineProperty(obj, p, attributes) { |
| 777 // The new pure-C++ implementation doesn't support O.o. | 784 // The new pure-C++ implementation doesn't support O.o. |
| 778 // TODO(jkummerow): Implement missing features and remove fallback path. | 785 // TODO(jkummerow): Implement missing features and remove fallback path. |
| 779 if (%IsObserved(obj)) { | 786 if (%IsObserved(obj)) { |
| 780 if (!IS_RECEIVER(obj)) { | 787 if (!IS_RECEIVER(obj)) { |
| 781 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); | 788 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); |
| 782 } | 789 } |
| 783 var name = TO_NAME(p); | 790 var name = TO_NAME(p); |
| 784 var desc = ToPropertyDescriptor(attributes); | 791 var desc = ToPropertyDescriptor(attributes); |
| 785 DefineOwnProperty(obj, name, desc, true); | 792 DefineOwnProperty(obj, name, desc, true); |
| 786 return obj; | 793 return obj; |
| 787 } | 794 } |
| 788 return %ObjectDefineProperty(obj, p, attributes); | 795 return %ObjectDefineProperty(obj, p, attributes); |
| 789 } | 796 } |
| 790 | 797 |
| 791 | 798 |
| 799 function GetOwnEnumerablePropertyNames(object) { |
| 800 return %GetOwnPropertyKeys(object, PROPERTY_FILTER_ONLY_ENUMERABLE); |
| 801 } |
| 802 |
| 803 |
| 792 // ES5 section 15.2.3.7. | 804 // ES5 section 15.2.3.7. |
| 793 function ObjectDefineProperties(obj, properties) { | 805 function ObjectDefineProperties(obj, properties) { |
| 794 // The new pure-C++ implementation doesn't support O.o. | 806 // The new pure-C++ implementation doesn't support O.o. |
| 795 // TODO(jkummerow): Implement missing features and remove fallback path. | 807 // TODO(jkummerow): Implement missing features and remove fallback path. |
| 796 if (%IsObserved(obj)) { | 808 if (%IsObserved(obj)) { |
| 797 if (!IS_RECEIVER(obj)) { | 809 if (!IS_RECEIVER(obj)) { |
| 798 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); | 810 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); |
| 799 } | 811 } |
| 800 var props = TO_OBJECT(properties); | 812 var props = TO_OBJECT(properties); |
| 801 var names = %GetOwnPropertyKeys(props, PROPERTY_FILTER_ONLY_ENUMERABLE); | 813 var names = GetOwnEnumerablePropertyNames(props); |
| 802 var descriptors = new InternalArray(); | 814 var descriptors = new InternalArray(); |
| 803 for (var i = 0; i < names.length; i++) { | 815 for (var i = 0; i < names.length; i++) { |
| 804 descriptors.push(ToPropertyDescriptor(props[names[i]])); | 816 descriptors.push(ToPropertyDescriptor(props[names[i]])); |
| 805 } | 817 } |
| 806 for (var i = 0; i < names.length; i++) { | 818 for (var i = 0; i < names.length; i++) { |
| 807 DefineOwnProperty(obj, names[i], descriptors[i], true); | 819 DefineOwnProperty(obj, names[i], descriptors[i], true); |
| 808 } | 820 } |
| 809 return obj; | 821 return obj; |
| 810 } | 822 } |
| 811 return %ObjectDefineProperties(obj, properties); | 823 return %ObjectDefineProperties(obj, properties); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 ObjectSetProto); | 876 ObjectSetProto); |
| 865 | 877 |
| 866 // Set up non-enumerable functions in the Object object. | 878 // Set up non-enumerable functions in the Object object. |
| 867 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ | 879 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ |
| 868 // assign is added in bootstrapper.cc. | 880 // assign is added in bootstrapper.cc. |
| 869 // keys is added in bootstrapper.cc. | 881 // keys is added in bootstrapper.cc. |
| 870 "defineProperty", ObjectDefineProperty, | 882 "defineProperty", ObjectDefineProperty, |
| 871 "defineProperties", ObjectDefineProperties, | 883 "defineProperties", ObjectDefineProperties, |
| 872 "getPrototypeOf", ObjectGetPrototypeOf, | 884 "getPrototypeOf", ObjectGetPrototypeOf, |
| 873 "setPrototypeOf", ObjectSetPrototypeOf, | 885 "setPrototypeOf", ObjectSetPrototypeOf, |
| 886 "getOwnPropertyNames", ObjectGetOwnPropertyNames, |
| 874 // getOwnPropertySymbols is added in symbol.js. | 887 // getOwnPropertySymbols is added in symbol.js. |
| 875 "is", SameValue, // ECMA-262, Edition 6, section 19.1.2.10 | 888 "is", SameValue, // ECMA-262, Edition 6, section 19.1.2.10 |
| 876 // deliverChangeRecords, getNotifier, observe and unobserve are added | 889 // deliverChangeRecords, getNotifier, observe and unobserve are added |
| 877 // in object-observe.js. | 890 // in object-observe.js. |
| 878 ]); | 891 ]); |
| 879 | 892 |
| 880 | 893 |
| 881 // ---------------------------------------------------------------------------- | 894 // ---------------------------------------------------------------------------- |
| 882 // Boolean | 895 // Boolean |
| 883 | 896 |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1161 to.ObjectDefineProperties = ObjectDefineProperties; | 1174 to.ObjectDefineProperties = ObjectDefineProperties; |
| 1162 to.ObjectDefineProperty = ObjectDefineProperty; | 1175 to.ObjectDefineProperty = ObjectDefineProperty; |
| 1163 to.ObjectHasOwnProperty = ObjectHasOwnProperty; | 1176 to.ObjectHasOwnProperty = ObjectHasOwnProperty; |
| 1164 }); | 1177 }); |
| 1165 | 1178 |
| 1166 %InstallToContext([ | 1179 %InstallToContext([ |
| 1167 "object_value_of", ObjectValueOf, | 1180 "object_value_of", ObjectValueOf, |
| 1168 ]); | 1181 ]); |
| 1169 | 1182 |
| 1170 }) | 1183 }) |
| OLD | NEW |