<html><body>
<p>I opened <a href="http://trac.dojotoolkit.org/ticket/12923">http://trac.dojotoolkit.org/ticket/12923</a><br>
<br>
Richard<br>
<br>
<img width="16" height="16" src="cid:1__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt="Inactive hide details for Richard Backhouse---05/12/2011 03:18:59 PM---Ok, I'll open a ticket. Uglifyjs has fixed the problem. "><font color="#424282">Richard Backhouse---05/12/2011 03:18:59 PM---Ok, I'll open a ticket. Uglifyjs has fixed the problem. <a href="https://github.com/mishoo/UglifyJS/issues/150">https://github.com/mishoo/UglifyJS/issues/150</a></font><br>
<br>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="1%"><img width="96" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2" color="#5F5F5F">From:</font></td><td width="100%"><img width="1" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">Richard Backhouse/Durham/IBM@IBMUS</font></td></tr>

<tr valign="top"><td width="1%"><img width="96" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2" color="#5F5F5F">To:</font></td><td width="100%"><img width="1" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">&quot;dojo dev.&quot; &lt;dojo-contributors@mail.dojotoolkit.org&gt;</font></td></tr>

<tr valign="top"><td width="1%"><img width="96" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2" color="#5F5F5F">Cc:</font></td><td width="100%" valign="middle"><img width="1" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">&quot;dojo dev.&quot; &lt;dojo-contributors@mail.dojotoolkit.org&gt;, dojo-contributors-bounces@mail.dojotoolkit.org</font></td></tr>

<tr valign="top"><td width="1%"><img width="96" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2" color="#5F5F5F">Date:</font></td><td width="100%"><img width="1" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">05/12/2011 03:18 PM</font></td></tr>

<tr valign="top"><td width="1%"><img width="96" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2" color="#5F5F5F">Subject:</font></td><td width="100%"><img width="1" height="1" src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">Re: [dojo-contributors] Question about dojo.attr</font></td></tr>
</table>
<hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br>
<br>
<br>
<font size="4">Ok, I'll open a ticket. Uglifyjs has fixed the problem. </font><a href="https://github.com/mishoo/UglifyJS/issues/150"><u><font size="4" color="#0000FF">https://github.com/mishoo/UglifyJS/issues/150</font></u></a><font size="4"><br>
<br>
Thanks<br>
Richard<br>
<br>
</font><img src="cid:1__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="16" height="16" alt="Inactive hide details for Eugene Lazutkin ---05/12/2011 03:11:10 PM--------BEGIN PGP SIGNED MESSAGE-----"><font size="4" color="#424282">Eugene Lazutkin ---05/12/2011 03:11:10 PM--------BEGIN PGP SIGNED MESSAGE-----</font><font size="4"><br>
</font>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="23%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="96" height="1"><font color="#5F5F5F"><br>
From:</font></td><td width="77%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="1" height="1"><br>
Eugene Lazutkin &lt;eugene@lazutkin.com&gt;</td></tr>

<tr valign="top"><td width="23%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="96" height="1"><font color="#5F5F5F"><br>
To:</font></td><td width="77%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="1" height="1"><br>
&quot;dojo dev.&quot; &lt;dojo-contributors@mail.dojotoolkit.org&gt;</td></tr>

<tr valign="top"><td width="23%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="96" height="1"><font color="#5F5F5F"><br>
Date:</font></td><td width="77%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="1" height="1"><br>
05/12/2011 03:11 PM</td></tr>

<tr valign="top"><td width="23%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="96" height="1"><font color="#5F5F5F"><br>
Subject:</font></td><td width="77%"><img src="cid:2__=08BBF21DDFFD66928f9e8a93df938@us.ibm.com" width="1" height="1"><br>
Re: [dojo-contributors] Question about dojo.attr</td></tr>
</table>
<hr width="100%" size="2" align="left" noshade><font size="4"><br>
<br>
</font><tt><font size="4"><br>
-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
I think do{}while(false) in this particular case is the remnants of some<br>
ancient civilization. Please file a ticket to track it, and I'll change it.<br>
<br>
Yet, it is troublesome that uglyfyjs chokes on do{}while() loop.<br>
<br>
Cheers,<br>
<br>
Eugene Lazutkin</font></tt><tt><u><font size="4" color="#0000FF"><br>
</font></u></tt><a href="http://lazutkin.com/"><tt><u><font size="4" color="#0000FF">http://lazutkin.com/</font></u></tt></a><tt><font size="4"><br>
<br>
<br>
On 05/12/2011 07:32 AM, Richard Backhouse wrote:<br>
&gt; I have been tracking down an uglifyjs compression issue and have finally<br>
&gt; found it to be the way it is optimizing dojo.attr in dojo/_base/html.js.<br>
&gt; <br>
&gt; The code in question is<br>
&gt; <br>
&gt; &nbsp; &nbsp; if(args == 3){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;// setter<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;do{<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(propName == &quot;style&quot; &amp;&amp; typeof value != &quot;string&quot;){ //<br>
&gt; inline'd type check<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// special case: setting a style<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d.style(node, value);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(propName == &quot;innerHTML&quot;){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// special case: assigning HTML<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&gt;&gt;excludeStart(&quot;webkitMobile&quot;, kwArgs.webkitMobile);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(d.isIE &amp;&amp; node.tagName.toLowerCase() in _roInnerHtml){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d.empty(node);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;node.appendChild(d._toDom(value, node.ownerDocument));<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}else{<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&gt;&gt;excludeEnd(&quot;webkitMobile&quot;);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;node[propName] = value;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&gt;&gt;excludeStart(&quot;webkitMobile&quot;, kwArgs.webkitMobile);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&gt;&gt;excludeEnd(&quot;webkitMobile&quot;);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(d.isFunction(value)){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// special case: assigning an event handler<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// clobber if we can<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var attrId = d.attr(node, _attrId);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(!attrId){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;attrId = _ctr++;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d.attr(node, _attrId, attrId);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(!_evtHdlrMap[attrId]){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_evtHdlrMap[attrId] = {};<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var h = _evtHdlrMap[attrId][propName];<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(h){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d.disconnect(h);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}else{<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try{<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete node[propName];<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}catch(e){}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ensure that event objects are normalized, etc.<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_evtHdlrMap[attrId][propName] = d.connect(node, propName,<br>
&gt; value);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(forceProp || typeof value == &quot;boolean&quot;){<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// special case: forcing assignment to the property<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// special case: setting boolean to a property instead of<br>
&gt; attribute<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;node[propName] = value;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// node's attribute<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;node.setAttribute(attrName, value);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;}while(false);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;return node; // DomNode<br>
&gt; &nbsp; &nbsp;}<br>
&gt; <br>
&gt; with uglifyjs optimizing it to<br>
&gt; <br>
&gt; if (e == 3) return a;<br>
&gt; <br>
&gt; My question is why is there a do/while(false) loop in there ? Couldn't<br>
&gt; it just be<br>
&gt; <br>
&gt; if(args == 3){<br>
&gt; // setter<br>
&gt; if(propName == &quot;style&quot;&amp;&amp; typeofvalue != &quot;string&quot;){ // inline'd type check<br>
&gt; // special case: setting a style<br>
&gt; d.style(node, value);<br>
&gt; returnnode;<br>
&gt; }<br>
&gt; if(propName == &quot;innerHTML&quot;){<br>
&gt; // special case: assigning HTML<br>
&gt; //&gt;&gt;excludeStart(&quot;webkitMobile&quot;, kwArgs.webkitMobile);<br>
&gt; if(d.isIE &amp;&amp; node.tagName.toLowerCase() in_roInnerHtml){<br>
&gt; d.empty(node);<br>
&gt; node.appendChild(d._toDom(value, node.ownerDocument));<br>
&gt; }else{<br>
&gt; //&gt;&gt;excludeEnd(&quot;webkitMobile&quot;);<br>
&gt; node[propName] = value;<br>
&gt; //&gt;&gt;excludeStart(&quot;webkitMobile&quot;, kwArgs.webkitMobile);<br>
&gt; }<br>
&gt; //&gt;&gt;excludeEnd(&quot;webkitMobile&quot;);<br>
&gt; returnnode;<br>
&gt; }<br>
&gt; if(d.isFunction(value)){<br>
&gt; // special case: assigning an event handler<br>
&gt; // clobber if we can<br>
&gt; varattrId = d.attr(node, _attrId);<br>
&gt; if(!attrId){<br>
&gt; attrId = _ctr++;<br>
&gt; d.attr(node, _attrId, attrId);<br>
&gt; }<br>
&gt; if(!_evtHdlrMap[attrId]){<br>
&gt; _evtHdlrMap[attrId] = {};<br>
&gt; }<br>
&gt; varh = _evtHdlrMap[attrId][propName];<br>
&gt; if(h){<br>
&gt; d.disconnect(h);<br>
&gt; }else{<br>
&gt; try{<br>
&gt; deletenode[propName];<br>
&gt; }catch(e){}<br>
&gt; }<br>
&gt; // ensure that event objects are normalized, etc.<br>
&gt; _evtHdlrMap[attrId][propName] = d.connect(node, propName, value);<br>
&gt; returnnode;<br>
&gt; }<br>
&gt; if(forceProp || typeofvalue == &quot;boolean&quot;){<br>
&gt; // special case: forcing assignment to the property<br>
&gt; // special case: setting boolean to a property instead of attribute<br>
&gt; node[propName] = value;<br>
&gt; returnnode;<br>
&gt; }<br>
&gt; // node's attribute<br>
&gt; node.setAttribute(attrName, value);<br>
&gt; returnnode; // DomNode<br>
&gt; }<br>
&gt; <br>
&gt; or is there another reason for having the do/while loop ?<br>
&gt; <br>
&gt; Richard<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; dojo-contributors mailing list<br>
&gt; dojo-contributors@mail.dojotoolkit.org<br>
&gt; </font></tt><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors"><tt><u><font size="4" color="#0000FF">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</font></u></tt></a><tt><font size="4"><br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.11 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - </font></tt><a href="http://enigmail.mozdev.org/"><tt><u><font size="4" color="#0000FF">http://enigmail.mozdev.org/</font></u></tt></a><tt><font size="4"><br>
<br>
iEYEARECAAYFAk3MMJYACgkQY214tZwSfCvdLwCePvJcm9llEEdJjbKHaFUBaJSb<br>
NEYAmwdY2sfnrPS9ZStnsNpcZX3UD2o+<br>
=+5rQ<br>
-----END PGP SIGNATURE-----<br>
_______________________________________________<br>
dojo-contributors mailing list<br>
dojo-contributors@mail.dojotoolkit.org</font></tt><tt><u><font size="4" color="#0000FF"><br>
</font></u></tt><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors"><tt><u><font size="4" color="#0000FF">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</font></u></tt></a><font size="4"><br>
<br>
</font><tt>_______________________________________________<br>
dojo-contributors mailing list<br>
dojo-contributors@mail.dojotoolkit.org<br>
</tt><tt><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a></tt><tt><br>
</tt><br>
<br>
</body></html>