• 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
Name
Last commit
Last update
..
OWNERS Loading commit data...
expression-classifier.h Loading commit data...
func-name-inferrer.cc Loading commit data...
func-name-inferrer.h Loading commit data...
parameter-initializer-rewriter.cc Loading commit data...
parameter-initializer-rewriter.h Loading commit data...
parse-info.cc Loading commit data...
parse-info.h Loading commit data...
parser-base.h Loading commit data...
parser.cc Loading commit data...
parser.h Loading commit data...
pattern-rewriter.cc Loading commit data...
preparse-data-format.h Loading commit data...
preparse-data.cc Loading commit data...
preparse-data.h Loading commit data...
preparser.cc Loading commit data...
preparser.h Loading commit data...
rewriter.cc Loading commit data...
rewriter.h Loading commit data...
scanner-character-streams.cc Loading commit data...
scanner-character-streams.h Loading commit data...
scanner.cc Loading commit data...
scanner.h Loading commit data...
token.cc Loading commit data...
token.h Loading commit data...