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 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 if (IS_UNDEFINED(desc)) return false; | 302 if (IS_UNDEFINED(desc)) return false; |
303 return !(IsAccessorDescriptor(desc) || IsDataDescriptor(desc)); | 303 return !(IsAccessorDescriptor(desc) || IsDataDescriptor(desc)); |
304 } | 304 } |
305 | 305 |
306 | 306 |
307 function IsInconsistentDescriptor(desc) { | 307 function IsInconsistentDescriptor(desc) { |
308 return IsAccessorDescriptor(desc) && IsDataDescriptor(desc); | 308 return IsAccessorDescriptor(desc) && IsDataDescriptor(desc); |
309 } | 309 } |
310 | 310 |
311 | 311 |
312 // ES5 8.10.4 | |
313 function FromPropertyDescriptor(desc) { | |
314 if (IS_UNDEFINED(desc)) return desc; | |
315 | |
316 if (IsDataDescriptor(desc)) { | |
317 return { value: desc.getValue(), | |
318 writable: desc.isWritable(), | |
319 enumerable: desc.isEnumerable(), | |
320 configurable: desc.isConfigurable() }; | |
321 } | |
322 // Must be an AccessorDescriptor then. We never return a generic descriptor. | |
323 return { get: desc.getGet(), | |
324 set: desc.getSet(), | |
325 enumerable: desc.isEnumerable(), | |
326 configurable: desc.isConfigurable() }; | |
327 } | |
328 | |
329 | |
330 // Harmony Proxies | 312 // Harmony Proxies |
331 function FromGenericPropertyDescriptor(desc) { | 313 function FromGenericPropertyDescriptor(desc) { |
332 if (IS_UNDEFINED(desc)) return desc; | 314 if (IS_UNDEFINED(desc)) return desc; |
333 var obj = new GlobalObject(); | 315 var obj = new GlobalObject(); |
334 | 316 |
335 if (desc.hasValue()) { | 317 if (desc.hasValue()) { |
336 %AddNamedProperty(obj, "value", desc.getValue(), NONE); | 318 %AddNamedProperty(obj, "value", desc.getValue(), NONE); |
337 } | 319 } |
338 if (desc.hasWritable()) { | 320 if (desc.hasWritable()) { |
339 %AddNamedProperty(obj, "writable", desc.isWritable(), NONE); | 321 %AddNamedProperty(obj, "writable", desc.isWritable(), NONE); |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 return %_Call(GetTrap(handler, name, defaultTrap), handler, x); | 544 return %_Call(GetTrap(handler, name, defaultTrap), handler, x); |
563 } | 545 } |
564 | 546 |
565 | 547 |
566 function CallTrap2(handler, name, defaultTrap, x, y) { | 548 function CallTrap2(handler, name, defaultTrap, x, y) { |
567 return %_Call(GetTrap(handler, name, defaultTrap), handler, x, y); | 549 return %_Call(GetTrap(handler, name, defaultTrap), handler, x, y); |
568 } | 550 } |
569 | 551 |
570 | 552 |
571 // ES5 section 8.12.1. | 553 // ES5 section 8.12.1. |
| 554 // TODO(jkummerow): Deprecated. Migrate all callers to |
| 555 // ObjectGetOwnPropertyDescriptor and delete this. |
572 function GetOwnPropertyJS(obj, v) { | 556 function GetOwnPropertyJS(obj, v) { |
573 var p = TO_NAME(v); | 557 var p = TO_NAME(v); |
574 if (%_IsJSProxy(obj)) { | 558 if (%_IsJSProxy(obj)) { |
575 // TODO(rossberg): adjust once there is a story for symbols vs proxies. | 559 // TODO(rossberg): adjust once there is a story for symbols vs proxies. |
576 if (IS_SYMBOL(v)) return UNDEFINED; | 560 if (IS_SYMBOL(v)) return UNDEFINED; |
577 | 561 |
578 var handler = %GetHandler(obj); | 562 var handler = %GetHandler(obj); |
579 var descriptor = CallTrap1( | 563 var descriptor = CallTrap1( |
580 handler, "getOwnPropertyDescriptor", UNDEFINED, p); | 564 handler, "getOwnPropertyDescriptor", UNDEFINED, p); |
581 if (IS_UNDEFINED(descriptor)) return descriptor; | 565 if (IS_UNDEFINED(descriptor)) return descriptor; |
582 var desc = ToCompletePropertyDescriptor(descriptor); | 566 var desc = ToCompletePropertyDescriptor(descriptor); |
583 if (!desc.isConfigurable()) { | 567 if (!desc.isConfigurable()) { |
584 throw MakeTypeError(kProxyPropNotConfigurable, | 568 throw MakeTypeError(kProxyPropNotConfigurable, |
585 handler, p, "getOwnPropertyDescriptor"); | 569 handler, p, "getOwnPropertyDescriptor"); |
586 } | 570 } |
587 return desc; | 571 return desc; |
588 } | 572 } |
589 | 573 |
590 // GetOwnProperty returns an array indexed by the constants | 574 // GetOwnProperty returns an array indexed by the constants |
591 // defined in macros.py. | 575 // defined in macros.py. |
592 // If p is not a property on obj undefined is returned. | 576 // If p is not a property on obj undefined is returned. |
593 var props = %GetOwnProperty(TO_OBJECT(obj), p); | 577 var props = %GetOwnProperty_Legacy(TO_OBJECT(obj), p); |
594 | 578 |
595 return ConvertDescriptorArrayToDescriptor(props); | 579 return ConvertDescriptorArrayToDescriptor(props); |
596 } | 580 } |
597 | 581 |
598 | 582 |
599 // ES5 section 8.12.7. | 583 // ES5 section 8.12.7. |
600 function Delete(obj, p, should_throw) { | 584 function Delete(obj, p, should_throw) { |
601 var desc = GetOwnPropertyJS(obj, p); | 585 var desc = GetOwnPropertyJS(obj, p); |
602 if (IS_UNDEFINED(desc)) return true; | 586 if (IS_UNDEFINED(desc)) return true; |
603 if (desc.isConfigurable()) { | 587 if (desc.isConfigurable()) { |
(...skipping 30 matching lines...) Expand all Loading... |
634 } else { | 618 } else { |
635 return false; | 619 return false; |
636 } | 620 } |
637 } | 621 } |
638 return true; | 622 return true; |
639 } | 623 } |
640 | 624 |
641 | 625 |
642 // ES5 8.12.9. | 626 // ES5 8.12.9. |
643 function DefineObjectProperty(obj, p, desc, should_throw) { | 627 function DefineObjectProperty(obj, p, desc, should_throw) { |
644 var current_array = %GetOwnProperty(obj, TO_NAME(p)); | 628 var current_array = %GetOwnProperty_Legacy(obj, TO_NAME(p)); |
645 var current = ConvertDescriptorArrayToDescriptor(current_array); | 629 var current = ConvertDescriptorArrayToDescriptor(current_array); |
646 var extensible = %IsExtensible(obj); | 630 var extensible = %IsExtensible(obj); |
647 | 631 |
648 // Error handling according to spec. | 632 // Error handling according to spec. |
649 // Step 3 | 633 // Step 3 |
650 if (IS_UNDEFINED(current) && !extensible) { | 634 if (IS_UNDEFINED(current) && !extensible) { |
651 if (should_throw) { | 635 if (should_throw) { |
652 throw MakeTypeError(kDefineDisallowed, p); | 636 throw MakeTypeError(kDefineDisallowed, p); |
653 } else { | 637 } else { |
654 return false; | 638 return false; |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 if (IS_SPEC_OBJECT(obj)) { | 866 if (IS_SPEC_OBJECT(obj)) { |
883 %SetPrototype(obj, proto); | 867 %SetPrototype(obj, proto); |
884 } | 868 } |
885 | 869 |
886 return obj; | 870 return obj; |
887 } | 871 } |
888 | 872 |
889 | 873 |
890 // ES6 section 19.1.2.6 | 874 // ES6 section 19.1.2.6 |
891 function ObjectGetOwnPropertyDescriptor(obj, p) { | 875 function ObjectGetOwnPropertyDescriptor(obj, p) { |
892 var desc = GetOwnPropertyJS(TO_OBJECT(obj), p); | 876 return %GetOwnProperty(obj, p); |
893 return FromPropertyDescriptor(desc); | |
894 } | 877 } |
895 | 878 |
896 | 879 |
897 // For Harmony proxies | 880 // For Harmony proxies |
898 function ToNameArray(obj, trap, includeSymbols) { | 881 function ToNameArray(obj, trap, includeSymbols) { |
899 if (!IS_SPEC_OBJECT(obj)) { | 882 if (!IS_SPEC_OBJECT(obj)) { |
900 throw MakeTypeError(kProxyNonObjectPropNames, trap, obj); | 883 throw MakeTypeError(kProxyNonObjectPropNames, trap, obj); |
901 } | 884 } |
902 var n = TO_UINT32(obj.length); | 885 var n = TO_UINT32(obj.length); |
903 var array = new GlobalArray(n); | 886 var array = new GlobalArray(n); |
(...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1811 | 1794 |
1812 %InstallToContext([ | 1795 %InstallToContext([ |
1813 "global_eval_fun", GlobalEval, | 1796 "global_eval_fun", GlobalEval, |
1814 "object_value_of", ObjectValueOf, | 1797 "object_value_of", ObjectValueOf, |
1815 "object_to_string", ObjectToString, | 1798 "object_to_string", ObjectToString, |
1816 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, | 1799 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, |
1817 "to_complete_property_descriptor", ToCompletePropertyDescriptor, | 1800 "to_complete_property_descriptor", ToCompletePropertyDescriptor, |
1818 ]); | 1801 ]); |
1819 | 1802 |
1820 }) | 1803 }) |
OLD | NEW |