[PATCH] D21410: [pdb] Change type visitor pattern to use dynamic polymorphism
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 15 14:44:38 PDT 2016
zturner created this revision.
zturner added reviewers: rnk, ruiu.
zturner added a subscriber: llvm-commits.
This gets rid of the CRTP (curiously recurring template pattern) on the `CTypeVisitor`, and instead changes to a method of dynamic polymorphism to call back into the visitor implementation.
This has a number of advantages, including:
1) Ability to implement `CTypeVisitor` in a .cpp file instead of a .h file
2) Removal of a bunch of methods and code duplication since functionality of `CTypeVisitorImpl` can be merged with functionality of `TypeDumper`.
3) It's possible to implement a simple visitor with MUCH less code than before. Since the base class provides virtual methods with default implementations, if all you want to do is handle a few simple method types, you need only override the few methods you care about. This can lead to much less code when writing a new visitation handler. Previously you would have to do the #define magic and implement every method in the class, and if you only wanted 2 or 3 methods to do something, there would be a lot of unnecessary function definitions.
4) More robust error propagation. Since we don't rely on saving error state in a boolean anymore, we can simply propagate errors all the way out to the top level with actual `llvm::Error`s. This allows the implementations to propagate more information up the call stack.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 52820 bytes
Desc: not available
More information about the llvm-commits