<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi all,</div><div class=""><br class=""></div><div class="">I started working on automatically generating the type <b class="">casting</b> helpers for HTML/SVG/MathML Elements (e.g. toHTMLDivElement()). Until now, we were generating only the type <b class="">checking</b> helpers using make_names.pl (e.g. isHTMLDivElement()). The type <b class="">casting</b> helpers had to be manually defined using NODE_TYPE_CASTS() macro.</div><div class=""><br class=""></div><div class="">The type casting helpers are now automatically generated for most types. Part of the solution involved using a templated function for type casting because the types are forward-declared and we needed to do a static_cast&lt;&gt;() (a reinterpret_cast&lt;&gt;() could be used with forward declarations but wouldn’t be safe due to multiple inheritance).</div><div class=""><br class=""></div><div class="">I initially had macros in place so that toHTMLDivElement() would still work and would be equivalent to downcast&lt;HTMLDivElement&gt;(). The feedback I received is that we should get rid of these macros and just use is&lt;HTMLDivElement&gt;() / downcast&lt;HTMLDivElement&gt;() everywhere.</div><div class="">The new style is very close to C++’s is_class&lt;T&gt;() and Boost’s polymorphic_downcast&lt;T&gt;().</div><div class=""><br class=""></div><div class="">I actually started updating the code to do this but I should have emailed webkit-dev about this beforehand. I apologize for sending this message a bit late.</div><div class=""><br class=""></div><div class="">Please let me know if you have feedback / concerns / questions about this change. I hope that this email gives you a better understanding of why I am making this change.</div><div class=""><br class=""></div><div class="">As I said before, the code base is not fully ported yet so the current situation is not necessarily pretty. I will try and go through the transition as fast as I can, provided that people don’t raise any concerns about this.</div><div class=""><br class=""></div><div class="">Please also note that these new helpers still catch unnecessary type checks / casts. As a matter of fact, those are now caught at build time instead of linking time and should give you a nice “Unnecessary type check” / “Unnecessary type cast” static assertion.</div><div class=""><br class=""></div><div class="">Also note that the plan is to get rid of TYPE_CAST_BASE() macro entirely and extend is&lt;&gt;() / downcast&lt;&gt;() to all types, not just Nodes.</div><div class=""><br class=""></div>Kr,<br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">--</div><div class="">Chris Dumez - Apple Inc.</div><div class="">Cupertino, CA</div><div class=""><br class=""></div></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">

</div>
<br class=""></body></html>