| 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 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 | 468 |
| 469 return desc; | 469 return desc; |
| 470 } | 470 } |
| 471 | 471 |
| 472 | 472 |
| 473 // For Harmony proxies. | 473 // For Harmony proxies. |
| 474 function GetTrap(handler, name, defaultTrap) { | 474 function GetTrap(handler, name, defaultTrap) { |
| 475 var trap = handler[name]; | 475 var trap = handler[name]; |
| 476 if (IS_UNDEFINED(trap)) { | 476 if (IS_UNDEFINED(trap)) { |
| 477 if (IS_UNDEFINED(defaultTrap)) { | 477 if (IS_UNDEFINED(defaultTrap)) { |
| 478 throw MakeTypeError(kProxyHandlerTrapMissing, handler, name); | 478 throw MakeTypeError(kIllegalInvocation); |
| 479 } | 479 } |
| 480 trap = defaultTrap; | 480 trap = defaultTrap; |
| 481 } else if (!IS_CALLABLE(trap)) { | 481 } else if (!IS_CALLABLE(trap)) { |
| 482 throw MakeTypeError(kProxyHandlerTrapMustBeCallable, handler, name); | 482 throw MakeTypeError(kIllegalInvocation); |
| 483 } | 483 } |
| 484 return trap; | 484 return trap; |
| 485 } | 485 } |
| 486 | 486 |
| 487 | 487 |
| 488 function CallTrap1(handler, name, defaultTrap, x) { | 488 function CallTrap1(handler, name, defaultTrap, x) { |
| 489 return %_Call(GetTrap(handler, name, defaultTrap), handler, x); | 489 return %_Call(GetTrap(handler, name, defaultTrap), handler, x); |
| 490 } | 490 } |
| 491 | 491 |
| 492 | 492 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 503 if (%_IsJSProxy(obj)) { | 503 if (%_IsJSProxy(obj)) { |
| 504 // TODO(rossberg): adjust once there is a story for symbols vs proxies. | 504 // TODO(rossberg): adjust once there is a story for symbols vs proxies. |
| 505 if (IS_SYMBOL(v)) return UNDEFINED; | 505 if (IS_SYMBOL(v)) return UNDEFINED; |
| 506 | 506 |
| 507 var handler = %GetHandler(obj); | 507 var handler = %GetHandler(obj); |
| 508 var descriptor = CallTrap1( | 508 var descriptor = CallTrap1( |
| 509 handler, "getOwnPropertyDescriptor", UNDEFINED, p); | 509 handler, "getOwnPropertyDescriptor", UNDEFINED, p); |
| 510 if (IS_UNDEFINED(descriptor)) return descriptor; | 510 if (IS_UNDEFINED(descriptor)) return descriptor; |
| 511 var desc = ToCompletePropertyDescriptor(descriptor); | 511 var desc = ToCompletePropertyDescriptor(descriptor); |
| 512 if (!desc.isConfigurable()) { | 512 if (!desc.isConfigurable()) { |
| 513 throw MakeTypeError(kProxyPropNotConfigurable, | 513 throw MakeTypeError(kIllegalInvocation); |
| 514 handler, p, "getOwnPropertyDescriptor"); | |
| 515 } | 514 } |
| 516 return desc; | 515 return desc; |
| 517 } | 516 } |
| 518 | 517 |
| 519 // GetOwnProperty returns an array indexed by the constants | 518 // GetOwnProperty returns an array indexed by the constants |
| 520 // defined in macros.py. | 519 // defined in macros.py. |
| 521 // If p is not a property on obj undefined is returned. | 520 // If p is not a property on obj undefined is returned. |
| 522 var props = %GetOwnProperty_Legacy(TO_OBJECT(obj), p); | 521 var props = %GetOwnProperty_Legacy(TO_OBJECT(obj), p); |
| 523 | 522 |
| 524 return ConvertDescriptorArrayToDescriptor(props); | 523 return ConvertDescriptorArrayToDescriptor(props); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 536 | 535 |
| 537 // Harmony proxies. | 536 // Harmony proxies. |
| 538 function DefineProxyProperty(obj, p, attributes, should_throw) { | 537 function DefineProxyProperty(obj, p, attributes, should_throw) { |
| 539 // TODO(rossberg): adjust once there is a story for symbols vs proxies. | 538 // TODO(rossberg): adjust once there is a story for symbols vs proxies. |
| 540 if (IS_SYMBOL(p)) return false; | 539 if (IS_SYMBOL(p)) return false; |
| 541 | 540 |
| 542 var handler = %GetHandler(obj); | 541 var handler = %GetHandler(obj); |
| 543 var result = CallTrap2(handler, "defineProperty", UNDEFINED, p, attributes); | 542 var result = CallTrap2(handler, "defineProperty", UNDEFINED, p, attributes); |
| 544 if (!result) { | 543 if (!result) { |
| 545 if (should_throw) { | 544 if (should_throw) { |
| 546 throw MakeTypeError(kProxyTrapReturned, | 545 throw MakeTypeError(kIllegalInvocation); |
| 547 handler, "false", "defineProperty"); | |
| 548 } else { | 546 } else { |
| 549 return false; | 547 return false; |
| 550 } | 548 } |
| 551 } | 549 } |
| 552 return true; | 550 return true; |
| 553 } | 551 } |
| 554 | 552 |
| 555 | 553 |
| 556 // ES6 9.1.6 [[DefineOwnProperty]](P, Desc) | 554 // ES6 9.1.6 [[DefineOwnProperty]](P, Desc) |
| 557 function DefineObjectProperty(obj, p, desc, should_throw) { | 555 function DefineObjectProperty(obj, p, desc, should_throw) { |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 return DefineObjectProperty(obj, p, desc, should_throw); | 773 return DefineObjectProperty(obj, p, desc, should_throw); |
| 776 } | 774 } |
| 777 } | 775 } |
| 778 | 776 |
| 779 | 777 |
| 780 // ES6 section 19.1.2.9 | 778 // ES6 section 19.1.2.9 |
| 781 function ObjectGetPrototypeOf(obj) { | 779 function ObjectGetPrototypeOf(obj) { |
| 782 return %_GetPrototype(TO_OBJECT(obj)); | 780 return %_GetPrototype(TO_OBJECT(obj)); |
| 783 } | 781 } |
| 784 | 782 |
| 785 // ES6 section 19.1.2.19. | 783 // ES6 section 19.1.2.18. |
| 786 function ObjectSetPrototypeOf(obj, proto) { | 784 function ObjectSetPrototypeOf(obj, proto) { |
| 787 CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf"); | 785 CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf"); |
| 788 | 786 |
| 789 if (proto !== null && !IS_SPEC_OBJECT(proto)) { | 787 if (proto !== null && !IS_SPEC_OBJECT(proto)) { |
| 790 throw MakeTypeError(kProtoObjectOrNull, proto); | 788 throw MakeTypeError(kProtoObjectOrNull, proto); |
| 791 } | 789 } |
| 792 | 790 |
| 793 if (IS_SPEC_OBJECT(obj)) { | 791 if (IS_SPEC_OBJECT(obj)) { |
| 794 %SetPrototype(obj, proto); | 792 %SetPrototype(obj, proto); |
| 795 } | 793 } |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1454 to.ObjectIsSealed = ObjectIsSealed; | 1452 to.ObjectIsSealed = ObjectIsSealed; |
| 1455 to.ObjectKeys = ObjectKeys; | 1453 to.ObjectKeys = ObjectKeys; |
| 1456 }); | 1454 }); |
| 1457 | 1455 |
| 1458 %InstallToContext([ | 1456 %InstallToContext([ |
| 1459 "global_eval_fun", GlobalEval, | 1457 "global_eval_fun", GlobalEval, |
| 1460 "object_value_of", ObjectValueOf, | 1458 "object_value_of", ObjectValueOf, |
| 1461 ]); | 1459 ]); |
| 1462 | 1460 |
| 1463 }) | 1461 }) |
| OLD | NEW |