<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>200562</bug_id>
          
          <creation_ts>2019-08-08 21:38:29 -0700</creation_ts>
          <short_desc>[JSC] Refactor our [[Put]] to match to the latest spec</short_desc>
          <delta_ts>2019-08-09 01:56:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>199864</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559797</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-08 21:38:29 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559831</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-09 01:56:25 -0700</bug_when>
    <thetext>The refactoring design is the following,

1. Remove JSObject::put hook
2. Add JSObject::attemptToSetOwnProperty, which only does [[Put]]’s own setter part. It does not involve any [[Prototype]] traversing etc.
3. Define non-virtual JSObject::put method, which does traversing and static-property initialization too.
4. (2) is only called when the structure has some flags. This flag must be correctly maintained by structure transition.
5. (2) correctly set PutPropertySlot’s status
6. Even (2) is invoked, we still see cacheable status through PutPropertySlot. Each attemptToSetOwnProperty implementation should take care of maintaining it.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>