| 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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 // ES6 7.3.11 | 156 // ES6 7.3.11 |
| 157 function ObjectHasOwnProperty(value) { | 157 function ObjectHasOwnProperty(value) { |
| 158 var name = TO_NAME(value); | 158 var name = TO_NAME(value); |
| 159 var object = TO_OBJECT(this); | 159 var object = TO_OBJECT(this); |
| 160 return %HasOwnProperty(object, name); | 160 return %HasOwnProperty(object, name); |
| 161 } | 161 } |
| 162 | 162 |
| 163 | 163 |
| 164 // ES6 19.1.3.3 Object.prototype.isPrototypeOf(V) | 164 // ES6 19.1.3.3 Object.prototype.isPrototypeOf(V) |
| 165 function ObjectIsPrototypeOf(V) { | 165 function ObjectIsPrototypeOf(V) { |
| 166 if (!IS_SPEC_OBJECT(V)) return false; | 166 if (!IS_RECEIVER(V)) return false; |
| 167 var O = TO_OBJECT(this); | 167 var O = TO_OBJECT(this); |
| 168 return %_HasInPrototypeChain(V, O); | 168 return %_HasInPrototypeChain(V, O); |
| 169 } | 169 } |
| 170 | 170 |
| 171 | 171 |
| 172 // ES6 19.1.3.4 | 172 // ES6 19.1.3.4 |
| 173 function ObjectPropertyIsEnumerable(V) { | 173 function ObjectPropertyIsEnumerable(V) { |
| 174 var P = TO_NAME(V); | 174 var P = TO_NAME(V); |
| 175 return %PropertyIsEnumerable(TO_OBJECT(this), P); | 175 return %PropertyIsEnumerable(TO_OBJECT(this), P); |
| 176 } | 176 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 } | 282 } |
| 283 if (desc.hasConfigurable()) { | 283 if (desc.hasConfigurable()) { |
| 284 %AddNamedProperty(obj, "configurable", desc.isConfigurable(), NONE); | 284 %AddNamedProperty(obj, "configurable", desc.isConfigurable(), NONE); |
| 285 } | 285 } |
| 286 return obj; | 286 return obj; |
| 287 } | 287 } |
| 288 | 288 |
| 289 | 289 |
| 290 // ES6 6.2.4.5 | 290 // ES6 6.2.4.5 |
| 291 function ToPropertyDescriptor(obj) { | 291 function ToPropertyDescriptor(obj) { |
| 292 if (!IS_SPEC_OBJECT(obj)) throw MakeTypeError(kPropertyDescObject, obj); | 292 if (!IS_RECEIVER(obj)) throw MakeTypeError(kPropertyDescObject, obj); |
| 293 | 293 |
| 294 var desc = new PropertyDescriptor(); | 294 var desc = new PropertyDescriptor(); |
| 295 | 295 |
| 296 if ("enumerable" in obj) { | 296 if ("enumerable" in obj) { |
| 297 desc.setEnumerable(TO_BOOLEAN(obj.enumerable)); | 297 desc.setEnumerable(TO_BOOLEAN(obj.enumerable)); |
| 298 } | 298 } |
| 299 | 299 |
| 300 if ("configurable" in obj) { | 300 if ("configurable" in obj) { |
| 301 desc.setConfigurable(TO_BOOLEAN(obj.configurable)); | 301 desc.setConfigurable(TO_BOOLEAN(obj.configurable)); |
| 302 } | 302 } |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 | 777 |
| 778 // ES6 section 19.1.2.9 | 778 // ES6 section 19.1.2.9 |
| 779 function ObjectGetPrototypeOf(obj) { | 779 function ObjectGetPrototypeOf(obj) { |
| 780 return %_GetPrototype(TO_OBJECT(obj)); | 780 return %_GetPrototype(TO_OBJECT(obj)); |
| 781 } | 781 } |
| 782 | 782 |
| 783 // ES6 section 19.1.2.18. | 783 // ES6 section 19.1.2.18. |
| 784 function ObjectSetPrototypeOf(obj, proto) { | 784 function ObjectSetPrototypeOf(obj, proto) { |
| 785 CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf"); | 785 CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf"); |
| 786 | 786 |
| 787 if (proto !== null && !IS_SPEC_OBJECT(proto)) { | 787 if (proto !== null && !IS_RECEIVER(proto)) { |
| 788 throw MakeTypeError(kProtoObjectOrNull, proto); | 788 throw MakeTypeError(kProtoObjectOrNull, proto); |
| 789 } | 789 } |
| 790 | 790 |
| 791 if (IS_SPEC_OBJECT(obj)) { | 791 if (IS_RECEIVER(obj)) { |
| 792 %SetPrototype(obj, proto); | 792 %SetPrototype(obj, proto); |
| 793 } | 793 } |
| 794 | 794 |
| 795 return obj; | 795 return obj; |
| 796 } | 796 } |
| 797 | 797 |
| 798 | 798 |
| 799 // ES6 section 19.1.2.6 | 799 // ES6 section 19.1.2.6 |
| 800 function ObjectGetOwnPropertyDescriptor(obj, p) { | 800 function ObjectGetOwnPropertyDescriptor(obj, p) { |
| 801 return %GetOwnProperty(obj, p); | 801 return %GetOwnProperty(obj, p); |
| 802 } | 802 } |
| 803 | 803 |
| 804 | 804 |
| 805 // ES5 section 15.2.3.4. | 805 // ES5 section 15.2.3.4. |
| 806 function ObjectGetOwnPropertyNames(obj) { | 806 function ObjectGetOwnPropertyNames(obj) { |
| 807 obj = TO_OBJECT(obj); | 807 obj = TO_OBJECT(obj); |
| 808 return %GetOwnPropertyKeys(obj, PROPERTY_FILTER_SKIP_SYMBOLS); | 808 return %GetOwnPropertyKeys(obj, PROPERTY_FILTER_SKIP_SYMBOLS); |
| 809 } | 809 } |
| 810 | 810 |
| 811 | 811 |
| 812 // ES5 section 15.2.3.5. | 812 // ES5 section 15.2.3.5. |
| 813 function ObjectCreate(proto, properties) { | 813 function ObjectCreate(proto, properties) { |
| 814 if (!IS_SPEC_OBJECT(proto) && proto !== null) { | 814 if (!IS_RECEIVER(proto) && proto !== null) { |
| 815 throw MakeTypeError(kProtoObjectOrNull, proto); | 815 throw MakeTypeError(kProtoObjectOrNull, proto); |
| 816 } | 816 } |
| 817 var obj = {}; | 817 var obj = {}; |
| 818 %InternalSetPrototype(obj, proto); | 818 %InternalSetPrototype(obj, proto); |
| 819 if (!IS_UNDEFINED(properties)) ObjectDefineProperties(obj, properties); | 819 if (!IS_UNDEFINED(properties)) ObjectDefineProperties(obj, properties); |
| 820 return obj; | 820 return obj; |
| 821 } | 821 } |
| 822 | 822 |
| 823 | 823 |
| 824 // ES5 section 15.2.3.6. | 824 // ES5 section 15.2.3.6. |
| 825 function ObjectDefineProperty(obj, p, attributes) { | 825 function ObjectDefineProperty(obj, p, attributes) { |
| 826 // The new pure-C++ implementation doesn't support O.o. | 826 // The new pure-C++ implementation doesn't support O.o. |
| 827 // TODO(jkummerow): Implement missing features and remove fallback path. | 827 // TODO(jkummerow): Implement missing features and remove fallback path. |
| 828 if (%IsObserved(obj)) { | 828 if (%IsObserved(obj)) { |
| 829 if (!IS_SPEC_OBJECT(obj)) { | 829 if (!IS_RECEIVER(obj)) { |
| 830 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); | 830 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); |
| 831 } | 831 } |
| 832 var name = TO_NAME(p); | 832 var name = TO_NAME(p); |
| 833 var desc = ToPropertyDescriptor(attributes); | 833 var desc = ToPropertyDescriptor(attributes); |
| 834 DefineOwnProperty(obj, name, desc, true); | 834 DefineOwnProperty(obj, name, desc, true); |
| 835 return obj; | 835 return obj; |
| 836 } | 836 } |
| 837 return %ObjectDefineProperty(obj, p, attributes); | 837 return %ObjectDefineProperty(obj, p, attributes); |
| 838 } | 838 } |
| 839 | 839 |
| 840 | 840 |
| 841 function GetOwnEnumerablePropertyNames(object) { | 841 function GetOwnEnumerablePropertyNames(object) { |
| 842 return %GetOwnPropertyKeys(object, PROPERTY_FILTER_ONLY_ENUMERABLE); | 842 return %GetOwnPropertyKeys(object, PROPERTY_FILTER_ONLY_ENUMERABLE); |
| 843 } | 843 } |
| 844 | 844 |
| 845 | 845 |
| 846 // ES5 section 15.2.3.7. | 846 // ES5 section 15.2.3.7. |
| 847 function ObjectDefineProperties(obj, properties) { | 847 function ObjectDefineProperties(obj, properties) { |
| 848 // The new pure-C++ implementation doesn't support O.o. | 848 // The new pure-C++ implementation doesn't support O.o. |
| 849 // TODO(jkummerow): Implement missing features and remove fallback path. | 849 // TODO(jkummerow): Implement missing features and remove fallback path. |
| 850 if (%IsObserved(obj)) { | 850 if (%IsObserved(obj)) { |
| 851 if (!IS_SPEC_OBJECT(obj)) { | 851 if (!IS_RECEIVER(obj)) { |
| 852 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); | 852 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); |
| 853 } | 853 } |
| 854 var props = TO_OBJECT(properties); | 854 var props = TO_OBJECT(properties); |
| 855 var names = GetOwnEnumerablePropertyNames(props); | 855 var names = GetOwnEnumerablePropertyNames(props); |
| 856 var descriptors = new InternalArray(); | 856 var descriptors = new InternalArray(); |
| 857 for (var i = 0; i < names.length; i++) { | 857 for (var i = 0; i < names.length; i++) { |
| 858 descriptors.push(ToPropertyDescriptor(props[names[i]])); | 858 descriptors.push(ToPropertyDescriptor(props[names[i]])); |
| 859 } | 859 } |
| 860 for (var i = 0; i < names.length; i++) { | 860 for (var i = 0; i < names.length; i++) { |
| 861 DefineOwnProperty(obj, names[i], descriptors[i], true); | 861 DefineOwnProperty(obj, names[i], descriptors[i], true); |
| 862 } | 862 } |
| 863 return obj; | 863 return obj; |
| 864 } | 864 } |
| 865 return %ObjectDefineProperties(obj, properties); | 865 return %ObjectDefineProperties(obj, properties); |
| 866 } | 866 } |
| 867 | 867 |
| 868 | 868 |
| 869 // ES6 19.1.2.17 | 869 // ES6 19.1.2.17 |
| 870 function ObjectSealJS(obj) { | 870 function ObjectSealJS(obj) { |
| 871 if (!IS_SPEC_OBJECT(obj)) return obj; | 871 if (!IS_RECEIVER(obj)) return obj; |
| 872 return %ObjectSeal(obj); | 872 return %ObjectSeal(obj); |
| 873 } | 873 } |
| 874 | 874 |
| 875 | 875 |
| 876 // ES6 19.1.2.5 | 876 // ES6 19.1.2.5 |
| 877 function ObjectFreezeJS(obj) { | 877 function ObjectFreezeJS(obj) { |
| 878 if (!IS_SPEC_OBJECT(obj)) return obj; | 878 if (!IS_RECEIVER(obj)) return obj; |
| 879 return %ObjectFreeze(obj); | 879 return %ObjectFreeze(obj); |
| 880 } | 880 } |
| 881 | 881 |
| 882 | 882 |
| 883 // ES6 19.1.2.15 | 883 // ES6 19.1.2.15 |
| 884 function ObjectPreventExtension(obj) { | 884 function ObjectPreventExtension(obj) { |
| 885 if (!IS_SPEC_OBJECT(obj)) return obj; | 885 if (!IS_RECEIVER(obj)) return obj; |
| 886 return %PreventExtensions(obj); | 886 return %PreventExtensions(obj); |
| 887 } | 887 } |
| 888 | 888 |
| 889 | 889 |
| 890 // ES6 19.1.2.13 | 890 // ES6 19.1.2.13 |
| 891 function ObjectIsSealed(obj) { | 891 function ObjectIsSealed(obj) { |
| 892 if (!IS_SPEC_OBJECT(obj)) return true; | 892 if (!IS_RECEIVER(obj)) return true; |
| 893 return %ObjectIsSealed(obj); | 893 return %ObjectIsSealed(obj); |
| 894 } | 894 } |
| 895 | 895 |
| 896 | 896 |
| 897 // ES6 19.1.2.12 | 897 // ES6 19.1.2.12 |
| 898 function ObjectIsFrozen(obj) { | 898 function ObjectIsFrozen(obj) { |
| 899 if (!IS_SPEC_OBJECT(obj)) return true; | 899 if (!IS_RECEIVER(obj)) return true; |
| 900 return %ObjectIsFrozen(obj); | 900 return %ObjectIsFrozen(obj); |
| 901 } | 901 } |
| 902 | 902 |
| 903 | 903 |
| 904 // ES6 19.1.2.11 | 904 // ES6 19.1.2.11 |
| 905 function ObjectIsExtensible(obj) { | 905 function ObjectIsExtensible(obj) { |
| 906 if (!IS_SPEC_OBJECT(obj)) return false; | 906 if (!IS_RECEIVER(obj)) return false; |
| 907 return %IsExtensible(obj); | 907 return %IsExtensible(obj); |
| 908 } | 908 } |
| 909 | 909 |
| 910 | 910 |
| 911 // ES6 B.2.2.1.1 | 911 // ES6 B.2.2.1.1 |
| 912 function ObjectGetProto() { | 912 function ObjectGetProto() { |
| 913 return %_GetPrototype(TO_OBJECT(this)); | 913 return %_GetPrototype(TO_OBJECT(this)); |
| 914 } | 914 } |
| 915 | 915 |
| 916 | 916 |
| 917 // ES6 B.2.2.1.2 | 917 // ES6 B.2.2.1.2 |
| 918 function ObjectSetProto(proto) { | 918 function ObjectSetProto(proto) { |
| 919 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.__proto__"); | 919 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.__proto__"); |
| 920 | 920 |
| 921 if ((IS_SPEC_OBJECT(proto) || IS_NULL(proto)) && IS_SPEC_OBJECT(this)) { | 921 if ((IS_RECEIVER(proto) || IS_NULL(proto)) && IS_RECEIVER(this)) { |
| 922 %SetPrototype(this, proto); | 922 %SetPrototype(this, proto); |
| 923 } | 923 } |
| 924 } | 924 } |
| 925 | 925 |
| 926 | 926 |
| 927 // ES6 19.1.1.1 | 927 // ES6 19.1.1.1 |
| 928 function ObjectConstructor(x) { | 928 function ObjectConstructor(x) { |
| 929 if (GlobalObject != new.target && !IS_UNDEFINED(new.target)) { | 929 if (GlobalObject != new.target && !IS_UNDEFINED(new.target)) { |
| 930 return this; | 930 return this; |
| 931 } | 931 } |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1420 | 1420 |
| 1421 // ES6 7.4.1 GetIterator(obj, method) | 1421 // ES6 7.4.1 GetIterator(obj, method) |
| 1422 function GetIterator(obj, method) { | 1422 function GetIterator(obj, method) { |
| 1423 if (IS_UNDEFINED(method)) { | 1423 if (IS_UNDEFINED(method)) { |
| 1424 method = obj[iteratorSymbol]; | 1424 method = obj[iteratorSymbol]; |
| 1425 } | 1425 } |
| 1426 if (!IS_CALLABLE(method)) { | 1426 if (!IS_CALLABLE(method)) { |
| 1427 throw MakeTypeError(kNotIterable, obj); | 1427 throw MakeTypeError(kNotIterable, obj); |
| 1428 } | 1428 } |
| 1429 var iterator = %_Call(method, obj); | 1429 var iterator = %_Call(method, obj); |
| 1430 if (!IS_SPEC_OBJECT(iterator)) { | 1430 if (!IS_RECEIVER(iterator)) { |
| 1431 throw MakeTypeError(kNotAnIterator, iterator); | 1431 throw MakeTypeError(kNotAnIterator, iterator); |
| 1432 } | 1432 } |
| 1433 return iterator; | 1433 return iterator; |
| 1434 } | 1434 } |
| 1435 | 1435 |
| 1436 // ---------------------------------------------------------------------------- | 1436 // ---------------------------------------------------------------------------- |
| 1437 // Exports | 1437 // Exports |
| 1438 | 1438 |
| 1439 utils.Export(function(to) { | 1439 utils.Export(function(to) { |
| 1440 to.FunctionSourceString = FunctionSourceString; | 1440 to.FunctionSourceString = FunctionSourceString; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1452 to.ObjectIsSealed = ObjectIsSealed; | 1452 to.ObjectIsSealed = ObjectIsSealed; |
| 1453 to.ObjectKeys = ObjectKeys; | 1453 to.ObjectKeys = ObjectKeys; |
| 1454 }); | 1454 }); |
| 1455 | 1455 |
| 1456 %InstallToContext([ | 1456 %InstallToContext([ |
| 1457 "global_eval_fun", GlobalEval, | 1457 "global_eval_fun", GlobalEval, |
| 1458 "object_value_of", ObjectValueOf, | 1458 "object_value_of", ObjectValueOf, |
| 1459 ]); | 1459 ]); |
| 1460 | 1460 |
| 1461 }) | 1461 }) |
| OLD | NEW |