Description[parser] Apply an adaptation of the CRTP
This patch applies an adaptation of the Curiously Recurring Template
Pattern to the parser objects. The result is roughly:
// Common denominator, needed to avoid cyclic dependency.
// Instances of this template will end up with very minimal
// definitions, ideally containing just typedefs.
template <typename Impl>
class ParserBaseTraits;
// The parser base object, which should just implement pure
// parser behavior. The Impl parameter is the actual derived
// class (according to CRTP), which implements impure parser
// behavior.
template <typename Impl>
class ParserBase : public ParserBaseTraits<Impl> { ... };
// And then, for each parser variant:
class Parser;
template <>
class ParserBaseTraits<Parser> { ... };
class Parser : public ParserBase<Parser> { ... };
Using the CRTP, we will ultimately achieve two goals:
(1) clean up the traits objects, but most importantly
(2) clearly separate pure/impure parser implementation and facilitate
experimentation with different parser variants.
R=adamk@chromium.org, marja@chromium.org
BUG=
LOG=N
Committed: https://crrev.com/6c2c17cd4d0f585509cb32566e7489f97ad2d5f5
Cr-Commit-Position: refs/heads/master@{#38819}
Patch Set 1 #Patch Set 2 : Rebase w.r.t. PS#2 of 2263973003 #
Total comments: 4
Patch Set 3 : Rebase #Patch Set 4 : Changes after reviewers' comments #Patch Set 5 : Formatting #
Messages
Total messages: 21 (12 generated)
|