<?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>43742</bug_id>
          
          <creation_ts>2010-08-09 13:12:55 -0700</creation_ts>
          <short_desc>REGRESSION(r58469): Math.pow() always returns double-backed JSValue which is extremely slow as array subscript</short_desc>
          <delta_ts>2010-08-18 22:57:11 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jesus</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262281</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-09 13:12:55 -0700</bug_when>
    <thetext>JSC currently chokes on this (rather neat) plasma demo:
http://www.bel.fi/~alankila/plasma.html

What happens is they store a precalc&apos;d square roots in a huge array and look them up instead of calling Math.sqrt(). All fine, except for array lookups with double subscripts we currently convert the subscript to a string and look that up as a property.

We can detect this case and implement a fast-path for double subscripts that are 0 &lt;= value &lt;= UINT_MAX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262283</commentid>
    <comment_count>1</comment_count>
      <attachid>63921</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-09 13:17:00 -0700</bug_when>
    <thetext>Created attachment 63921
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262289</commentid>
    <comment_count>2</comment_count>
      <attachid>63921</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-09 13:22:52 -0700</bug_when>
    <thetext>Comment on attachment 63921
Proposed patch

This is incorrect. 1.5 is a valid property, eg.
a=[];
a[1.5] = &quot;Foo&quot;

a[&quot;1.5&quot;] === &quot;Foo&quot;; // true
a[1] === undefined; // true

Your patch results in a look up of 1.5 converting to a lookup of 1, which is incorrect.  It&apos;s somewhat worrying that this passes tests :-(

Is the double that&apos;s being looked up actually an integral value?

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262296</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-09 13:31:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Your patch results in a look up of 1.5 converting to a lookup of 1, which is incorrect.  It&apos;s somewhat worrying that this passes tests :-(

Indeed, I expected this thing to be well covered, and since no tests failed, I figured..... ;-)

&gt; Is the double that&apos;s being looked up actually an integral value?

In this case, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262328</commentid>
    <comment_count>4</comment_count>
      <attachid>63930</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-09 14:43:48 -0700</bug_when>
    <thetext>Created attachment 63930
Proposed patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262329</commentid>
    <comment_count>5</comment_count>
      <attachid>63930</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-09 14:49:23 -0700</bug_when>
    <thetext>Comment on attachment 63930
Proposed patch v2

Have you tested sunspider with this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262376</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 15:59:31 -0700</bug_when>
    <thetext>Attachment 63930 did not build on win:
Build output: http://queues.webkit.org/results/3704005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262400</commentid>
    <comment_count>7</comment_count>
      <attachid>63930</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-09 16:36:41 -0700</bug_when>
    <thetext>Comment on attachment 63930
Proposed patch v2

&gt; +        } else if (subscript.isDouble()) {
&gt; +            i = subscript.toUInt32(callFrame);
&gt; +            haveIntegralIndex = static_cast&lt;double&gt;(i) == subscript.asDouble();
&gt; +        }

Once you have a &quot;true&quot; for isDouble, toUInt32 is an unnecessarily slow way to convert it to an integer. This is more like what you want:

    } else if (subscript.isDouble()) {
        i = static_cast&lt;uint32_t&gt;(subscript.asDouble());
        haveIntegralIndex = static_cast&lt;double&gt;(i) == subscript.asDouble();
    }

But I suspect this will do the wrong thing for negative zero. Please test that case. We need to add some test cases here if there are not existing tests covering these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262457</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-09 19:54:02 -0700</bug_when>
    <thetext>Attachment 63930 did not build on mac:
Build output: http://queues.webkit.org/results/3748006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264472</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-13 12:55:45 -0700</bug_when>
    <thetext>Oliver mentioned on IRC that this might be a performance regression, so I did a little detective work.

Turns out it did regress severely with http://trac.webkit.org/changeset/58469

With this change, pow() always returns JSValues that are doubles. Previously it would go through the JSValue constructor that stores integral double values as int32s.

I am unsure what the best fix is, move forward with the patch I&apos;ve posted here, modify the JIT&apos;s storeDouble() to emulate JSValue(double), or something else entirely. Please advise :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264923</commentid>
    <comment_count>10</comment_count>
      <attachid>63930</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-15 20:04:07 -0700</bug_when>
    <thetext>Comment on attachment 63930
Proposed patch v2

r-&apos;ing this to avoid confusion as to what I&apos;m soliciting right now (comments, not reviews ;-))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266400</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-18 14:56:44 -0700</bug_when>
    <thetext>&gt; I am unsure what the best fix is, move forward with the patch I&apos;ve posted here, modify the JIT&apos;s storeDouble() to emulate JSValue(double), or something else entirely. Please advise :-)

I don&apos;t think you should modify storeDouble. storeDouble is used after an operation on doubles -- something that&apos;s unlikely to produce an int.

I think the two options are:

1. Add code to the specialized assembly math functions to try to convert to int if possible.
2. Move forward with a faster case for double indexing into an array.

I&apos;d say try #1 and see if it&apos;s a performance regression. If not, it&apos;s pure win.

#2 also seems reasonable, but it won&apos;t pay off as much as #1 would, since it still involves a call out to a helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266401</commentid>
    <comment_count>12</comment_count>
      <attachid>64777</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 14:56:59 -0700</bug_when>
    <thetext>Created attachment 64777
Proposed patch v3

New approach - add codegen for pow() to return Int32 values when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266413</commentid>
    <comment_count>13</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 15:07:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=64777) [details]
&gt; Proposed patch v3
&gt; 
&gt; New approach - add codegen for pow() to return Int32 values when possible.

Callgrind says: SunSpider is 0.000139% slower with my change.

But comparing http://www.bel.fi/~alankila/plasma.html before/after is night/day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266529</commentid>
    <comment_count>14</comment_count>
      <attachid>64777</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-18 20:41:31 -0700</bug_when>
    <thetext>Comment on attachment 64777
Proposed patch v3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266556</commentid>
    <comment_count>15</comment_count>
      <attachid>64777</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-18 22:57:03 -0700</bug_when>
    <thetext>Comment on attachment 64777
Proposed patch v3

Clearing flags on attachment: 64777

Committed r65653: &lt;http://trac.webkit.org/changeset/65653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266557</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-18 22:57:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63921</attachid>
            <date>2010-08-09 13:17:00 -0700</date>
            <delta_ts>2010-08-09 14:43:48 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-43742.diff</filename>
            <type>text/plain</type>
            <size>1467</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzMTZlOTQ1Li4yZmMxMWM3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMDkgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYXN0LXBh
dGggZm9yIGFycmF5IGxvb2t1cCB3aXRoIGRvdWJsZSBzdWJzY3JpcHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNzQyCisKKyAgICAgICAgQWRkZWQg
ZmFzdC1wYXRoIGluIG9wX2dldF9ieV92YWwgZm9yIEpTQXJyYXlzIHdoZW4gdGhlIHN1YnNjcmlw
dCBpc0RvdWJsZSgpLgorCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorCiAyMDEwLTA4LTA3ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByNjQ5MzguCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCBjNGZmMGNhLi5mNjkyODFh
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTIyODUsNiArMjI4NSwxNSBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiAgICAgfQorCisgICAgaWYgKHN1YnNjcmlwdC5pc0RvdWJsZSgpICYmIGlzSlNBcnJheShn
bG9iYWxEYXRhLCBiYXNlVmFsdWUpKSB7CisgICAgICAgIGRvdWJsZSBkID0gc3Vic2NyaXB0LmFz
RG91YmxlKCk7CisgICAgICAgIGlmIChkID49IDAgJiYgZCA8PSBVSU5UX01BWCkgeworICAgICAg
ICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAg
ICAgICAgaWYgKGFzQXJyYXkoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KGJhc2VWYWx1ZSktPmdldEluZGV4
KGkpKTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNh
bGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsK
</data>
<flag name="review"
          id="52367"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63930</attachid>
            <date>2010-08-09 14:43:48 -0700</date>
            <delta_ts>2010-08-18 14:56:59 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-43742-v2.diff</filename>
            <type>text/plain</type>
            <size>3292</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzMTZlOTQ1Li5mYjgyMjQyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTAtMDgtMDkgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIGFycmF5IGxvb2t1cHMgd2l0aCBpbnRlZ3JhbCBkb3VibGUgc3Vic2NyaXB0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NDIK
KworICAgICAgICBDb252ZXJ0IGludGVncmFsIGRvdWJsZSBzdWJzY3JpcHRzIHRvIHVpbnQzMl90
IGlmIHBvc3NpYmxlIGFuZCB0YWtlCisgICAgICAgIHRoZSBmYXN0ZXIgcGF0aCBmb3IgYXJyYXks
IGJ5dGVhcnJheSBhbmQgc3RyaW5nIGxvb2t1cHMuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NU
VUJfRlVOQ1RJT04pOgorCiAyMDEwLTA4LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjQ5Mzgu
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
Yi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZTdhZTU0
MC4uZGIxNTY5ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cApAQCAtMzEwNiw4ICszMTA2LDE4IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAKICAgICAgICAg
SlNWYWx1ZSByZXN1bHQ7CiAKKyAgICAgICAgYm9vbCBoYXZlSW50ZWdyYWxJbmRleDsKKyAgICAg
ICAgdWludDMyX3QgaTsKKwogICAgICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigp
KSkgewotICAgICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOworICAg
ICAgICAgICAgaGF2ZUludGVncmFsSW5kZXggPSB0cnVlOworICAgICAgICAgICAgaSA9IHN1YnNj
cmlwdC5hc1VJbnQzMigpOworICAgICAgICB9IGVsc2UgaWYgKHN1YnNjcmlwdC5pc0RvdWJsZSgp
KSB7CisgICAgICAgICAgICBpID0gc3Vic2NyaXB0LnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAg
ICAgICAgICBoYXZlSW50ZWdyYWxJbmRleCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oaSkgPT0gc3Vi
c2NyaXB0LmFzRG91YmxlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGF2ZUludGVncmFs
SW5kZXgpIHsKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgYmFzZVZhbHVl
KSkgewogICAgICAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhbkdldEluZGV4KGkpKQpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKaW5kZXggYzRmZjBjYS4uYjdhNGZhMSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCkBAIC0yMjY4LDggKzIyNjgsMTggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wX2dldF9ieV92YWwpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoc3Vi
c2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJ
bnQzMigpOworICAgIGJvb2wgaGF2ZUludGVncmFsSW5kZXg7CisgICAgdWludDMyX3QgaTsKKwor
ICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CisgICAgICAgIGhhdmVJbnRl
Z3JhbEluZGV4ID0gdHJ1ZTsKKyAgICAgICAgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOworICAg
IH0gZWxzZSBpZiAoc3Vic2NyaXB0LmlzRG91YmxlKCkpIHsKKyAgICAgICAgaSA9IHN1YnNjcmlw
dC50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAgICBoYXZlSW50ZWdyYWxJbmRleCA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oaSkgPT0gc3Vic2NyaXB0LmFzRG91YmxlKCk7CisgICAgfQorCisgICAg
aWYgKGhhdmVJbnRlZ3JhbEluZGV4KSB7CiAgICAgICAgIGlmIChpc0pTU3RyaW5nKGdsb2JhbERh
dGEsIGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsK
ICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3Zh
bF9zdHJpbmcpKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKQEAgLTIyODEsNiArMjI5MSw4IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQogICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2J5dGVfYXJy
YXkpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNCeXRlQXJyYXkoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKSk7CiAgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzSlNBcnJheShnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFzQXJyYXkoYmFzZVZhbHVlKS0+
Y2FuR2V0SW5kZXgoaSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzQXJy
YXkoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoaSkpOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJh
c2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cg==
</data>
<flag name="review"
          id="52377"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64777</attachid>
            <date>2010-08-18 14:56:59 -0700</date>
            <delta_ts>2010-08-18 22:57:03 -0700</delta_ts>
            <desc>Proposed patch v3</desc>
            <filename>bug-43742-v3.diff</filename>
            <type>text/plain</type>
            <size>2435</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAxYzdmNjg5Li40ZTc3MmE5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMTggIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSRUdSRVNT
SU9OKHI1ODQ2OSk6IE1hdGgucG93KCkgYWx3YXlzIHJldHVybnMgZG91YmxlLWJhY2tlZCBKU1Zh
bHVlIHdoaWNoIGlzIGV4dHJlbWVseSBzbG93IGFzIGFycmF5IHN1YnNjcmlwdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NDIKKworICAgICAgICBB
ZGQgY29kZWdlbiBmb3IgcG93KCkgdG8gcmV0dXJuIEludDMyIHZhbHVlcyB3aGVuIHBvc3NpYmxl
LgorCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBv
d1RodW5rR2VuZXJhdG9yKToKKwogMjAxMC0wOC0xOCAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjA4NTdjYi4uNGM3YTM1NCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEzNCw3ICsxMzQsMTQgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wKICAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCkubGlua1RvKHN0YXJ0TG9vcCwg
JmppdCk7CiAKICAgICBleHBvbmVudElzWmVyby5saW5rKCZqaXQpOwotICAgIGppdC5yZXR1cm5E
b3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CisKKyAgICB7CisgICAgICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXBMaXN0IGRvdWJsZVJlc3VsdDsKKyAgICAgICAgaml0LmJy
YW5jaENvbnZlcnREb3VibGVUb0ludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBkb3VibGVSZXN1bHQsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDApOworICAgICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOworICAgICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKKyAgICAgICAgaml0
LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKKyAgICB9CiAKICAg
ICBpZiAoaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSkgewogICAgICAgICBub25JbnRF
eHBvbmVudC5saW5rKCZqaXQpOwpAQCAtMTQ0LDYgKzE1MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRh
YmxlUG9vbAogICAgICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QzKSk7CiAgICAgICAgIGppdC5z
cXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDApOwogICAgICAgICBqaXQuZGl2RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOworCisgICAgICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQ6Okp1bXBMaXN0IGRvdWJsZVJlc3VsdDsKKyAgICAgICAgaml0LmJyYW5j
aENvbnZlcnREb3VibGVUb0ludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBkb3VibGVSZXN1bHQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDApOworICAgICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOworICAgICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICAgICAgaml0LnJl
dHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICB9IGVsc2UKICAg
ICAgICAgaml0LmFwcGVuZEZhaWx1cmUobm9uSW50RXhwb25lbnQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>