<?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>157908</bug_id>
          
          <creation_ts>2016-05-19 12:11:10 -0700</creation_ts>
          <short_desc>arrow function lexical environment should reuse the same environment as the function&apos;s lexical environment where possible</short_desc>
          <delta_ts>2016-05-20 08:44:04 -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>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1194857</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 12:11:10 -0700</bug_when>
    <thetext>I removed this recently, but it causes a 7x regression in Sunspider/tofte which caused 5% regression in JetStream.
It&apos;s probably valuable to reuse the same environment when possible for functions that use eval and have simple parameter lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194867</commentid>
    <comment_count>1</comment_count>
      <attachid>279409</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 12:24:50 -0700</bug_when>
    <thetext>Created attachment 279409
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194869</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-05-19 12:28:08 -0700</bug_when>
    <thetext>Sunspider/tofte uses arrow functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194890</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 13:10:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Sunspider/tofte uses arrow functions?

It uses eval.
For example:
function foo(x, y, z // Note: simple parameter list) {
    ... do some stuff
    eval(...) // Note must be direct eval
    ... do more stuff
}

My patch made such &apos;foo&apos; functions slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194891</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 13:10:58 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/201176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194896</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 13:13:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Sunspider/tofte uses arrow functions?
&gt; 
&gt; It uses eval.
&gt; For example:
&gt; function foo(x, y, z // Note: simple parameter list) {
&gt;     ... do some stuff
&gt;     eval(...) // Note must be direct eval
&gt;     ... do more stuff
&gt; }
&gt; 
&gt; My patch made such &apos;foo&apos; functions slower.

To elaborate more, because we don&apos;t know what the eval will do, the eval
may use arrow functions. So any function with a direct eval uses arrow functions.
My previous patch made us always allocate a new environment for an arrow function&apos;s
&apos;this&apos;, new.target, etc. But, this patch makes it so that we reuse the already
created activation when doing so is sound. It&apos;s sound to do this when the function
&apos;foo&apos; has a simple parameter list.
It&apos;s not sound to do this if it doesn&apos;t have a simple parameter list, i.e:

function foo({a = ()=&gt;this}) {
    ...
    eval(...)
    ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195135</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-20 08:44:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; landed in:
&gt; http://trac.webkit.org/changeset/201176

Confirmed 5% JetStream progression from this change on iOS.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279409</attachid>
            <date>2016-05-19 12:24:50 -0700</date>
            <delta_ts>2016-05-19 12:27:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>4739</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE2LTA1LTE5ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IGFycm93IGZ1bmN0aW9uIGxleGljYWwgZW52aXJvbm1lbnQgc2hvdWxkIHJldXNlIHRoZSBzYW1l
IGVudmlyb25tZW50IGFzIHRoZSBmdW5jdGlvbidzIGxleGljYWwgZW52aXJvbm1lbnQgd2hlcmUg
cG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NzkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlIGNhbiBzYWZlbHkgY29tYmluZSB0aGVzZSB0d28gZW52aXJvbm1lbnQgd2hlbiB3ZSBoYXZl
CisgICAgICAgIGEgc2ltcGxlIHBhcmFtZXRlciBsaXN0IChubyBkZWZhdWx0IHBhcmFtZXRlcnMs
IG5vIGRlc3RydWN0cmluZyBwYXJhbWV0ZXJzKS4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0
aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9u
Q29udGV4dFNjb3BlSWZOZWVkZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorCiAyMDE2LTA1LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDIwMTE3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzUsNyArNTc1LDgg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KIAogICAg
IGlmIChuZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoKSAmJiAhY29kZUJsb2NrLT5p
c0Fycm93RnVuY3Rpb24oKSkgewotICAgICAgICBpbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRl
eHRTY29wZUlmTmVlZGVkKCk7CisgICAgICAgIGJvb2wgY2FuUmV1c2VMZXhpY2FsRW52aXJvbm1l
bnQgPSBpc1NpbXBsZVBhcmFtZXRlckxpc3Q7CisgICAgICAgIGluaXRpYWxpemVBcnJvd0Z1bmN0
aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoZnVuY3Rpb25TeW1ib2xUYWJsZSwgY2FuUmV1c2VMZXhp
Y2FsRW52aXJvbm1lbnQpOwogICAgICAgICBlbWl0UHV0VGhpc1RvQXJyb3dGdW5jdGlvbkNvbnRl
eHRTY29wZSgpOwogICAgICAgICBlbWl0UHV0TmV3VGFyZ2V0VG9BcnJvd0Z1bmN0aW9uQ29udGV4
dFNjb3BlKCk7CiAgICAgICAgIGVtaXRQdXREZXJpdmVkQ29uc3RydWN0b3JUb0Fycm93RnVuY3Rp
b25Db250ZXh0U2NvcGUoKTsKQEAgLTg5MywxMCArODk0LDM3IEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICB9CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoKQordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5l
ZWRlZChTeW1ib2xUYWJsZSogZnVuY3Rpb25TeW1ib2xUYWJsZSwgYm9vbCBjYW5SZXVzZUxleGlj
YWxFbnZpcm9ubWVudCkKIHsKICAgICBBU1NFUlQoIW1fYXJyb3dGdW5jdGlvbkNvbnRleHRMZXhp
Y2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CiAKKyAgICBpZiAoY2FuUmV1c2VMZXhpY2FsRW52aXJv
bm1lbnQgJiYgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZnVuY3Rpb25TeW1ib2xUYWJsZSk7CisKKyAgICAgICAgbV9hcnJvd0Z1bmN0aW9u
Q29udGV4dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gbV9sZXhpY2FsRW52aXJvbm1lbnRS
ZWdpc3RlcjsKKyAgICAgICAgCisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKENvbmN1cnJlbnRKSVRMb2NrZXI6
Ok5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgICAgIGlmIChpc1RoaXNVc2VkSW5Jbm5lckFycm93
RnVuY3Rpb24oKSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gZnVuY3Rpb25TeW1ib2xUYWJsZS0+
dGFrZU5leHRTY29wZU9mZnNldChsb2NrZXIpOworICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xU
YWJsZS0+c2V0KGxvY2tlciwgcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyLmltcGwoKSwg
U3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIGlzTmV3VGFyZ2V0VXNlZEluSW5u
ZXJBcnJvd0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IGZ1bmN0aW9uU3ltYm9s
VGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uU3ltYm9s
VGFibGUtPnNldChsb2NrZXIsIHByb3BlcnR5TmFtZXMoKS5uZXdUYXJnZXRMb2NhbFByaXZhdGVO
YW1lLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIGNvbnN0cnVjdG9y
S2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCAmJiBpc1N1cGVyVXNlZEluSW5uZXJB
cnJvd0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IGZ1bmN0aW9uU3ltYm9sVGFi
bGUtPnRha2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uU3lt
Ym9sVGFibGUtPnNldChsb2NrZXIsIHByb3BlcnR5TmFtZXMoKS5kZXJpdmVkQ29uc3RydWN0b3JQ
cml2YXRlTmFtZS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBWYXJpYWJsZUVudmly
b25tZW50IGVudmlyb25tZW50OwogCiAgICAgaWYgKGlzVGhpc1VzZWRJbklubmVyQXJyb3dGdW5j
dGlvbigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDExNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1OCw3ICs4NTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBp
bml0aWFsaXplUGFyYW1ldGVycyhGdW5jdGlvblBhcmFtZXRlcnMmKTsKICAgICAgICAgdm9pZCBp
bml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5k
ZXgsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCBib29sIGhhc0NhcHR1cmVkVmFy
aWFibGVzKTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0Fu
ZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKEZ1bmN0aW9uUGFyYW1ldGVycyYsIGJvb2wgaXNTaW1w
bGVQYXJhbWV0ZXJMaXN0LCBGdW5jdGlvbk5vZGUqLCBTeW1ib2xUYWJsZSosIGludCBzeW1ib2xU
YWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoVW5pcXVlZFN0cmlu
Z0ltcGwqKT4mIGNhcHR1cmVzLCBib29sIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5Q
YXJhbWV0ZXJTY29wZSk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250
ZXh0U2NvcGVJZk5lZWRlZCgpOworICAgICAgICB2b2lkIGluaXRpYWxpemVBcnJvd0Z1bmN0aW9u
Q29udGV4dFNjb3BlSWZOZWVkZWQoU3ltYm9sVGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUgPSBu
dWxscHRyLCBib29sIGNhblJldXNlTGV4aWNhbEVudmlyb25tZW50ID0gZmFsc2UpOwogCiAgICAg
cHVibGljOgogICAgICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRp
ZmllciYpOwo=
</data>
<flag name="review"
          id="303461"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>