<?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>30599</bug_id>
          
          <creation_ts>2009-10-20 13:48:41 -0700</creation_ts>
          <short_desc>V8 binding optimizations (redundant refs, unlikely errors)</short_desc>
          <delta_ts>2009-10-23 13:43:30 -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>WebCore Misc.</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>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jens Alfke">jens</reporter>
          <assigned_to name="Jens Alfke">jens</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156282</commentid>
    <comment_count>0</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-20 13:48:41 -0700</bug_when>
    <thetext>Some optimization opportunities in the V8/WebCore bindings:

1. There are redundant ref/deref calls in bindings that return objects, when the native method returns a direct pointer (e.g. Node*) but the binding code stores it temporarily in a RefPtr before returning it.
2. Since exceptions are unlikely, the calls to V8Proxy::setDOMException should be conditional (some of them weren&apos;t) and should use the UNLIKELY() macro to move the exception-handling block out of the main flow of control.

In opportunity 1 we don&apos;t know if the return type of the native method is X* or PassRefPtr&lt;X&gt;. So to fix the problem you have to avoid generating a temporary variable at all, instead inlining the call into the return statement itself. So the binding for Node::firstChild stops doing
    RefPtr&lt;Node&gt; temp = imp-&gt;firstChild();
    return V8DOMWrapper::convertNodeToV8Object(temp);
and instead uses
    return V8DOMWrapper::convertNodeToV8Object(imp-&gt;firstChild());
This works because convertNodeToV8Object is overloaded to take either an X* or a PassRefPtr&lt;X&gt; as a parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156287</commentid>
    <comment_count>1</comment_count>
      <attachid>41523</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-20 13:54:19 -0700</bug_when>
    <thetext>Created attachment 41523
patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156313</commentid>
    <comment_count>2</comment_count>
      <attachid>41523</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-20 15:28:06 -0700</bug_when>
    <thetext>Comment on attachment 41523
patch 1

I don&apos;t know that I&apos;ll be able to do the final review of this, but I can give some quick feedback on a part of this.


&gt; Index: WebCore/ChangeLog
&gt; +        (WebCore::V8DOMWrapper::convertToV8Object): Added overload that takes a Ref&lt;&gt;
Answering &quot;Why?&quot; is much better than answering &quot;what?&quot; (Answering &quot;What was done?&quot; is pretty useless because it can be determined by looking at the code.)


Functions shouldn&apos;t take a RefPtr. They should take either a PassRefPtr&lt;T&gt; or a T* (http://webkit.org/coding/RefPtr.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156334</commentid>
    <comment_count>3</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-20 16:31:00 -0700</bug_when>
    <thetext>In general RefPtrs shouldn&apos;t be used as parameters, but this is a special case to handle generated code like the below (from V8Document.cpp):
    RefPtr&lt;NodeIterator&gt; result = imp-&gt;createNodeIterator(root, whatToShow, filter.get(), expandEntityReferences, ec);
    ...
    return V8DOMWrapper::convertToV8Object(V8ClassIndex::NODEITERATOR, result);

The normal convention would be to add &quot;.release()&quot; after the result parameter in the second line, but the first line may or may not declare &apos;result&apos; as a RefPtr and the second line doesn&apos;t know which it is.

That said, I think I can add a bit of code to the binding generator to get that .release() call in there...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156627</commentid>
    <comment_count>4</comment_count>
      <attachid>41605</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-21 13:35:02 -0700</bug_when>
    <thetext>Created attachment 41605
patch 2

This updated patch avoids creating a new method that takes a Ref&lt;&gt;. As a bonus, it now changes only one source file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157173</commentid>
    <comment_count>5</comment_count>
      <attachid>41605</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-23 09:54:17 -0700</bug_when>
    <thetext>Comment on attachment 41605
patch 2

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157287</commentid>
    <comment_count>6</comment_count>
      <attachid>41605</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-23 13:43:26 -0700</bug_when>
    <thetext>Comment on attachment 41605
patch 2

Clearing flags on attachment: 41605

Committed r49996: &lt;http://trac.webkit.org/changeset/49996&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157288</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-23 13:43:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41523</attachid>
            <date>2009-10-20 13:54:19 -0700</date>
            <delta_ts>2009-10-21 13:35:02 -0700</delta_ts>
            <desc>patch 1</desc>
            <filename>codegen.patch</filename>
            <type>text/plain</type>
            <size>7231</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTg4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTAtMjAgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbGln
aHQgb3B0aW1pemF0aW9ucyB0byBvYmplY3QgcmV0dXJuaW5nIGFuZCBleGNlcHRpb24gaGFuZGxp
bmcgaW4gZ2VuZXJhdGVkIFY4IGJpbmRpbmdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA1OTkKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBiZXR0ZXIgY29kZQorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdCk6IEFkZGVkIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBSZWY8PgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKTogUmVtb3ZlIHVubmVjZXNzYXJ5
IHRlbXBsYXRlIHBhcmFtIHRvIHByZXZlbnQgY29tcGlsZSBlcnJvcgorCiAyMDA5LTEwLTIwICBa
b2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCShyZXZpc2lvbiA0OTg4MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNyBAQCBzdWIg
R2VuZXJhdGVTZXRET01FeGNlcHRpb24KICAgICBteSAkaW5kZW50ID0gc2hpZnQ7CiAgICAgbXkg
JHJlc3VsdCA9ICIiOwogCi0gICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChlYykge1xuIjsK
KyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKFVOTElLRUxZKGVjKSkge1xuIjsKICAgICAk
cmVzdWx0IC49ICRpbmRlbnQgLiAiICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7XG4i
OwogICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpO1xuIjsKICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAifVxuIjsKQEAgLTYyMiwxNSAr
NjIyLDE1IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBp
ZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgfQotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiKTsKLQot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiJGdldHRlclN0cmluZztcbiIpOwogCiAg
ICAgICAgIGlmICgkdXNlRXhjZXB0aW9ucykgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0gIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiJGdldHRlclN0cmluZztcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgR2VuZXJhdGVTZXRET01FeGNlcHRpb24oIiAgICAiKSk7CisgICAgICAg
ICAgICAkcmVzdWx0ID0gInYiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3Vs
dCA9ICRnZXR0ZXJTdHJpbmc7CiAgICAgICAgIH0KLQotICAgICAgICAkcmVzdWx0ID0gInYiOwog
ICAgIH0KIAogICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkYXR0clR5
cGUpICYmICEkc2tpcENvbnRleHQpIHsKQEAgLTY0Niw3ICs2NDYsNiBAQCBFTkQKICAgICAgICAg
bXkgJGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIucmVsZWFzZSgpKTtcbiIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgICRyZXN1bHQgLj0gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0clR5cGUoJGF0
dHJUeXBlKSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVy
bk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICIgICAgIiku
IjtcbiIpOwogICAgIH0KIApAQCAtNzg0LDcgKzc4Myw4IEBAIEVORAogICAgIH0KIAogICAgIGlm
ICgkdXNlRXhjZXB0aW9ucykgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBpZiAoVU5MSUtFTFkoZWMpKVxuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7XG4i
KTsKICAgICB9CiAKICAgICBpZiAoJGlzUG9kVHlwZSkgewpAQCAtOTE3LDcgKzkxNyw3IEBAIEVO
RAogICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CiAgICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAotIiAgICBpZiAoISRwYXJhbWV0ZXJOYW1lIiAuIChC
YXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICJPayIgOiAiIikgLiAiKSB7
XG4iIC4KKyIgICAgaWYgKFVOTElLRUxZKCEkcGFyYW1ldGVyTmFtZSIgLiAoQmFzaWNUeXBlQ2Fu
RmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAiT2siIDogIiIpIC4gIikpIHtcbiIgLgogIiAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VSUik7XG4iIC4KICIg
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KICIgICAgfVxuIik7CkBA
IC05MjYsNyArOTI2LDcgQEAgRU5ECiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNl
cHRpb25Db2RlLmgifSA9IDE7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAot
IiAgICBpZiAoJHBhcmFtZXRlck5hbWUgPCAwKSB7XG4iIC4KKyIgICAgaWYgKFVOTElLRUxZKCRw
YXJhbWV0ZXJOYW1lIDwgMCkpIHtcbiIgLgogIiAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihJTkRFWF9TSVpFX0VSUik7XG4iIC4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7XG4iIC4KICIgICAgfVxuIik7CkBAIC0xNTMwLDYgKzE1MzAsOCBAQCBzdWIgR2VuZXJh
dGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIH0KICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiki
OwogCisgICAgbXkgJHJldHVybiA9ICJyZXN1bHQiOworCiAgICAgaWYgKCRub2RlVG9SZXR1cm4p
IHsKICAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNoaWxk
LCByZW1vdmVDaGlsZCBhbmQKICAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBO
b2RlLgpAQCAtMTU1MCwxNiArMTU1MiwxNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJp
bmcoKQogICAgICAgICAgICAgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwogICAgIH0g
ZWxzaWYgKCRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGlu
ZGVudCAuICJSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08JG5hdGl2ZVJldHVyblR5cGU+ID4gcmVzdWx0
ID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSBvciAkcmV0dXJuc1BvZFR5cGUgb3IgJGlzUG9kVHlw
ZSBvciBJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkcmV0dXJuVHlwZSkpIHsKICAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gJG5hdGl2ZVJldHVyblR5cGUgLiAiIHJlc3VsdCA9
ICRmdW5jdGlvblN0cmluZztcbiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBDYW4gaW5saW5l
IHRoZSBmdW5jdGlvbiBjYWxsIGludG8gdGhlIHJldHVybiBzdGF0ZW1lbnQgdG8gYXZvaWQgb3Zl
cmhlYWQgb2YgdXNpbmcgYSBSZWY8PiB0ZW1wb3JhcnkKKyAgICAgICAgJHJldHVybiA9ICRmdW5j
dGlvblN0cmluZzsKICAgICB9CiAKICAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlv
bnN9KSB7CiAgICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTZXRET01FeGNlcHRpb24oJGluZGVu
dCk7CiAgICAgfQogCi0gICAgbXkgJHJldHVybiA9ICJyZXN1bHQiOwotCiAgICAgIyBJZiB0aGUg
cmV0dXJuIHR5cGUgaXMgYSBQT0QgdHlwZSwgc2VwYXJhdGUgb3V0IHRoZSB3cmFwcGVyIGdlbmVy
YXRpb24KICAgICBpZiAoJHJldHVybnNMaXN0SXRlbVBvZFR5cGUpIHsKICAgICAgICAgJHJlc3Vs
dCAuPSAkaW5kZW50IC4gIlJlZlB0cjxWOFNWR1BPRFR5cGVXcmFwcGVyPCIgLiAkbmF0aXZlUmV0
dXJuVHlwZSAuICI+ID4gd3JhcHBlciA9ICI7CkBAIC0xNjAyLDcgKzE2MDUsNiBAQCBzdWIgR2Vu
ZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRy
ZXR1cm5UeXBlKTsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBw
ZXIucmVsZWFzZSgpKTtcbiI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJHJldHVybiAuPSAiLnJl
bGVhc2UoKSIgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpOwogICAgICAgICAkcmVzdWx0
IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUs
ICRyZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmgJKHJldmlzaW9uIDQ5ODgxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBSZWZQdHI8VD4gaW1wKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wLmdldCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIHR5cGUsIFBhc3NSZWZQdHI8VD4gaW1wKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wLmdldCgpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5k
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDk4ODEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmREYXRhYgogICAgIERh
dGFiYXNlKiBkYXRhYmFzZSA9IGluc3BlY3RvckJhY2tlbmQtPmRhdGFiYXNlRm9ySWQoYXJnc1sw
XS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0PERhdGFiYXNlPihWOENsYXNzSW5kZXg6OkRBVEFCQVNFLCBkYXRhYmFzZSk7CisgICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpEQVRB
QkFTRSwgZGF0YWJhc2UpOwogfQogI2VuZGlmCiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZEluc3BlCiAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaWMgPSBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaWYg
KCFpYykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBpYy0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCkpOworICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBpYy0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCkpOwog
fQogCiBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZFNldHRpbmcpCg==
</data>
<flag name="review"
          id="22940"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41605</attachid>
            <date>2009-10-21 13:35:02 -0700</date>
            <delta_ts>2009-10-23 13:43:26 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>codegen.patch</filename>
            <type>text/plain</type>
            <size>5701</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTg5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTAtMjAgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbGln
aHQgb3B0aW1pemF0aW9ucyB0byBvYmplY3QgcmV0dXJuaW5nIGFuZCBleGNlcHRpb24gaGFuZGxp
bmcgaW4gZ2VuZXJhdGVkIFY4IGJpbmRpbmdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA1OTkKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBiZXR0ZXIgY29kZQorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdCk6IEFkZGVkIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBSZWY8PgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKTogUmVtb3ZlIHVubmVjZXNzYXJ5
IHRlbXBsYXRlIHBhcmFtIHRvIHByZXZlbnQgY29tcGlsZSBlcnJvcgorCiAyMDA5LTEwLTIwICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVy
IEh1bnQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0JKHJldmlzaW9uIDQ5ODk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIHN1YiBHZW5lcmF0
ZVNldERPTUV4Y2VwdGlvbgogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkcmVzdWx0
ID0gIiI7CiAKLSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKGVjKSB7XG4iOworICAgICRy
ZXN1bHQgLj0gJGluZGVudCAuICJpZiAoVU5MSUtFTFkoZWMpKSB7XG4iOwogICAgICRyZXN1bHQg
Lj0gJGluZGVudCAuICIgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTtcbiI7CiAgICAg
JHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
XG4iOwogICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJ9XG4iOwpAQCAtNjIyLDE1ICs2MjIsMTcg
QEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghaW1w
LT5kb2N1bWVudCgpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIpOwotCi0gICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIkZ2V0dGVyU3RyaW5nO1xuIik7CiAKICAgICAgICAg
aWYgKCR1c2VFeGNlcHRpb25zKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgICRuYXRpdmVUeXBlIHYgPSAiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIkZ2V0dGVyU3RyaW5nO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCBHZW5lcmF0ZVNldERPTUV4Y2VwdGlvbigiICAgICIpKTsKKyAgICAgICAgICAgICRy
ZXN1bHQgPSAidiI7CisgICAgICAgICAgICAkcmVzdWx0IC49ICIucmVsZWFzZSgpIiBpZiAoSXNS
ZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAj
IENhbiBpbmxpbmUgdGhlIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgcmV0dXJuIHN0YXRlbWVudCB0
byBhdm9pZCBvdmVyaGVhZCBvZiB1c2luZyBhIFJlZjw+IHRlbXBvcmFyeQorICAgICAgICAgICAg
JHJlc3VsdCA9ICRnZXR0ZXJTdHJpbmc7CiAgICAgICAgIH0KLQotICAgICAgICAkcmVzdWx0ID0g
InYiOwogICAgIH0KIAogICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigk
YXR0clR5cGUpICYmICEkc2tpcENvbnRleHQpIHsKQEAgLTY0Niw3ICs2NDgsNiBAQCBFTkQKICAg
ICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIucmVsZWFzZSgpKTtcbiIpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgICRyZXN1bHQgLj0gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0clR5
cGUoJGF0dHJUeXBlKSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAu
IFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICIg
ICAgIikuIjtcbiIpOwogICAgIH0KIApAQCAtNzg0LDcgKzc4NSw4IEBAIEVORAogICAgIH0KIAog
ICAgIGlmICgkdXNlRXhjZXB0aW9ucykgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoVU5MSUtFTFkoZWMpKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihl
Yyk7XG4iKTsKICAgICB9CiAKICAgICBpZiAoJGlzUG9kVHlwZSkgewpAQCAtOTE3LDcgKzkxOSw3
IEBAIEVORAogICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7
CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAotIiAgICBpZiAoISRwYXJhbWV0ZXJOYW1l
IiAuIChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICJPayIgOiAiIikg
LiAiKSB7XG4iIC4KKyIgICAgaWYgKFVOTElLRUxZKCEkcGFyYW1ldGVyTmFtZSIgLiAoQmFzaWNU
eXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAiT2siIDogIiIpIC4gIikpIHtcbiIg
LgogIiAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VSUik7XG4i
IC4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KICIgICAgfVxu
Iik7CkBAIC05MjYsNyArOTI4LDcgQEAgRU5ECiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLAotIiAgICBpZiAoJHBhcmFtZXRlck5hbWUgPCAwKSB7XG4iIC4KKyIgICAgaWYgKFVOTElL
RUxZKCRwYXJhbWV0ZXJOYW1lIDwgMCkpIHtcbiIgLgogIiAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihJTkRFWF9TSVpFX0VSUik7XG4iIC4KICIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7XG4iIC4KICIgICAgfVxuIik7CkBAIC0xNTMwLDYgKzE1MzIsOSBAQCBzdWIg
R2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIH0KICAgICAkZnVuY3Rpb25TdHJpbmcg
Lj0gIikiOwogCisgICAgbXkgJHJldHVybiA9ICJyZXN1bHQiOworICAgIG15ICRyZXR1cm5Jc1Jl
ZiA9IElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSk7CisKICAgICBpZiAoJG5vZGVUb1JldHVybikg
ewogICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgaW5zZXJ0QmVmb3JlLCByZXBsYWNlQ2hpbGQs
IHJlbW92ZUNoaWxkIGFuZAogICAgICAgICAjIGFwcGVuZENoaWxkIGZ1bmN0aW9ucyBmcm9tIE5v
ZGUuCkBAIC0xNTUwLDE2ICsxNTU1LDE4IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmlu
ZygpCiAgICAgICAgICAgICAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiI7CiAgICAgfSBl
bHNpZiAoJHJldHVybnNMaXN0SXRlbVBvZFR5cGUpIHsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5k
ZW50IC4gIlJlZlB0cjxTVkdQT0RMaXN0SXRlbTwkbmF0aXZlUmV0dXJuVHlwZT4gPiByZXN1bHQg
PSAkZnVuY3Rpb25TdHJpbmc7XG4iOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNpZiAoQHskZnVu
Y3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9IG9yICRyZXR1cm5zUG9kVHlwZSBvciAkaXNQb2RUeXBl
IG9yIElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRyZXR1cm5UeXBlKSkgewogICAg
ICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICIgcmVzdWx0ID0g
JGZ1bmN0aW9uU3RyaW5nO1xuIjsKKyAgICB9IGVsc2UgeworICAgICAgICAjIENhbiBpbmxpbmUg
dGhlIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgcmV0dXJuIHN0YXRlbWVudCB0byBhdm9pZCBvdmVy
aGVhZCBvZiB1c2luZyBhIFJlZjw+IHRlbXBvcmFyeQorICAgICAgICAkcmV0dXJuID0gJGZ1bmN0
aW9uU3RyaW5nOworICAgICAgICAkcmV0dXJuSXNSZWYgPSAwOwogICAgIH0KIAogICAgIGlmIChA
eyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKICAgICAgICAgJHJlc3VsdCAuPSBHZW5l
cmF0ZVNldERPTUV4Y2VwdGlvbigkaW5kZW50KTsKICAgICB9CiAKLSAgICBteSAkcmV0dXJuID0g
InJlc3VsdCI7Ci0KICAgICAjIElmIHRoZSByZXR1cm4gdHlwZSBpcyBhIFBPRCB0eXBlLCBzZXBh
cmF0ZSBvdXQgdGhlIHdyYXBwZXIgZ2VuZXJhdGlvbgogICAgIGlmICgkcmV0dXJuc0xpc3RJdGVt
UG9kVHlwZSkgewogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiUmVmUHRyPFY4U1ZHUE9E
VHlwZVdyYXBwZXI8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4gPiB3cmFwcGVyID0gIjsKQEAg
LTE2MDIsNyArMTYwOSw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAg
ICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwogICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIjsKICAgICB9IGVsc2Ug
ewotICAgICAgICAkcmV0dXJuIC49ICIucmVsZWFzZSgpIiBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1
cm5UeXBlKSk7CisgICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNS
ZWYpOwogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUo
JGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CiAgICAgfQog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>