| 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 686 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 697 | 697 | 
| 698   var current = ConvertDescriptorArrayToDescriptor(current_or_access); | 698   var current = ConvertDescriptorArrayToDescriptor(current_or_access); | 
| 699   var extensible = %IsExtensible(ToObject(obj)); | 699   var extensible = %IsExtensible(ToObject(obj)); | 
| 700 | 700 | 
| 701   // Error handling according to spec. | 701   // Error handling according to spec. | 
| 702   // Step 3 | 702   // Step 3 | 
| 703   if (IS_UNDEFINED(current) && !extensible) { | 703   if (IS_UNDEFINED(current) && !extensible) { | 
| 704     if (should_throw) { | 704     if (should_throw) { | 
| 705       throw MakeTypeError("define_disallowed", [p]); | 705       throw MakeTypeError("define_disallowed", [p]); | 
| 706     } else { | 706     } else { | 
| 707       return; | 707       return false; | 
| 708     } | 708     } | 
| 709   } | 709   } | 
| 710 | 710 | 
| 711   if (!IS_UNDEFINED(current)) { | 711   if (!IS_UNDEFINED(current)) { | 
| 712     // Step 5 and 6 | 712     // Step 5 and 6 | 
| 713     if ((IsGenericDescriptor(desc) || | 713     if ((IsGenericDescriptor(desc) || | 
| 714          IsDataDescriptor(desc) == IsDataDescriptor(current)) && | 714          IsDataDescriptor(desc) == IsDataDescriptor(current)) && | 
| 715         (!desc.hasEnumerable() || | 715         (!desc.hasEnumerable() || | 
| 716          SameValue(desc.isEnumerable(), current.isEnumerable())) && | 716          SameValue(desc.isEnumerable(), current.isEnumerable())) && | 
| 717         (!desc.hasConfigurable() || | 717         (!desc.hasConfigurable() || | 
| 718          SameValue(desc.isConfigurable(), current.isConfigurable())) && | 718          SameValue(desc.isConfigurable(), current.isConfigurable())) && | 
| 719         (!desc.hasWritable() || | 719         (!desc.hasWritable() || | 
| 720          SameValue(desc.isWritable(), current.isWritable())) && | 720          SameValue(desc.isWritable(), current.isWritable())) && | 
| 721         (!desc.hasValue() || | 721         (!desc.hasValue() || | 
| 722          SameValue(desc.getValue(), current.getValue())) && | 722          SameValue(desc.getValue(), current.getValue())) && | 
| 723         (!desc.hasGetter() || | 723         (!desc.hasGetter() || | 
| 724          SameValue(desc.getGet(), current.getGet())) && | 724          SameValue(desc.getGet(), current.getGet())) && | 
| 725         (!desc.hasSetter() || | 725         (!desc.hasSetter() || | 
| 726          SameValue(desc.getSet(), current.getSet()))) { | 726          SameValue(desc.getSet(), current.getSet()))) { | 
| 727       return true; | 727       return true; | 
| 728     } | 728     } | 
| 729     if (!current.isConfigurable()) { | 729     if (!current.isConfigurable()) { | 
| 730       // Step 7 | 730       // Step 7 | 
| 731       if (desc.isConfigurable() || | 731       if (desc.isConfigurable() || | 
| 732           (desc.hasEnumerable() && | 732           (desc.hasEnumerable() && | 
| 733            desc.isEnumerable() != current.isEnumerable())) { | 733            desc.isEnumerable() != current.isEnumerable())) { | 
| 734         if (should_throw) { | 734         if (should_throw) { | 
| 735           throw MakeTypeError("redefine_disallowed", [p]); | 735           throw MakeTypeError("redefine_disallowed", [p]); | 
| 736         } else { | 736         } else { | 
| 737           return; | 737           return false; | 
| 738         } | 738         } | 
| 739       } | 739       } | 
| 740       // Step 8 | 740       // Step 8 | 
| 741       if (!IsGenericDescriptor(desc)) { | 741       if (!IsGenericDescriptor(desc)) { | 
| 742         // Step 9a | 742         // Step 9a | 
| 743         if (IsDataDescriptor(current) != IsDataDescriptor(desc)) { | 743         if (IsDataDescriptor(current) != IsDataDescriptor(desc)) { | 
| 744           if (should_throw) { | 744           if (should_throw) { | 
| 745             throw MakeTypeError("redefine_disallowed", [p]); | 745             throw MakeTypeError("redefine_disallowed", [p]); | 
| 746           } else { | 746           } else { | 
| 747             return; | 747             return false; | 
| 748           } | 748           } | 
| 749         } | 749         } | 
| 750         // Step 10a | 750         // Step 10a | 
| 751         if (IsDataDescriptor(current) && IsDataDescriptor(desc)) { | 751         if (IsDataDescriptor(current) && IsDataDescriptor(desc)) { | 
| 752           if (!current.isWritable() && desc.isWritable()) { | 752           if (!current.isWritable() && desc.isWritable()) { | 
| 753             if (should_throw) { | 753             if (should_throw) { | 
| 754               throw MakeTypeError("redefine_disallowed", [p]); | 754               throw MakeTypeError("redefine_disallowed", [p]); | 
| 755             } else { | 755             } else { | 
| 756               return; | 756               return false; | 
| 757             } | 757             } | 
| 758           } | 758           } | 
| 759           if (!current.isWritable() && desc.hasValue() && | 759           if (!current.isWritable() && desc.hasValue() && | 
| 760               !SameValue(desc.getValue(), current.getValue())) { | 760               !SameValue(desc.getValue(), current.getValue())) { | 
| 761             if (should_throw) { | 761             if (should_throw) { | 
| 762               throw MakeTypeError("redefine_disallowed", [p]); | 762               throw MakeTypeError("redefine_disallowed", [p]); | 
| 763             } else { | 763             } else { | 
| 764               return; | 764               return false; | 
| 765             } | 765             } | 
| 766           } | 766           } | 
| 767         } | 767         } | 
| 768         // Step 11 | 768         // Step 11 | 
| 769         if (IsAccessorDescriptor(desc) && IsAccessorDescriptor(current)) { | 769         if (IsAccessorDescriptor(desc) && IsAccessorDescriptor(current)) { | 
| 770           if (desc.hasSetter() && !SameValue(desc.getSet(), current.getSet())) { | 770           if (desc.hasSetter() && !SameValue(desc.getSet(), current.getSet())) { | 
| 771             if (should_throw) { | 771             if (should_throw) { | 
| 772               throw MakeTypeError("redefine_disallowed", [p]); | 772               throw MakeTypeError("redefine_disallowed", [p]); | 
| 773             } else { | 773             } else { | 
| 774               return; | 774               return false; | 
| 775             } | 775             } | 
| 776           } | 776           } | 
| 777           if (desc.hasGetter() && !SameValue(desc.getGet(),current.getGet())) { | 777           if (desc.hasGetter() && !SameValue(desc.getGet(),current.getGet())) { | 
| 778             if (should_throw) { | 778             if (should_throw) { | 
| 779               throw MakeTypeError("redefine_disallowed", [p]); | 779               throw MakeTypeError("redefine_disallowed", [p]); | 
| 780             } else { | 780             } else { | 
| 781               return; | 781               return false; | 
| 782             } | 782             } | 
| 783           } | 783           } | 
| 784         } | 784         } | 
| 785       } | 785       } | 
| 786     } | 786     } | 
| 787   } | 787   } | 
| 788 | 788 | 
| 789   // Send flags - enumerable and configurable are common - writable is | 789   // Send flags - enumerable and configurable are common - writable is | 
| 790   // only send to the data descriptor. | 790   // only send to the data descriptor. | 
| 791   // Take special care if enumerable and configurable is not defined on | 791   // Take special care if enumerable and configurable is not defined on | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 874   } | 874   } | 
| 875 | 875 | 
| 876   // Step 4 - Special handling for array index. | 876   // Step 4 - Special handling for array index. | 
| 877   var index = ToUint32(p); | 877   var index = ToUint32(p); | 
| 878   if (index == ToNumber(p) && index != 4294967295) { | 878   if (index == ToNumber(p) && index != 4294967295) { | 
| 879     if ((index >= length && !length_desc.isWritable()) || | 879     if ((index >= length && !length_desc.isWritable()) || | 
| 880         !DefineObjectProperty(obj, p, desc, true)) { | 880         !DefineObjectProperty(obj, p, desc, true)) { | 
| 881       if (should_throw) { | 881       if (should_throw) { | 
| 882         throw MakeTypeError("define_disallowed", [p]); | 882         throw MakeTypeError("define_disallowed", [p]); | 
| 883       } else { | 883       } else { | 
| 884         return; | 884         return false; | 
| 885       } | 885       } | 
| 886     } | 886     } | 
| 887     if (index >= length) { | 887     if (index >= length) { | 
| 888       // TODO(mstarzinger): We should actually set the value of the property | 888       // TODO(mstarzinger): We should actually set the value of the property | 
| 889       // descriptor here and pass it to DefineObjectProperty(). Take a look at | 889       // descriptor here and pass it to DefineObjectProperty(). Take a look at | 
| 890       // ES5 section 15.4.5.1, step 4.e.i and 4.e.ii for details. | 890       // ES5 section 15.4.5.1, step 4.e.i and 4.e.ii for details. | 
| 891       obj.length = index + 1; | 891       obj.length = index + 1; | 
| 892     } | 892     } | 
| 893     return true; | 893     return true; | 
| 894   } | 894   } | 
| (...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1606 | 1606 | 
| 1607 function SetUpFunction() { | 1607 function SetUpFunction() { | 
| 1608   %CheckIsBootstrapping(); | 1608   %CheckIsBootstrapping(); | 
| 1609   InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 1609   InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 
| 1610     "bind", FunctionBind, | 1610     "bind", FunctionBind, | 
| 1611     "toString", FunctionToString | 1611     "toString", FunctionToString | 
| 1612   )); | 1612   )); | 
| 1613 } | 1613 } | 
| 1614 | 1614 | 
| 1615 SetUpFunction(); | 1615 SetUpFunction(); | 
| OLD | NEW | 
|---|