| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 } | 716 } |
| 717 var name = ToString(p); | 717 var name = ToString(p); |
| 718 var desc = ToPropertyDescriptor(attributes); | 718 var desc = ToPropertyDescriptor(attributes); |
| 719 DefineOwnProperty(obj, name, desc, true); | 719 DefineOwnProperty(obj, name, desc, true); |
| 720 return obj; | 720 return obj; |
| 721 } | 721 } |
| 722 | 722 |
| 723 | 723 |
| 724 // ES5 section 15.2.3.7. | 724 // ES5 section 15.2.3.7. |
| 725 function ObjectDefineProperties(obj, properties) { | 725 function ObjectDefineProperties(obj, properties) { |
| 726 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && | 726 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
| 727 !IS_UNDETECTABLE(obj)) | 727 !IS_UNDETECTABLE(obj)) |
| 728 throw MakeTypeError("obj_ctor_property_non_object", ["defineProperties"]); | 728 throw MakeTypeError("obj_ctor_property_non_object", ["defineProperties"]); |
| 729 var props = ToObject(properties); | 729 var props = ToObject(properties); |
| 730 var key_values = []; | 730 var key_values = []; |
| 731 for (var key in props) { | 731 for (var key in props) { |
| 732 if (%HasLocalProperty(props, key)) { | 732 if (%HasLocalProperty(props, key)) { |
| 733 key_values.push(key); | 733 key_values.push(key); |
| 734 var value = props[key]; | 734 var value = props[key]; |
| 735 var desc = ToPropertyDescriptor(value); | 735 var desc = ToPropertyDescriptor(value); |
| 736 key_values.push(desc); | 736 key_values.push(desc); |
| 737 } | 737 } |
| 738 } | 738 } |
| 739 for (var i = 0; i < key_values.length; i += 2) { | 739 for (var i = 0; i < key_values.length; i += 2) { |
| 740 var key = key_values[i]; | 740 var key = key_values[i]; |
| 741 var desc = key_values[i + 1]; | 741 var desc = key_values[i + 1]; |
| 742 DefineOwnProperty(obj, key, desc, true); | 742 DefineOwnProperty(obj, key, desc, true); |
| 743 } | 743 } |
| 744 return obj; | 744 return obj; |
| 745 } | 745 } |
| 746 | 746 |
| 747 | 747 |
| 748 // ES5 section 15.2.3.9. |
| 749 function ObjectFreeze(obj) { |
| 750 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
| 751 !IS_UNDETECTABLE(obj)) { |
| 752 throw MakeTypeError("obj_ctor_property_non_object", ["freeze"]); |
| 753 } |
| 754 var names = ObjectGetOwnPropertyNames(obj); |
| 755 for (var key in names) { |
| 756 var name = names[key]; |
| 757 var desc = GetOwnProperty(obj, name); |
| 758 if (IsDataDescriptor(desc)) desc.setWritable(false); |
| 759 if (desc.isConfigurable()) desc.setConfigurable(false); |
| 760 DefineOwnProperty(obj, name, desc, true); |
| 761 } |
| 762 ObjectPreventExtension(obj); |
| 763 } |
| 764 |
| 765 |
| 748 // ES5 section 15.2.3.10 | 766 // ES5 section 15.2.3.10 |
| 749 function ObjectPreventExtension(obj) { | 767 function ObjectPreventExtension(obj) { |
| 750 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && | 768 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
| 751 !IS_UNDETECTABLE(obj)) { | 769 !IS_UNDETECTABLE(obj)) { |
| 752 throw MakeTypeError("obj_ctor_property_non_object", ["preventExtension"]); | 770 throw MakeTypeError("obj_ctor_property_non_object", ["preventExtension"]); |
| 753 } | 771 } |
| 754 %PreventExtensions(obj); | 772 %PreventExtensions(obj); |
| 755 return obj; | 773 return obj; |
| 756 } | 774 } |
| 757 | 775 |
| 758 | 776 |
| 777 // ES5 section 15.2.3.12 |
| 778 function ObjectIsFrozen(obj) { |
| 779 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
| 780 !IS_UNDETECTABLE(obj)) { |
| 781 throw MakeTypeError("obj_ctor_property_non_object", ["isFrozen"]); |
| 782 } |
| 783 var names = ObjectGetOwnPropertyNames(obj); |
| 784 for (var key in names) { |
| 785 var name = names[key]; |
| 786 var desc = GetOwnProperty(obj, name); |
| 787 if (IsDataDescriptor(desc) && desc.writable) return false; |
| 788 if (desc.configurable) return false; |
| 789 } |
| 790 if (!ObjectIsExtensible(obj)) { |
| 791 return true; |
| 792 } |
| 793 return false; |
| 794 } |
| 795 |
| 796 |
| 759 // ES5 section 15.2.3.13 | 797 // ES5 section 15.2.3.13 |
| 760 function ObjectIsExtensible(obj) { | 798 function ObjectIsExtensible(obj) { |
| 761 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && | 799 if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
| 762 !IS_UNDETECTABLE(obj)) { | 800 !IS_UNDETECTABLE(obj)) { |
| 763 throw MakeTypeError("obj_ctor_property_non_object", ["preventExtension"]); | 801 throw MakeTypeError("obj_ctor_property_non_object", ["preventExtension"]); |
| 764 } | 802 } |
| 765 return %IsExtensible(obj); | 803 return %IsExtensible(obj); |
| 766 } | 804 } |
| 767 | 805 |
| 768 | 806 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 792 "__defineGetter__", ObjectDefineGetter, | 830 "__defineGetter__", ObjectDefineGetter, |
| 793 "__lookupGetter__", ObjectLookupGetter, | 831 "__lookupGetter__", ObjectLookupGetter, |
| 794 "__defineSetter__", ObjectDefineSetter, | 832 "__defineSetter__", ObjectDefineSetter, |
| 795 "__lookupSetter__", ObjectLookupSetter | 833 "__lookupSetter__", ObjectLookupSetter |
| 796 )); | 834 )); |
| 797 InstallFunctions($Object, DONT_ENUM, $Array( | 835 InstallFunctions($Object, DONT_ENUM, $Array( |
| 798 "keys", ObjectKeys, | 836 "keys", ObjectKeys, |
| 799 "create", ObjectCreate, | 837 "create", ObjectCreate, |
| 800 "defineProperty", ObjectDefineProperty, | 838 "defineProperty", ObjectDefineProperty, |
| 801 "defineProperties", ObjectDefineProperties, | 839 "defineProperties", ObjectDefineProperties, |
| 840 "freeze", ObjectFreeze, |
| 802 "getPrototypeOf", ObjectGetPrototypeOf, | 841 "getPrototypeOf", ObjectGetPrototypeOf, |
| 803 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, | 842 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, |
| 804 "getOwnPropertyNames", ObjectGetOwnPropertyNames, | 843 "getOwnPropertyNames", ObjectGetOwnPropertyNames, |
| 805 "isExtensible", ObjectIsExtensible, | 844 "isExtensible", ObjectIsExtensible, |
| 845 "isFrozen", ObjectIsFrozen, |
| 806 "preventExtensions", ObjectPreventExtension | 846 "preventExtensions", ObjectPreventExtension |
| 807 )); | 847 )); |
| 808 } | 848 } |
| 809 | 849 |
| 810 SetupObject(); | 850 SetupObject(); |
| 811 | 851 |
| 812 | 852 |
| 813 // ---------------------------------------------------------------------------- | 853 // ---------------------------------------------------------------------------- |
| 814 // Boolean | 854 // Boolean |
| 815 | 855 |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1064 | 1104 |
| 1065 // ---------------------------------------------------------------------------- | 1105 // ---------------------------------------------------------------------------- |
| 1066 | 1106 |
| 1067 function SetupFunction() { | 1107 function SetupFunction() { |
| 1068 InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 1108 InstallFunctions($Function.prototype, DONT_ENUM, $Array( |
| 1069 "toString", FunctionToString | 1109 "toString", FunctionToString |
| 1070 )); | 1110 )); |
| 1071 } | 1111 } |
| 1072 | 1112 |
| 1073 SetupFunction(); | 1113 SetupFunction(); |
| OLD | NEW |