Skip to content

Instantly share code, notes, and snippets.

@d11wtq
Last active August 29, 2015 13:57
Show Gist options
  • Save d11wtq/9575063 to your computer and use it in GitHub Desktop.
Save d11wtq/9575063 to your computer and use it in GitHub Desktop.

Revisions

  1. d11wtq revised this gist Mar 15, 2014. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions generics.cpp
    Original file line number Diff line number Diff line change
    @@ -3,8 +3,7 @@ class ASTNode {
    template <class T> virtual T accept(Visitor<T> *visitor);
    };

    template <class T>
    class Visitor {
    template <class T> class Visitor {
    public:
    virtual T visit(CallNode *node) = 0;
    virtual T visit(BinExprNode *node) = 0;
  2. d11wtq revised this gist Mar 15, 2014. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions generics.cpp
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,6 @@
    class ASTNode {
    public:
    template <class T>
    virtual T accept(Visitor<T> *visitor);
    template <class T> virtual T accept(Visitor<T> *visitor);
    };

    template <class T>
  3. d11wtq revised this gist Mar 15, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion generics.cpp
    Original file line number Diff line number Diff line change
    @@ -16,6 +16,6 @@ class Optimizer : public Visitor<ASTNode *> {
    ASTNode *visit(BinExprNode *node) {
    ASTNode *optimizedL = <ASTNode *>node->left()->accept(this);
    ASTNode *optimizedR = <ASTNode *>node->right()->accept(this);
    return new BinExprNode(optimizedL, node->operator(), optimizedR);
    return new BinExprNode(optimizedL, node->op(), optimizedR);
    }
    };
  4. d11wtq revised this gist Mar 15, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion generics.cpp
    Original file line number Diff line number Diff line change
    @@ -16,6 +16,6 @@ class Optimizer : public Visitor<ASTNode *> {
    ASTNode *visit(BinExprNode *node) {
    ASTNode *optimizedL = <ASTNode *>node->left()->accept(this);
    ASTNode *optimizedR = <ASTNode *>node->right()->accept(this);
    return new BinExprNode(optimizedL, optimizedR);
    return new BinExprNode(optimizedL, node->operator(), optimizedR);
    }
    };
  5. d11wtq revised this gist Mar 15, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions generics.cpp
    Original file line number Diff line number Diff line change
    @@ -13,9 +13,9 @@ class Visitor {

    class Optimizer : public Visitor<ASTNode *> {
    public:
    ASTNode *visit(CallNode *node) {
    ASTNode *visit(BinExprNode *node) {
    ASTNode *optimizedL = <ASTNode *>node->left()->accept(this);
    ASTNode *optimizedR = <ASTNode *>node->right()->accept(this);
    return new CallNode(optimizedL, optimizedR);
    return new BinExprNode(optimizedL, optimizedR);
    }
    };
  6. d11wtq revised this gist Mar 15, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion generics.cpp
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    class ASTNode {
    public:
    template <class T>
    virtual T accept(Visitor *visitor);
    virtual T accept(Visitor<T> *visitor);
    };

    template <class T>
  7. d11wtq created this gist Mar 15, 2014.
    21 changes: 21 additions & 0 deletions generics.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    class ASTNode {
    public:
    template <class T>
    virtual T accept(Visitor *visitor);
    };

    template <class T>
    class Visitor {
    public:
    virtual T visit(CallNode *node) = 0;
    virtual T visit(BinExprNode *node) = 0;
    };

    class Optimizer : public Visitor<ASTNode *> {
    public:
    ASTNode *visit(CallNode *node) {
    ASTNode *optimizedL = <ASTNode *>node->left()->accept(this);
    ASTNode *optimizedR = <ASTNode *>node->right()->accept(this);
    return new CallNode(optimizedL, optimizedR);
    }
    };