This all looks wonderful!

One question though, why downcast<>(…)? Will we be adding an upcast<>() 
function? Since the answer is probably no, could we just call this cast<>(…)?

- Sam

> On Sep 25, 2014, at 11:11 AM, Chris Dumez <[email protected]> wrote:
> 
> Hi all,
> 
> I started working on automatically generating the type casting helpers for 
> HTML/SVG/MathML Elements (e.g. toHTMLDivElement()). Until now, we were 
> generating only the type checking helpers using make_names.pl (e.g. 
> isHTMLDivElement()). The type casting helpers had to be manually defined 
> using NODE_TYPE_CASTS() macro.
> 
> 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<>() (a 
> reinterpret_cast<>() could be used with forward declarations but wouldn’t be 
> safe due to multiple inheritance).
> 
> I initially had macros in place so that toHTMLDivElement() would still work 
> and would be equivalent to downcast<HTMLDivElement>(). The feedback I 
> received is that we should get rid of these macros and just use 
> is<HTMLDivElement>() / downcast<HTMLDivElement>() everywhere.
> The new style is very close to C++’s is_class<T>() and Boost’s 
> polymorphic_downcast<T>().
> 
> 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.
> 
> 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.
> 
> 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.
> 
> 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.
> 
> Also note that the plan is to get rid of TYPE_CAST_BASE() macro entirely and 
> extend is<>() / downcast<>() to all types, not just Nodes.
> 
> Kr,
> --
> Chris Dumez - Apple Inc.
> Cupertino, CA
> 
> 
> 
> 
> _______________________________________________
> webkit-dev mailing list
> [email protected]
> https://lists.webkit.org/mailman/listinfo/webkit-dev

_______________________________________________
webkit-dev mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to