• barraclough@apple.com's avatar
    [[Get]]/[[Put]] for primitives should not wrap on strict accessor call · dca6b2ea
    barraclough@apple.com authored
    Reviewed by Oliver Hunt.
    In the case of [[Get]], this is a pretty trivial bug - just don't wrap
    primitives at the point you call a getter.
    For setters, this is a little more involved, since we have already wrapped
    the value up in a synthesized object. Stop doing so. There is also a further
    subtely, that in strict mode all attempts to create a new data property on
    the object should throw.
    * runtime/JSCell.cpp:
        - [[Put]] to a string primitive should use JSValue::putToPrimitive.
    * runtime/JSObject.cpp:
        - Remove static function called in one place.
    * runtime/JSObject.h:
        - [[Put]] to a non-cell JSValue should use JSValue::putToPrimitive.
    * runtime/JSValue.cpp:
        - Add support for synthesizing the prototype of strings.
        - Added, implements [[Put]] for primitive bases, per 8.7.2.
    * runtime/JSValue.h:
        - Add declaration for JSValue::putToPrimitive.
    * runtime/PropertySlot.cpp:
        - Don't call ToObject on primitive this values.
    * fast/js/mozilla/strict/
    * fast/js/primitive-property-access-edge-cases-expected.txt:
    * fast/js/read-modify-eval-expected.txt:
    * fast/js/script-tests/primitive-property-access-edge-cases.js:
    * fast/js/script-tests/read-modify-eval.js:
        - Added new test cases & updated test results.
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@109177 268f45cc-cd09-0410-ab3c-d52691b4dbfc
PropertySlot.cpp 1.45 KB