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 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 } | 786 } |
787 | 787 |
788 | 788 |
789 // ES5 section 15.2.3.4. | 789 // ES5 section 15.2.3.4. |
790 function ObjectGetOwnPropertyNames(obj) { | 790 function ObjectGetOwnPropertyNames(obj) { |
791 obj = TO_OBJECT(obj); | 791 obj = TO_OBJECT(obj); |
792 return %GetOwnPropertyKeys(obj, PROPERTY_FILTER_SKIP_SYMBOLS); | 792 return %GetOwnPropertyKeys(obj, PROPERTY_FILTER_SKIP_SYMBOLS); |
793 } | 793 } |
794 | 794 |
795 | 795 |
796 // ES5 section 15.2.3.5. | |
797 function ObjectCreate(proto, properties) { | |
798 if (!IS_RECEIVER(proto) && proto !== null) { | |
799 throw MakeTypeError(kProtoObjectOrNull, proto); | |
800 } | |
801 var obj = {}; | |
802 %InternalSetPrototype(obj, proto); | |
803 if (!IS_UNDEFINED(properties)) ObjectDefineProperties(obj, properties); | |
804 return obj; | |
805 } | |
806 | |
807 | |
808 // ES5 section 15.2.3.6. | 796 // ES5 section 15.2.3.6. |
809 function ObjectDefineProperty(obj, p, attributes) { | 797 function ObjectDefineProperty(obj, p, attributes) { |
810 // The new pure-C++ implementation doesn't support O.o. | 798 // The new pure-C++ implementation doesn't support O.o. |
811 // TODO(jkummerow): Implement missing features and remove fallback path. | 799 // TODO(jkummerow): Implement missing features and remove fallback path. |
812 if (%IsObserved(obj)) { | 800 if (%IsObserved(obj)) { |
813 if (!IS_RECEIVER(obj)) { | 801 if (!IS_RECEIVER(obj)) { |
814 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); | 802 throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); |
815 } | 803 } |
816 var name = TO_NAME(p); | 804 var name = TO_NAME(p); |
817 var desc = ToPropertyDescriptor(attributes); | 805 var desc = ToPropertyDescriptor(attributes); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
940 "__defineSetter__", ObjectDefineSetter, | 928 "__defineSetter__", ObjectDefineSetter, |
941 "__lookupSetter__", ObjectLookupSetter | 929 "__lookupSetter__", ObjectLookupSetter |
942 ]); | 930 ]); |
943 utils.InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto, | 931 utils.InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto, |
944 ObjectSetProto); | 932 ObjectSetProto); |
945 | 933 |
946 // Set up non-enumerable functions in the Object object. | 934 // Set up non-enumerable functions in the Object object. |
947 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ | 935 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ |
948 // assign is added in bootstrapper.cc. | 936 // assign is added in bootstrapper.cc. |
949 "keys", ObjectKeys, | 937 "keys", ObjectKeys, |
950 "create", ObjectCreate, | |
951 "defineProperty", ObjectDefineProperty, | 938 "defineProperty", ObjectDefineProperty, |
952 "defineProperties", ObjectDefineProperties, | 939 "defineProperties", ObjectDefineProperties, |
953 "freeze", ObjectFreezeJS, | 940 "freeze", ObjectFreezeJS, |
954 "getPrototypeOf", ObjectGetPrototypeOf, | 941 "getPrototypeOf", ObjectGetPrototypeOf, |
955 "setPrototypeOf", ObjectSetPrototypeOf, | 942 "setPrototypeOf", ObjectSetPrototypeOf, |
956 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, | 943 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, |
957 "getOwnPropertyNames", ObjectGetOwnPropertyNames, | 944 "getOwnPropertyNames", ObjectGetOwnPropertyNames, |
958 // getOwnPropertySymbols is added in symbol.js. | 945 // getOwnPropertySymbols is added in symbol.js. |
959 "is", SameValue, // ECMA-262, Edition 6, section 19.1.2.10 | 946 "is", SameValue, // ECMA-262, Edition 6, section 19.1.2.10 |
960 "isExtensible", ObjectIsExtensible, | 947 "isExtensible", ObjectIsExtensible, |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 to.ObjectIsFrozen = ObjectIsFrozen; | 1262 to.ObjectIsFrozen = ObjectIsFrozen; |
1276 to.ObjectIsSealed = ObjectIsSealed; | 1263 to.ObjectIsSealed = ObjectIsSealed; |
1277 to.ObjectKeys = ObjectKeys; | 1264 to.ObjectKeys = ObjectKeys; |
1278 }); | 1265 }); |
1279 | 1266 |
1280 %InstallToContext([ | 1267 %InstallToContext([ |
1281 "object_value_of", ObjectValueOf, | 1268 "object_value_of", ObjectValueOf, |
1282 ]); | 1269 ]); |
1283 | 1270 |
1284 }) | 1271 }) |
OLD | NEW |