• nikolaos's avatar
    [parser] Apply an adaptation of the CRTP · 6c2c17cd
    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
preparser.h 45.6 KB