<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Our parser doesn't properly parse default parameter expressions in a class method"
   href="https://bugs.webkit.org/show_bug.cgi?id=157872#c19">Comment # 19</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Our parser doesn't properly parse default parameter expressions in a class method"
   href="https://bugs.webkit.org/show_bug.cgi?id=157872">bug 157872</a>
              from <span class="vcard"><a class="email" href="mailto:ticaiolima&#64;gmail.com" title="Caio Lima &lt;ticaiolima&#64;gmail.com&gt;"> <span class="fn">Caio Lima</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=157872#c18">comment #18</a>)
<span class="quote">&gt; Comment on <span class=""><a href="attachment.cgi?id=280110&amp;action=diff" name="attach_280110" title="Patch">attachment 280110</a> <a href="attachment.cgi?id=280110&amp;action=edit" title="Patch">[details]</a></span>
&gt; Patch
&gt; 
&gt; View in context:
&gt; <a href="https://bugs.webkit.org/attachment.cgi?id=280110&amp;action=review">https://bugs.webkit.org/attachment.cgi?id=280110&amp;action=review</a>
&gt; 
&gt; r=me wth comments
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:1929
&gt; &gt; +    functionScope-&gt;setExpectedSuperBinding(expectedSuperBinding);
&gt; 
&gt; Can you remove the duplicate call below to setExpectedSuperKind(...)?</span >

Sure. Actually I can just remove the call on line :1951 (inside loadCachedFunction), since the &quot;expectedSuperBinding&quot; can change &quot;if (m_defaultConstructorKind != ConstructorKind::None)&quot;.

<span class="quote">&gt; Also, I wonder if we should be calling setConstructKind up here too. I need
&gt; to think about it more.</span >

Actually, I think so. I tested the following sample and got SyntaxError:

class C {
    constructor() {
        this._x = 45;
    }

    get foo() {
        return this._x;
    }
}

class D extends C {

    constructor(x = () =&gt; super()) {
        x();
    }

    x() {
        return super.foo; 
    }
}

if ((new D).x() === 45) {
    print(&quot;passed&quot;);
} else {
    print(&quot;failed&quot;);
}

The result in v8 and Spider monkey was correct. I set it in the beginning of function and things worked properly.

<span class="quote">&gt; &gt; Source/JavaScriptCore/tests/stress/arrow-functions-as-default-parameter-values.js:162
&gt; &gt; +    class D extends C {
&gt; &gt; +        x(y = (y = () =&gt; super.foo) =&gt; {return y()}) {
&gt; &gt; +            return y();
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Can you also add a test where we use super inside an arrow function inside a
&gt; derived constructor's default parameter expression?</span >

<span class="quote">&gt; &gt; LayoutTests/js/script-tests/parser-syntax-check.js:746
&gt; &gt; +valid(&quot;class C { constructor() { this._x = 45; } get foo() { return this._x;} } class D extends C { x(y = (y = () =&gt; super.foo) =&gt; {return y()}) { return y(); } }&quot;)
&gt; 
&gt; Ditto for a constructor's syntax here</span >

No problem.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>