Changeset 51760 in webkit


Ignore:
Timestamp:
Dec 7, 2009 5:50:57 AM (14 years ago)
Author:
oliver@apple.com
Message:

Object.create fails if properties on the descriptor are getters
https://bugs.webkit.org/show_bug.cgi?id=32219

Reviewed by Maciej Stachowiak.

Correctly initialise the PropertySlots with the descriptor object.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r51739 r51760  
     12009-12-07  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        Object.create fails if properties on the descriptor are getters
     6        https://bugs.webkit.org/show_bug.cgi?id=32219
     7
     8        Correctly initialise the PropertySlots with the descriptor object.
     9
     10        * runtime/ObjectConstructor.cpp:
     11        (JSC::toPropertyDescriptor):
     12
    1132009-12-06  Maciej Stachowiak  <mjs@apple.com>
    214
  • trunk/JavaScriptCore/runtime/ObjectConstructor.cpp

    r49734 r51760  
    149149    JSObject* description = asObject(in);
    150150
    151     PropertySlot enumerableSlot;
     151    PropertySlot enumerableSlot(description);
    152152    if (description->getPropertySlot(exec, exec->propertyNames().enumerable, enumerableSlot)) {
    153153        desc.setEnumerable(enumerableSlot.getValue(exec, exec->propertyNames().enumerable).toBoolean(exec));
     
    156156    }
    157157
    158     PropertySlot configurableSlot;
     158    PropertySlot configurableSlot(description);
    159159    if (description->getPropertySlot(exec, exec->propertyNames().configurable, configurableSlot)) {
    160160        desc.setConfigurable(configurableSlot.getValue(exec, exec->propertyNames().configurable).toBoolean(exec));
     
    164164
    165165    JSValue value;
    166     PropertySlot valueSlot;
     166    PropertySlot valueSlot(description);
    167167    if (description->getPropertySlot(exec, exec->propertyNames().value, valueSlot)) {
    168168        desc.setValue(valueSlot.getValue(exec, exec->propertyNames().value));
     
    171171    }
    172172
    173     PropertySlot writableSlot;
     173    PropertySlot writableSlot(description);
    174174    if (description->getPropertySlot(exec, exec->propertyNames().writable, writableSlot)) {
    175175        desc.setWritable(writableSlot.getValue(exec, exec->propertyNames().writable).toBoolean(exec));
     
    178178    }
    179179
    180     PropertySlot getSlot;
     180    PropertySlot getSlot(description);
    181181    if (description->getPropertySlot(exec, exec->propertyNames().get, getSlot)) {
    182182        JSValue get = getSlot.getValue(exec, exec->propertyNames().get);
     
    194194    }
    195195
    196     PropertySlot setSlot;
     196    PropertySlot setSlot(description);
    197197    if (description->getPropertySlot(exec, exec->propertyNames().set, setSlot)) {
    198198        JSValue set = setSlot.getValue(exec, exec->propertyNames().set);
  • trunk/LayoutTests/ChangeLog

    r51757 r51760  
     12009-12-07  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        Object.create fails if properties on the descriptor are getters
     6        https://bugs.webkit.org/show_bug.cgi?id=32219
     7
     8        Add tests for descriptors using getters instead of raw values
     9
     10        * fast/js/Object-create-expected.txt:
     11        * fast/js/script-tests/Object-create.js:
     12        (valueGet):
     13        (get var):
     14        (get var.DescriptorWithGetGetter.foo.Object.create.):
     15        (get var.DescriptorWithSetGetter.foo.Object.create.):
     16
    1172009-12-06  Oliver Hunt  <oliver@apple.com>
    218
  • trunk/LayoutTests/fast/js/Object-create-expected.txt

    r48568 r51760  
    1414PASS Object.getPrototypeOf(Object.create(Array.prototype)) is Array.prototype
    1515PASS Object.getPrototypeOf(Object.create(null)) is null
     16PASS Object.create(null, DescriptorWithValueGetter).foo is true
     17PASS Object.create(null, DescriptorWithEnumerableGetter).foo is true
     18PASS Object.create(null, DescriptorWithConfigurableGetter).foo is true
     19PASS Object.create(null, DescriptorWithWritableGetter).foo is true
     20PASS Object.create(null, DescriptorWithGetGetter).foo is true
     21PASS Object.create(null, DescriptorWithSetGetter).foo is true
    1622PASS successfullyParsed is true
    1723
  • trunk/LayoutTests/fast/js/script-tests/Object-create.js

    r48651 r51760  
    1111shouldBe("Object.getPrototypeOf(Object.create(Array.prototype))", "Array.prototype");
    1212shouldBe("Object.getPrototypeOf(Object.create(null))", "null");
     13function valueGet() { return true; }
     14var DescriptorWithValueGetter = { foo: Object.create(null, { value: { get: valueGet }})};
     15var DescriptorWithEnumerableGetter = { foo: Object.create(null, { value: {value: true}, enumerable: { get: valueGet }})};
     16var DescriptorWithConfigurableGetter = { foo: Object.create(null, { value: {value: true}, configurable: { get: valueGet }})};
     17var DescriptorWithWritableGetter = { foo: Object.create(null, { value: {value: true}, writable: { get: valueGet }})};
     18var DescriptorWithGetGetter = { foo: Object.create(null, { get: { get: function() { return valueGet } }})};
     19var DescriptorWithSetGetter = { foo: Object.create(null, { get: { value: valueGet}, set: { get: function(){ return valueGet; } }})};
     20shouldBeTrue("Object.create(null, DescriptorWithValueGetter).foo");
     21shouldBeTrue("Object.create(null, DescriptorWithEnumerableGetter).foo");
     22shouldBeTrue("Object.create(null, DescriptorWithConfigurableGetter).foo");
     23shouldBeTrue("Object.create(null, DescriptorWithWritableGetter).foo");
     24shouldBeTrue("Object.create(null, DescriptorWithGetGetter).foo");
     25shouldBeTrue("Object.create(null, DescriptorWithSetGetter).foo");
    1326successfullyParsed = true;
Note: See TracChangeset for help on using the changeset viewer.