Ignore:
Timestamp:
Feb 25, 2016, 4:15:58 PM (9 years ago)
Author:
[email protected]
Message:

[ES6] for...in iteration doesn't comply with the specification
https://bugs.webkit.org/show_bug.cgi?id=154665

Reviewed by Michael Saboff.

If you read ForIn/OfHeadEvaluation inside the spec:
https://tc39.github.io/ecma262/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind
It calls EnumerateObjectProperties(obj) to get a set of properties
to enumerate over (it models this "set" as en ES6 generator function).
EnumerateObjectProperties is defined in section 13.7.5.15:
https://tc39.github.io/ecma262/#sec-enumerate-object-properties
The implementation calls Reflect.getOwnPropertyDescriptor(.) on the
properties it sees. We must do the same by modeling the operation as
a GetOwnProperty instead of a HasProperty internal method call.

  • jit/JITOperations.cpp:
  • jit/JITOperations.h:
  • runtime/CommonSlowPaths.cpp:

(JSC::SLOW_PATH_DECL):

  • runtime/JSObject.cpp:

(JSC::JSObject::hasProperty):
(JSC::JSObject::hasPropertyGeneric):

  • runtime/JSObject.h:
  • tests/stress/proxy-get-own-property.js:

(assert):
(let.handler.getOwnPropertyDescriptor):
(i.set assert):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r197136 r197144  
    479479    JS_EXPORT_PRIVATE bool hasProperty(ExecState*, PropertyName) const;
    480480    JS_EXPORT_PRIVATE bool hasProperty(ExecState*, unsigned propertyName) const;
     481    bool hasPropertyGeneric(ExecState*, PropertyName, PropertySlot::InternalMethodType) const;
     482    bool hasPropertyGeneric(ExecState*, unsigned propertyName, PropertySlot::InternalMethodType) const;
    481483    bool hasOwnProperty(ExecState*, PropertyName) const;
    482484    bool hasOwnProperty(ExecState*, unsigned) const;
Note: See TracChangeset for help on using the changeset viewer.