[webkit-dev] Stricter type checking in downcast<>()
Chris Dumez
cdumez at apple.com
Wed Dec 20 12:30:47 PST 2023
Hi,
I have recently landed stricter type checking in downcast<>() [1]. It is stricter because the check is now happening in release / production builds on some platforms (ARM-based).
My objective is to enable to check in release on all platforms in the near future (still a small performance hit on remaining platforms at the moment).
Because of this, it is now recommended to use dynamicDowncast<>() instead of is<>() + downcast<>(), to avoid duplicating the type check.
dynamicDowncast<>() is also less error-prone and often results in more concise code.
If you have a case where performance matters and you’re confident a type check is not required, you may rely on uncheckedDowncast<>().
uncheckedDowncast<>() behaves the same way downcast<>() used to before my change (type check on debug builds only).
One such example I’ve seen in our codebase is when using a switch statement based on the type:
```
switch (node.nodeType()) {
case Node::DOCUMENT_TYPE_NODE:
uncheckedDowncast<DocumentType>(node)->foo();
```
Please let me know if you have any concerns / questions.
Cheers,
Chris Dumez.
[1] https://commits.webkit.org/272296@main
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20231220/65d1660c/attachment.htm>
More information about the webkit-dev
mailing list