<?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>28664</bug_id>
          
          <creation_ts>2009-08-22 23:33:26 -0700</creation_ts>
          <short_desc>Array index miss case creates a string every time</short_desc>
          <delta_ts>2009-08-24 14:38:00 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142185</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:33:26 -0700</bug_when>
    <thetext>The object prototype is creating a string and searching for it in the Identifier table every time there&apos;s a miss. This is bad on the crypto tests in SunSpider, and in other real-world code too I&apos;m sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142186</commentid>
    <comment_count>1</comment_count>
      <attachid>38446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:36:59 -0700</bug_when>
    <thetext>Created attachment 38446
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142190</commentid>
    <comment_count>2</comment_count>
      <attachid>38446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:45:46 -0700</bug_when>
    <thetext>Comment on attachment 38446
patch

Maybe it should be called m_mayHaveIntegralNamedProperty because I don&apos;t have any code to set it to false if the offending properties are all removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142191</commentid>
    <comment_count>3</comment_count>
      <attachid>38446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-22 23:46:55 -0700</bug_when>
    <thetext>Comment on attachment 38446
patch

Or I could reverse its sense and call this m_hasNoIntegralNamedProperties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142226</commentid>
    <comment_count>4</comment_count>
      <attachid>38446</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-08-23 05:55:13 -0700</bug_when>
    <thetext>Comment on attachment 38446
patch

&gt;+    if (isUInt32)
&gt;+        m_hasIntegralNamedProperty = true;

You could save a branch here by always assigning m_hasIntegralNamedProperty:

    m_hasIntegralNamedProperty = isUInt32;

Not sure if that&apos;s helpful or not, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142242</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-23 14:07:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 38446 [details])
&gt; &gt;+    if (isUInt32)
&gt; &gt;+        m_hasIntegralNamedProperty = true;
&gt; 
&gt; You could save a branch here by always assigning m_hasIntegralNamedProperty:
&gt; 
&gt;     m_hasIntegralNamedProperty = isUInt32;
&gt; 
&gt; Not sure if that&apos;s helpful or not, though.

That would break the case where isUInt32 is false and m_hasIntegralNamedProperty is already true, but I could do:

    m_hasIntegralNamedProperty |= isUInt32;

Or I could skip the entire check if m_hasIntegralNamedProperty is already true. No need to call toStrictUInt32 at all in that case.

But none of that seems important. We don&apos;t need to optimize adding properties to the object prototypes. We should optimize for clarity. My existing patch seems OK to me, but we could make changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142334</commentid>
    <comment_count>6</comment_count>
      <attachid>38446</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-08-24 11:02:46 -0700</bug_when>
    <thetext>Comment on attachment 38446
patch

&gt; +    return m_hasIntegralNamedProperty &amp;&amp; JSObject::getOwnPropertySlot(exec, propertyName, slot);

I tend to think that code like this is more readable if the m_hasIntegralNamedProperty case is an explicit early return. Up to you.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142418</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-24 14:35:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/47727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142419</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-24 14:38:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/47730</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38446</attachid>
            <date>2009-08-22 23:36:59 -0700</date>
            <delta_ts>2009-08-24 11:02:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ArrayMissPatch.txt</filename>
            <type>text/plain</type>
            <size>3757</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3Njg2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDgtMjIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFycmF5IGluZGV4IG1pc3MgY2FzZSBjcmVhdGVzIGEgc3RyaW5nIGV2
ZXJ5IHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4NjY0CisKKyAgICAgICAgU3VuU3BpZGVyIHRlc3QgcmVzdWx0cyBJIHNhdzoKKworICAgICAg
ICAgICAgMC41JSBmYXN0ZXIgb3ZlcmFsbAorICAgICAgICAgICAgMSUgZmFzdGVyIG9uIGNyeXB0
by1hZXMKKyAgICAgICAgICAgIDIwJSBmYXN0ZXIgb24gY3J5cHRvLW1kNQorICAgICAgICAgICAg
MTMlIGZhc3RlciBvbiBjcnlwdG8tc2hhMQorCisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlw
ZSk6IEluaXRpYWxpemUgbV9oYXNJbnRlZ3JhbE5hbWVkUHJvcGVydHkgdG8gZmFsc2UuCisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6cHV0KTogU2V0IG1faGFzSW50ZWdyYWxOYW1lZFBy
b3BlcnR5IGlmIHRoZSBwcm9wZXJ0eSBoYXMgYSBuYW1lCisgICAgICAgIHRoYXQgaXMgYSAzMi1i
aXQgdW5zaWduZWQgaW50ZWdlci4KKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvdG90eXBlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QpOiBEb24ndCBjYWxsIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QK
KyAgICAgICAgdW5sZXNzIG1faGFzSW50ZWdyYWxOYW1lZFByb3BlcnR5IGlzIHRydWUgKGhpZ2hs
eSB1bmxpa2VseSkuCisKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOiBBZGRl
ZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBhYm92ZS4KKwogMjAwOS0wOC0yMiAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDQ3NjgzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3R1Y3R1cmUsIFN0cnVjdHVyZSog
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBKU09iamVjdChzdHVjdHVyZSkKKyAg
ICAsIG1faGFzSW50ZWdyYWxOYW1lZFByb3BlcnR5KGZhbHNlKQogewogICAgIHB1dERpcmVjdEZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldy
YXBwZXIoZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b1N0cmluZywgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIE5h
dGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyksIERvbnRFbnVtKTsKQEAgLTU3LDYgKzU4LDIwIEBAIE9iamVjdFByb3RvdHlw
ZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGEKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19sb29r
dXBTZXR0ZXJfXywgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKSwgRG9udEVudW0pOwogfQog
Cit2b2lkIE9iamVjdFByb3RvdHlwZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNPYmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KyAgICBib29sIGlzVUludDMyOworICAgIHByb3BlcnR5TmFtZS50b1N0cmljdFVJbnQzMigmaXNV
SW50MzIpOworICAgIGlmIChpc1VJbnQzMikKKyAgICAgICAgbV9oYXNJbnRlZ3JhbE5hbWVkUHJv
cGVydHkgPSB0cnVlOworfQorCitib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgcmV0dXJuIG1faGFzSW50ZWdyYWxOYW1lZFByb3BlcnR5ICYmIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40
LjUsIDE1LjIuNC43CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmgJKHJldmlzaW9uIDQ3NjgzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJs
aWM6CiAgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKworICAgICAgICBib29sIG1faGFzSW50ZWdyYWxOYW1lZFByb3BlcnR5Owog
ICAgIH07CiAKICAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Cg==
</data>
<flag name="review"
          id="19459"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>