-
nikolaos authored
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 Review-Url: https://codereview.chromium.org/2267663002 Cr-Commit-Position: refs/heads/master@{#38819}
6c2c17cd