| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 function CallTrap1(handler, name, defaultTrap, x) { | 614 function CallTrap1(handler, name, defaultTrap, x) { |
| 615 return %_CallFunction(handler, x, GetTrap(handler, name, defaultTrap)); | 615 return %_CallFunction(handler, x, GetTrap(handler, name, defaultTrap)); |
| 616 } | 616 } |
| 617 | 617 |
| 618 | 618 |
| 619 function CallTrap2(handler, name, defaultTrap, x, y) { | 619 function CallTrap2(handler, name, defaultTrap, x, y) { |
| 620 return %_CallFunction(handler, x, y, GetTrap(handler, name, defaultTrap)); | 620 return %_CallFunction(handler, x, y, GetTrap(handler, name, defaultTrap)); |
| 621 } | 621 } |
| 622 | 622 |
| 623 | 623 |
| 624 // ES5 section 8.12.2. | |
| 625 function GetProperty(obj, p) { | |
| 626 if (%IsJSProxy(obj)) { | |
| 627 var handler = %GetHandler(obj); | |
| 628 var descriptor = CallTrap1(obj, "getPropertyDescriptor", void 0, p); | |
| 629 if (IS_UNDEFINED(descriptor)) return descriptor; | |
| 630 var desc = ToCompletePropertyDescriptor(descriptor); | |
| 631 if (!desc.isConfigurable()) { | |
| 632 throw MakeTypeError("proxy_prop_not_configurable", | |
| 633 [handler, "getPropertyDescriptor", p, descriptor]); | |
| 634 } | |
| 635 return desc; | |
| 636 } | |
| 637 var prop = GetOwnProperty(obj); | |
| 638 if (!IS_UNDEFINED(prop)) return prop; | |
| 639 var proto = %GetPrototype(obj); | |
| 640 if (IS_NULL(proto)) return void 0; | |
| 641 return GetProperty(proto, p); | |
| 642 } | |
| 643 | |
| 644 | |
| 645 // ES5 section 8.12.6 | |
| 646 function HasProperty(obj, p) { | |
| 647 if (%IsJSProxy(obj)) { | |
| 648 var handler = %GetHandler(obj); | |
| 649 return ToBoolean(CallTrap1(handler, "has", DerivedHasTrap, p)); | |
| 650 } | |
| 651 var desc = GetProperty(obj, p); | |
| 652 return IS_UNDEFINED(desc) ? false : true; | |
| 653 } | |
| 654 | |
| 655 | |
| 656 // ES5 section 8.12.1. | 624 // ES5 section 8.12.1. |
| 657 function GetOwnProperty(obj, v) { | 625 function GetOwnProperty(obj, v) { |
| 658 var p = ToString(v); | 626 var p = ToString(v); |
| 659 if (%IsJSProxy(obj)) { | 627 if (%IsJSProxy(obj)) { |
| 660 var handler = %GetHandler(obj); | 628 var handler = %GetHandler(obj); |
| 661 var descriptor = CallTrap1(handler, "getOwnPropertyDescriptor", void 0, p); | 629 var descriptor = CallTrap1(handler, "getOwnPropertyDescriptor", void 0, p); |
| 662 if (IS_UNDEFINED(descriptor)) return descriptor; | 630 if (IS_UNDEFINED(descriptor)) return descriptor; |
| 663 var desc = ToCompletePropertyDescriptor(descriptor); | 631 var desc = ToCompletePropertyDescriptor(descriptor); |
| 664 if (!desc.isConfigurable()) { | 632 if (!desc.isConfigurable()) { |
| 665 throw MakeTypeError("proxy_prop_not_configurable", | 633 throw MakeTypeError("proxy_prop_not_configurable", |
| (...skipping 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1538 // ---------------------------------------------------------------------------- | 1506 // ---------------------------------------------------------------------------- |
| 1539 | 1507 |
| 1540 function SetupFunction() { | 1508 function SetupFunction() { |
| 1541 InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 1509 InstallFunctions($Function.prototype, DONT_ENUM, $Array( |
| 1542 "bind", FunctionBind, | 1510 "bind", FunctionBind, |
| 1543 "toString", FunctionToString | 1511 "toString", FunctionToString |
| 1544 )); | 1512 )); |
| 1545 } | 1513 } |
| 1546 | 1514 |
| 1547 SetupFunction(); | 1515 SetupFunction(); |
| OLD | NEW |