diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 1ea7defec0f4ff32a5cd5ed7a1eab6663f64870e..5d26bf1e54ac06deb91bcb9dc515527d8815da42 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -231,9 +231,6 @@ public:
     virtual UsingAST *asUsing() { return 0; }
     virtual UsingDirectiveAST *asUsingDirective() { return 0; }
     virtual WhileStatementAST *asWhileStatement() { return 0; }
-
-    virtual AST *clone(MemoryPool *pool) const = 0;
-
 protected:
     virtual void accept0(ASTVisitor *visitor) = 0;
 };
@@ -245,8 +242,6 @@ public:
 
 public:
     virtual SpecifierAST *asSpecifier() { return this; }
-
-    virtual SpecifierAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST
@@ -260,8 +255,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual SimpleSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -282,8 +275,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual AttributeSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -305,8 +296,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual AttributeAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -325,8 +314,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypeofSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -336,7 +323,6 @@ class CPLUSPLUS_EXPORT StatementAST: public AST
 public:
     virtual StatementAST *asStatement() { return this; }
 
-    virtual StatementAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT ExpressionAST: public AST
@@ -344,7 +330,6 @@ class CPLUSPLUS_EXPORT ExpressionAST: public AST
 public:
     virtual ExpressionAST *asExpression() { return this; }
 
-    virtual ExpressionAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT DeclarationAST: public AST
@@ -352,7 +337,6 @@ class CPLUSPLUS_EXPORT DeclarationAST: public AST
 public:
     virtual DeclarationAST *asDeclaration() { return this; }
 
-    virtual DeclarationAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT DeclarationListAST: public AST
@@ -367,8 +351,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeclarationListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -378,7 +360,6 @@ class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
 public:
     virtual CoreDeclaratorAST *asCoreDeclarator() { return this; }
 
-    virtual CoreDeclaratorAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST
@@ -389,7 +370,6 @@ public:
 public:
     virtual PostfixDeclaratorAST *asPostfixDeclarator() { return this; }
 
-    virtual PostfixDeclaratorAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT DeclaratorAST: public AST
@@ -409,8 +389,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeclaratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -428,8 +406,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ExpressionListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -451,8 +427,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual SimpleDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -468,8 +442,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual EmptyDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -487,8 +459,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual AccessDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -510,8 +480,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual AsmDefinitionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -534,8 +502,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual BaseSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -554,8 +520,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CompoundLiteralAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -574,8 +538,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual QtMethodAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -593,8 +555,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual BinaryExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -613,8 +573,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CastExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -640,8 +598,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ClassSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -660,8 +616,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CaseStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -678,8 +632,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual StatementListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -700,8 +652,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CompoundStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -718,8 +668,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ConditionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -739,8 +687,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ConditionalExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -762,8 +708,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CppCastExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -780,8 +724,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CtorInitializerAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -797,8 +739,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeclarationStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -814,8 +754,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeclaratorIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -833,8 +771,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NestedDeclaratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -858,8 +794,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual FunctionDeclaratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -877,8 +811,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ArrayDeclaratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -896,8 +828,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeclaratorListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -917,8 +847,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DeleteExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -940,8 +868,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DoStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -957,8 +883,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NamedTypeSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -975,8 +899,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ElaboratedTypeSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -996,8 +918,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual EnumSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1017,8 +937,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual EnumeratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1036,8 +954,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ExceptionDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1057,8 +973,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1075,8 +989,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ExpressionOrDeclarationStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1093,8 +1005,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ExpressionStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1117,8 +1027,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual FunctionDefinitionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1147,8 +1055,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ForeachStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1174,8 +1080,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ForStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1200,8 +1104,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual IfStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1219,8 +1121,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ArrayInitializerAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1238,8 +1138,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual LabeledStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1256,8 +1154,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual LinkageBodyAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1275,8 +1171,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual LinkageSpecificationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1297,8 +1191,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual MemInitializerAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1311,7 +1203,6 @@ public: // annotations
 
 public:
     virtual NameAST *asName() { return this; }
-    virtual NameAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST
@@ -1327,8 +1218,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NestedNameSpecifierAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1346,8 +1235,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual QualifiedNameAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1364,8 +1251,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual OperatorFunctionIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1383,8 +1268,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ConversionFunctionIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1400,8 +1283,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual SimpleNameAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1418,8 +1299,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual DestructorNameAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1438,8 +1317,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TemplateIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1461,8 +1338,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NamespaceAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1482,8 +1357,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NamespaceAliasDefinitionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1501,8 +1374,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NewPlacementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1521,8 +1392,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NewArrayDeclaratorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1548,8 +1417,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NewExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1567,8 +1434,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NewInitializerAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1586,8 +1451,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NewTypeIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1605,8 +1468,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual OperatorAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1628,8 +1489,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ParameterDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1646,8 +1505,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ParameterDeclarationClauseAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1660,7 +1517,6 @@ public:
 public:
     virtual PostfixAST *asPostfix() { return this; }
 
-    virtual PostfixAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT CallAST: public PostfixAST
@@ -1676,8 +1532,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CallAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1695,8 +1549,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ArrayAccessAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1712,8 +1564,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual PostIncrDecrAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1731,8 +1581,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual MemberAccessAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1751,8 +1599,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypeidExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1772,8 +1618,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypenameCallExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1792,8 +1636,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypeConstructorCallAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1810,8 +1652,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual PostfixExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1824,7 +1664,6 @@ public:
 public:
     virtual PtrOperatorAST *asPtrOperator() { return this; }
 
-    virtual PtrOperatorAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST
@@ -1841,8 +1680,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual PointerToMemberAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1859,8 +1696,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual PointerAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1876,8 +1711,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ReferenceAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1894,8 +1727,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual BreakStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1912,8 +1743,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ContinueStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1931,8 +1760,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual GotoStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1950,8 +1777,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ReturnStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1970,8 +1795,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual SizeofExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -1987,8 +1810,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NumericLiteralAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2004,8 +1825,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual BoolLiteralAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2021,8 +1840,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ThisExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2040,8 +1857,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual NestedExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2058,8 +1873,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual StringLiteralAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2082,8 +1895,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual SwitchStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2101,8 +1912,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TemplateArgumentListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2123,8 +1932,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TemplateDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2141,8 +1948,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ThrowExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2158,8 +1963,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TranslationUnitAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2177,8 +1980,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TryBlockStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2202,8 +2003,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual CatchClauseAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2220,8 +2019,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypeIdAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2243,8 +2040,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TypenameTypeParameterAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2270,8 +2065,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual TemplateTypeParameterAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2288,8 +2081,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual UnaryExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2311,8 +2102,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual UsingAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2334,8 +2123,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual UsingDirectiveAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2358,8 +2145,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual WhileStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2379,8 +2164,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual IdentifierListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2402,8 +2185,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCClassForwardDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2434,8 +2215,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCClassDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2457,8 +2236,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCProtocolForwardDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2482,8 +2259,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCProtocolDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2501,8 +2276,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCProtocolRefsAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2518,8 +2291,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMessageArgumentAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2536,8 +2307,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMessageArgumentListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2557,8 +2326,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMessageExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2577,8 +2344,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCProtocolExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2597,8 +2362,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCTypeNameAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2615,8 +2378,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCEncodeExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2629,7 +2390,6 @@ public: // annotation
 public:
     virtual ObjCSelectorAST *asObjCSelector() { return this; }
 
-    virtual ObjCSelectorAST *clone(MemoryPool *pool) const = 0;
 };
 
 class CPLUSPLUS_EXPORT ObjCSelectorWithoutArgumentsAST: public ObjCSelectorAST
@@ -2643,8 +2403,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSelectorWithoutArgumentsAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2661,8 +2419,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSelectorArgumentAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2679,8 +2435,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSelectorArgumentListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2696,8 +2450,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSelectorWithArgumentsAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2716,8 +2468,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSelectorExpressionAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2735,8 +2485,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCInstanceVariablesDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2752,8 +2500,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCVisibilityDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2771,8 +2517,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCPropertyAttributeAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2790,8 +2534,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCPropertyAttributeListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2812,8 +2554,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCPropertyDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2834,8 +2574,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMessageArgumentDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2852,8 +2590,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMessageArgumentDeclarationListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2877,8 +2613,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMethodPrototypeAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2896,8 +2630,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCMethodDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2915,8 +2647,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSynthesizedPropertyAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2934,8 +2664,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSynthesizedPropertyListAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2953,8 +2681,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSynthesizedPropertiesDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -2972,8 +2698,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCDynamicPropertiesDeclarationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -3004,8 +2728,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCFastEnumerationAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
@@ -3025,8 +2747,6 @@ public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
 
-    virtual ObjCSynchronizedStatementAST *clone(MemoryPool *pool) const;
-
 protected:
     virtual void accept0(ASTVisitor *visitor);
 };
diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp
deleted file mode 100644
index 3c17829292ac5b2df169591399b214546a635130..0000000000000000000000000000000000000000
--- a/src/shared/cplusplus/ASTClone.cpp
+++ /dev/null
@@ -1,1563 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
-**
-**************************************************************************/
-
-#include "AST.h"
-#include "ASTVisitor.h"
-
-using namespace CPlusPlus;
-
-SimpleSpecifierAST *SimpleSpecifierAST::clone(MemoryPool *pool) const
-{
-    SimpleSpecifierAST *ast = new (pool) SimpleSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy SimpleSpecifierAST
-    ast->specifier_token = specifier_token;
-    return ast;
-}
-
-AttributeSpecifierAST *AttributeSpecifierAST::clone(MemoryPool *pool) const
-{
-    AttributeSpecifierAST *ast = new (pool) AttributeSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy AttributeSpecifierAST
-    ast->attribute_token = attribute_token;
-    ast->first_lparen_token = first_lparen_token;
-    ast->second_lparen_token = second_lparen_token;
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->first_rparen_token = first_rparen_token;
-    ast->second_rparen_token = second_rparen_token;
-    return ast;
-}
-
-AttributeAST *AttributeAST::clone(MemoryPool *pool) const
-{
-    AttributeAST *ast = new (pool) AttributeAST;
-    // copy AttributeAST
-    ast->identifier_token = identifier_token;
-    ast->lparen_token = lparen_token;
-    ast->tag_token = tag_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (next) ast->next = next->clone(pool);
-    ast->comma_token = comma_token;
-    return ast;
-}
-
-TypeofSpecifierAST *TypeofSpecifierAST::clone(MemoryPool *pool) const
-{
-    TypeofSpecifierAST *ast = new (pool) TypeofSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy TypeofSpecifierAST
-    ast->typeof_token = typeof_token;
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-DeclarationListAST *DeclarationListAST::clone(MemoryPool *pool) const
-{
-    DeclarationListAST *ast = new (pool) DeclarationListAST;
-    // copy DeclarationListAST
-    if (declaration) ast->declaration = declaration->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-DeclaratorAST *DeclaratorAST::clone(MemoryPool *pool) const
-{
-    DeclaratorAST *ast = new (pool) DeclaratorAST;
-    // copy DeclaratorAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    if (ptr_operators) ast->ptr_operators = ptr_operators->clone(pool);
-    if (core_declarator) ast->core_declarator = core_declarator->clone(pool);
-    if (postfix_declarators) ast->postfix_declarators = postfix_declarators->clone(pool);
-    if (post_attributes) ast->post_attributes = post_attributes->clone(pool);
-    ast->equals_token = equals_token;
-    if (initializer) ast->initializer = initializer->clone(pool);
-    return ast;
-}
-
-ExpressionListAST *ExpressionListAST::clone(MemoryPool *pool) const
-{
-    ExpressionListAST *ast = new (pool) ExpressionListAST;
-    // copy ExpressionListAST
-    ast->comma_token = comma_token;
-    if (expression) ast->expression = expression->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-SimpleDeclarationAST *SimpleDeclarationAST::clone(MemoryPool *pool) const
-{
-    SimpleDeclarationAST *ast = new (pool) SimpleDeclarationAST;
-    // copy DeclarationAST
-    // copy SimpleDeclarationAST
-    ast->qt_invokable_token = qt_invokable_token;
-    if (decl_specifier_seq) ast->decl_specifier_seq = decl_specifier_seq->clone(pool);
-    if (declarators) ast->declarators = declarators->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-EmptyDeclarationAST *EmptyDeclarationAST::clone(MemoryPool *pool) const
-{
-    EmptyDeclarationAST *ast = new (pool) EmptyDeclarationAST;
-    // copy DeclarationAST
-    // copy EmptyDeclarationAST
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-AccessDeclarationAST *AccessDeclarationAST::clone(MemoryPool *pool) const
-{
-    AccessDeclarationAST *ast = new (pool) AccessDeclarationAST;
-    // copy DeclarationAST
-    // copy AccessDeclarationAST
-    ast->access_specifier_token = access_specifier_token;
-    ast->slots_token = slots_token;
-    ast->colon_token = colon_token;
-    return ast;
-}
-
-AsmDefinitionAST *AsmDefinitionAST::clone(MemoryPool *pool) const
-{
-    AsmDefinitionAST *ast = new (pool) AsmDefinitionAST;
-    // copy DeclarationAST
-    // copy AsmDefinitionAST
-    ast->asm_token = asm_token;
-    ast->volatile_token = volatile_token;
-    ast->lparen_token = lparen_token;
-    ast->rparen_token = rparen_token;
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-BaseSpecifierAST *BaseSpecifierAST::clone(MemoryPool *pool) const
-{
-    BaseSpecifierAST *ast = new (pool) BaseSpecifierAST;
-    // copy BaseSpecifierAST
-    ast->comma_token = comma_token;
-    ast->virtual_token = virtual_token;
-    ast->access_specifier_token = access_specifier_token;
-    if (name) ast->name = name->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-CompoundLiteralAST *CompoundLiteralAST::clone(MemoryPool *pool) const
-{
-    CompoundLiteralAST *ast = new (pool) CompoundLiteralAST;
-    // copy ExpressionAST
-    // copy CompoundLiteralAST
-    ast->lparen_token = lparen_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (initializer) ast->initializer = initializer->clone(pool);
-    return ast;
-}
-
-QtMethodAST *QtMethodAST::clone(MemoryPool *pool) const
-{
-    QtMethodAST *ast = new (pool) QtMethodAST;
-    // copy ExpressionAST
-    // copy QtMethodAST
-    ast->method_token = method_token;
-    ast->lparen_token = lparen_token;
-    if (declarator) ast->declarator = declarator->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-BinaryExpressionAST *BinaryExpressionAST::clone(MemoryPool *pool) const
-{
-    BinaryExpressionAST *ast = new (pool) BinaryExpressionAST;
-    // copy ExpressionAST
-    // copy BinaryExpressionAST
-    if (left_expression) ast->left_expression = left_expression->clone(pool);
-    ast->binary_op_token = binary_op_token;
-    if (right_expression) ast->right_expression = right_expression->clone(pool);
-    return ast;
-}
-
-CastExpressionAST *CastExpressionAST::clone(MemoryPool *pool) const
-{
-    CastExpressionAST *ast = new (pool) CastExpressionAST;
-    // copy ExpressionAST
-    // copy CastExpressionAST
-    ast->lparen_token = lparen_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    return ast;
-}
-
-ClassSpecifierAST *ClassSpecifierAST::clone(MemoryPool *pool) const
-{
-    ClassSpecifierAST *ast = new (pool) ClassSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy ClassSpecifierAST
-    ast->classkey_token = classkey_token;
-    if (attributes) ast->attributes = attributes->clone(pool);
-    if (name) ast->name = name->clone(pool);
-    ast->colon_token = colon_token;
-    if (base_clause) ast->base_clause = base_clause->clone(pool);
-    ast->lbrace_token = lbrace_token;
-    if (member_specifiers) ast->member_specifiers = member_specifiers->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-CaseStatementAST *CaseStatementAST::clone(MemoryPool *pool) const
-{
-    CaseStatementAST *ast = new (pool) CaseStatementAST;
-    // copy StatementAST
-    // copy CaseStatementAST
-    ast->case_token = case_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->colon_token = colon_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-StatementListAST *StatementListAST::clone(MemoryPool *pool) const
-{
-    StatementListAST *ast = new (pool) StatementListAST;
-    // copy StatementListAST
-    if (statement) ast->statement = statement->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-CompoundStatementAST *CompoundStatementAST::clone(MemoryPool *pool) const
-{
-    CompoundStatementAST *ast = new (pool) CompoundStatementAST;
-    // copy StatementAST
-    // copy CompoundStatementAST
-    ast->lbrace_token = lbrace_token;
-    if (statements) ast->statements = statements->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-ConditionAST *ConditionAST::clone(MemoryPool *pool) const
-{
-    ConditionAST *ast = new (pool) ConditionAST;
-    // copy ExpressionAST
-    // copy ConditionAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    return ast;
-}
-
-ConditionalExpressionAST *ConditionalExpressionAST::clone(MemoryPool *pool) const
-{
-    ConditionalExpressionAST *ast = new (pool) ConditionalExpressionAST;
-    // copy ExpressionAST
-    // copy ConditionalExpressionAST
-    if (condition) ast->condition = condition->clone(pool);
-    ast->question_token = question_token;
-    if (left_expression) ast->left_expression = left_expression->clone(pool);
-    ast->colon_token = colon_token;
-    if (right_expression) ast->right_expression = right_expression->clone(pool);
-    return ast;
-}
-
-CppCastExpressionAST *CppCastExpressionAST::clone(MemoryPool *pool) const
-{
-    CppCastExpressionAST *ast = new (pool) CppCastExpressionAST;
-    // copy ExpressionAST
-    // copy CppCastExpressionAST
-    ast->cast_token = cast_token;
-    ast->less_token = less_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    ast->greater_token = greater_token;
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-CtorInitializerAST *CtorInitializerAST::clone(MemoryPool *pool) const
-{
-    CtorInitializerAST *ast = new (pool) CtorInitializerAST;
-    // copy CtorInitializerAST
-    ast->colon_token = colon_token;
-    if (member_initializers) ast->member_initializers = member_initializers->clone(pool);
-    return ast;
-}
-
-DeclarationStatementAST *DeclarationStatementAST::clone(MemoryPool *pool) const
-{
-    DeclarationStatementAST *ast = new (pool) DeclarationStatementAST;
-    // copy StatementAST
-    // copy DeclarationStatementAST
-    if (declaration) ast->declaration = declaration->clone(pool);
-    return ast;
-}
-
-DeclaratorIdAST *DeclaratorIdAST::clone(MemoryPool *pool) const
-{
-    DeclaratorIdAST *ast = new (pool) DeclaratorIdAST;
-    // copy CoreDeclaratorAST
-    // copy DeclaratorIdAST
-    if (name) ast->name = name->clone(pool);
-    return ast;
-}
-
-NestedDeclaratorAST *NestedDeclaratorAST::clone(MemoryPool *pool) const
-{
-    NestedDeclaratorAST *ast = new (pool) NestedDeclaratorAST;
-    // copy CoreDeclaratorAST
-    // copy NestedDeclaratorAST
-    ast->lparen_token = lparen_token;
-    if (declarator) ast->declarator = declarator->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-FunctionDeclaratorAST *FunctionDeclaratorAST::clone(MemoryPool *pool) const
-{
-    FunctionDeclaratorAST *ast = new (pool) FunctionDeclaratorAST;
-    // copy PostfixDeclaratorAST
-    if (next) ast->next = next->clone(pool);
-    // copy FunctionDeclaratorAST
-    ast->lparen_token = lparen_token;
-    if (parameters) ast->parameters = parameters->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (cv_qualifier_seq) ast->cv_qualifier_seq = cv_qualifier_seq->clone(pool);
-    if (exception_specification) ast->exception_specification = exception_specification->clone(pool);
-    if (as_cpp_initializer) ast->as_cpp_initializer = as_cpp_initializer->clone(pool);
-    return ast;
-}
-
-ArrayDeclaratorAST *ArrayDeclaratorAST::clone(MemoryPool *pool) const
-{
-    ArrayDeclaratorAST *ast = new (pool) ArrayDeclaratorAST;
-    // copy PostfixDeclaratorAST
-    if (next) ast->next = next->clone(pool);
-    // copy ArrayDeclaratorAST
-    ast->lbracket_token = lbracket_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rbracket_token = rbracket_token;
-    return ast;
-}
-
-DeclaratorListAST *DeclaratorListAST::clone(MemoryPool *pool) const
-{
-    DeclaratorListAST *ast = new (pool) DeclaratorListAST;
-    // copy DeclaratorListAST
-    ast->comma_token = comma_token;
-    if (declarator) ast->declarator = declarator->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-DeleteExpressionAST *DeleteExpressionAST::clone(MemoryPool *pool) const
-{
-    DeleteExpressionAST *ast = new (pool) DeleteExpressionAST;
-    // copy ExpressionAST
-    // copy DeleteExpressionAST
-    ast->scope_token = scope_token;
-    ast->delete_token = delete_token;
-    ast->lbracket_token = lbracket_token;
-    ast->rbracket_token = rbracket_token;
-    if (expression) ast->expression = expression->clone(pool);
-    return ast;
-}
-
-DoStatementAST *DoStatementAST::clone(MemoryPool *pool) const
-{
-    DoStatementAST *ast = new (pool) DoStatementAST;
-    // copy StatementAST
-    // copy DoStatementAST
-    ast->do_token = do_token;
-    if (statement) ast->statement = statement->clone(pool);
-    ast->while_token = while_token;
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-NamedTypeSpecifierAST *NamedTypeSpecifierAST::clone(MemoryPool *pool) const
-{
-    NamedTypeSpecifierAST *ast = new (pool) NamedTypeSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy NamedTypeSpecifierAST
-    if (name) ast->name = name->clone(pool);
-    return ast;
-}
-
-ElaboratedTypeSpecifierAST *ElaboratedTypeSpecifierAST::clone(MemoryPool *pool) const
-{
-    ElaboratedTypeSpecifierAST *ast = new (pool) ElaboratedTypeSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy ElaboratedTypeSpecifierAST
-    ast->classkey_token = classkey_token;
-    if (name) ast->name = name->clone(pool);
-    return ast;
-}
-
-EnumSpecifierAST *EnumSpecifierAST::clone(MemoryPool *pool) const
-{
-    EnumSpecifierAST *ast = new (pool) EnumSpecifierAST;
-    // copy SpecifierAST
-    if (next) ast->next = next->clone(pool);
-    // copy EnumSpecifierAST
-    ast->enum_token = enum_token;
-    if (name) ast->name = name->clone(pool);
-    ast->lbrace_token = lbrace_token;
-    if (enumerators) ast->enumerators = enumerators->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-EnumeratorAST *EnumeratorAST::clone(MemoryPool *pool) const
-{
-    EnumeratorAST *ast = new (pool) EnumeratorAST;
-    // copy EnumeratorAST
-    ast->comma_token = comma_token;
-    ast->identifier_token = identifier_token;
-    ast->equal_token = equal_token;
-    if (expression) ast->expression = expression->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ExceptionDeclarationAST *ExceptionDeclarationAST::clone(MemoryPool *pool) const
-{
-    ExceptionDeclarationAST *ast = new (pool) ExceptionDeclarationAST;
-    // copy DeclarationAST
-    // copy ExceptionDeclarationAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    ast->dot_dot_dot_token = dot_dot_dot_token;
-    return ast;
-}
-
-ExceptionSpecificationAST *ExceptionSpecificationAST::clone(MemoryPool *pool) const
-{
-    ExceptionSpecificationAST *ast = new (pool) ExceptionSpecificationAST;
-    // copy ExceptionSpecificationAST
-    ast->throw_token = throw_token;
-    ast->lparen_token = lparen_token;
-    ast->dot_dot_dot_token = dot_dot_dot_token;
-    if (type_ids) ast->type_ids = type_ids->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-ExpressionOrDeclarationStatementAST *ExpressionOrDeclarationStatementAST::clone(MemoryPool *pool) const
-{
-    ExpressionOrDeclarationStatementAST *ast = new (pool) ExpressionOrDeclarationStatementAST;
-    // copy StatementAST
-    // copy ExpressionOrDeclarationStatementAST
-    if (expression) ast->expression = expression->clone(pool);
-    if (declaration) ast->declaration = declaration->clone(pool);
-    return ast;
-}
-
-ExpressionStatementAST *ExpressionStatementAST::clone(MemoryPool *pool) const
-{
-    ExpressionStatementAST *ast = new (pool) ExpressionStatementAST;
-    // copy StatementAST
-    // copy ExpressionStatementAST
-    if (expression) ast->expression = expression->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-FunctionDefinitionAST *FunctionDefinitionAST::clone(MemoryPool *pool) const
-{
-    FunctionDefinitionAST *ast = new (pool) FunctionDefinitionAST;
-    // copy DeclarationAST
-    // copy FunctionDefinitionAST
-    ast->qt_invokable_token = qt_invokable_token;
-    if (decl_specifier_seq) ast->decl_specifier_seq = decl_specifier_seq->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    if (ctor_initializer) ast->ctor_initializer = ctor_initializer->clone(pool);
-    if (function_body) ast->function_body = function_body->clone(pool);
-    return ast;
-}
-
-ForeachStatementAST *ForeachStatementAST::clone(MemoryPool *pool) const
-{
-    ForeachStatementAST *ast = new (pool) ForeachStatementAST;
-    // copy StatementAST
-    // copy ForeachStatementAST
-    ast->foreach_token = foreach_token;
-    ast->lparen_token = lparen_token;
-    if (type_specifiers) ast->type_specifiers = type_specifiers->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    if (initializer) ast->initializer = initializer->clone(pool);
-    ast->comma_token = comma_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-ForStatementAST *ForStatementAST::clone(MemoryPool *pool) const
-{
-    ForStatementAST *ast = new (pool) ForStatementAST;
-    // copy StatementAST
-    // copy ForStatementAST
-    ast->for_token = for_token;
-    ast->lparen_token = lparen_token;
-    if (initializer) ast->initializer = initializer->clone(pool);
-    if (condition) ast->condition = condition->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-IfStatementAST *IfStatementAST::clone(MemoryPool *pool) const
-{
-    IfStatementAST *ast = new (pool) IfStatementAST;
-    // copy StatementAST
-    // copy IfStatementAST
-    ast->if_token = if_token;
-    ast->lparen_token = lparen_token;
-    if (condition) ast->condition = condition->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    ast->else_token = else_token;
-    if (else_statement) ast->else_statement = else_statement->clone(pool);
-    return ast;
-}
-
-ArrayInitializerAST *ArrayInitializerAST::clone(MemoryPool *pool) const
-{
-    ArrayInitializerAST *ast = new (pool) ArrayInitializerAST;
-    // copy ExpressionAST
-    // copy ArrayInitializerAST
-    ast->lbrace_token = lbrace_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-LabeledStatementAST *LabeledStatementAST::clone(MemoryPool *pool) const
-{
-    LabeledStatementAST *ast = new (pool) LabeledStatementAST;
-    // copy StatementAST
-    // copy LabeledStatementAST
-    ast->label_token = label_token;
-    ast->colon_token = colon_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-LinkageBodyAST *LinkageBodyAST::clone(MemoryPool *pool) const
-{
-    LinkageBodyAST *ast = new (pool) LinkageBodyAST;
-    // copy DeclarationAST
-    // copy LinkageBodyAST
-    ast->lbrace_token = lbrace_token;
-    if (declarations) ast->declarations = declarations->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-LinkageSpecificationAST *LinkageSpecificationAST::clone(MemoryPool *pool) const
-{
-    LinkageSpecificationAST *ast = new (pool) LinkageSpecificationAST;
-    // copy DeclarationAST
-    // copy LinkageSpecificationAST
-    ast->extern_token = extern_token;
-    ast->extern_type_token = extern_type_token;
-    if (declaration) ast->declaration = declaration->clone(pool);
-    return ast;
-}
-
-MemInitializerAST *MemInitializerAST::clone(MemoryPool *pool) const
-{
-    MemInitializerAST *ast = new (pool) MemInitializerAST;
-    // copy MemInitializerAST
-    ast->comma_token = comma_token;
-    if (name) ast->name = name->clone(pool);
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-NestedNameSpecifierAST *NestedNameSpecifierAST::clone(MemoryPool *pool) const
-{
-    NestedNameSpecifierAST *ast = new (pool) NestedNameSpecifierAST;
-    // copy NestedNameSpecifierAST
-    if (class_or_namespace_name) ast->class_or_namespace_name = class_or_namespace_name->clone(pool);
-    ast->scope_token = scope_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-QualifiedNameAST *QualifiedNameAST::clone(MemoryPool *pool) const
-{
-    QualifiedNameAST *ast = new (pool) QualifiedNameAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy QualifiedNameAST
-    ast->global_scope_token = global_scope_token;
-    if (nested_name_specifier) ast->nested_name_specifier = nested_name_specifier->clone(pool);
-    if (unqualified_name) ast->unqualified_name = unqualified_name->clone(pool);
-    return ast;
-}
-
-OperatorFunctionIdAST *OperatorFunctionIdAST::clone(MemoryPool *pool) const
-{
-    OperatorFunctionIdAST *ast = new (pool) OperatorFunctionIdAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy OperatorFunctionIdAST
-    ast->operator_token = operator_token;
-    if (op) ast->op = op->clone(pool);
-    return ast;
-}
-
-ConversionFunctionIdAST *ConversionFunctionIdAST::clone(MemoryPool *pool) const
-{
-    ConversionFunctionIdAST *ast = new (pool) ConversionFunctionIdAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy ConversionFunctionIdAST
-    ast->operator_token = operator_token;
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (ptr_operators) ast->ptr_operators = ptr_operators->clone(pool);
-    return ast;
-}
-
-SimpleNameAST *SimpleNameAST::clone(MemoryPool *pool) const
-{
-    SimpleNameAST *ast = new (pool) SimpleNameAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy SimpleNameAST
-    ast->identifier_token = identifier_token;
-    return ast;
-}
-
-DestructorNameAST *DestructorNameAST::clone(MemoryPool *pool) const
-{
-    DestructorNameAST *ast = new (pool) DestructorNameAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy DestructorNameAST
-    ast->tilde_token = tilde_token;
-    ast->identifier_token = identifier_token;
-    return ast;
-}
-
-TemplateIdAST *TemplateIdAST::clone(MemoryPool *pool) const
-{
-    TemplateIdAST *ast = new (pool) TemplateIdAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy TemplateIdAST
-    ast->identifier_token = identifier_token;
-    ast->less_token = less_token;
-    if (template_arguments) ast->template_arguments = template_arguments->clone(pool);
-    ast->greater_token = greater_token;
-    return ast;
-}
-
-NamespaceAST *NamespaceAST::clone(MemoryPool *pool) const
-{
-    NamespaceAST *ast = new (pool) NamespaceAST;
-    // copy DeclarationAST
-    // copy NamespaceAST
-    ast->namespace_token = namespace_token;
-    ast->identifier_token = identifier_token;
-    if (attributes) ast->attributes = attributes->clone(pool);
-    if (linkage_body) ast->linkage_body = linkage_body->clone(pool);
-    return ast;
-}
-
-NamespaceAliasDefinitionAST *NamespaceAliasDefinitionAST::clone(MemoryPool *pool) const
-{
-    NamespaceAliasDefinitionAST *ast = new (pool) NamespaceAliasDefinitionAST;
-    // copy DeclarationAST
-    // copy NamespaceAliasDefinitionAST
-    ast->namespace_token = namespace_token;
-    ast->namespace_name_token = namespace_name_token;
-    ast->equal_token = equal_token;
-    if (name) ast->name = name->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-NewPlacementAST *NewPlacementAST::clone(MemoryPool *pool) const
-{
-    NewPlacementAST *ast = new (pool) NewPlacementAST;
-    // copy NewPlacementAST
-    ast->lparen_token = lparen_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-NewArrayDeclaratorAST *NewArrayDeclaratorAST::clone(MemoryPool *pool) const
-{
-    NewArrayDeclaratorAST *ast = new (pool) NewArrayDeclaratorAST;
-    // copy NewArrayDeclaratorAST
-    ast->lbracket_token = lbracket_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rbracket_token = rbracket_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-NewExpressionAST *NewExpressionAST::clone(MemoryPool *pool) const
-{
-    NewExpressionAST *ast = new (pool) NewExpressionAST;
-    // copy ExpressionAST
-    // copy NewExpressionAST
-    ast->scope_token = scope_token;
-    ast->new_token = new_token;
-    if (new_placement) ast->new_placement = new_placement->clone(pool);
-    ast->lparen_token = lparen_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (new_type_id) ast->new_type_id = new_type_id->clone(pool);
-    if (new_initializer) ast->new_initializer = new_initializer->clone(pool);
-    return ast;
-}
-
-NewInitializerAST *NewInitializerAST::clone(MemoryPool *pool) const
-{
-    NewInitializerAST *ast = new (pool) NewInitializerAST;
-    // copy NewInitializerAST
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-NewTypeIdAST *NewTypeIdAST::clone(MemoryPool *pool) const
-{
-    NewTypeIdAST *ast = new (pool) NewTypeIdAST;
-    // copy NewTypeIdAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (ptr_operators) ast->ptr_operators = ptr_operators->clone(pool);
-    if (new_array_declarators) ast->new_array_declarators = new_array_declarators->clone(pool);
-    return ast;
-}
-
-OperatorAST *OperatorAST::clone(MemoryPool *pool) const
-{
-    OperatorAST *ast = new (pool) OperatorAST;
-    // copy OperatorAST
-    ast->op_token = op_token;
-    ast->open_token = open_token;
-    ast->close_token = close_token;
-    return ast;
-}
-
-ParameterDeclarationAST *ParameterDeclarationAST::clone(MemoryPool *pool) const
-{
-    ParameterDeclarationAST *ast = new (pool) ParameterDeclarationAST;
-    // copy DeclarationAST
-    // copy ParameterDeclarationAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    ast->equal_token = equal_token;
-    if (expression) ast->expression = expression->clone(pool);
-    return ast;
-}
-
-ParameterDeclarationClauseAST *ParameterDeclarationClauseAST::clone(MemoryPool *pool) const
-{
-    ParameterDeclarationClauseAST *ast = new (pool) ParameterDeclarationClauseAST;
-    // copy ParameterDeclarationClauseAST
-    if (parameter_declarations) ast->parameter_declarations = parameter_declarations->clone(pool);
-    ast->dot_dot_dot_token = dot_dot_dot_token;
-    return ast;
-}
-
-CallAST *CallAST::clone(MemoryPool *pool) const
-{
-    CallAST *ast = new (pool) CallAST;
-    // copy PostfixAST
-    if (next) ast->next = next->clone(pool);
-    // copy CallAST
-    ast->lparen_token = lparen_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-ArrayAccessAST *ArrayAccessAST::clone(MemoryPool *pool) const
-{
-    ArrayAccessAST *ast = new (pool) ArrayAccessAST;
-    // copy PostfixAST
-    if (next) ast->next = next->clone(pool);
-    // copy ArrayAccessAST
-    ast->lbracket_token = lbracket_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rbracket_token = rbracket_token;
-    return ast;
-}
-
-PostIncrDecrAST *PostIncrDecrAST::clone(MemoryPool *pool) const
-{
-    PostIncrDecrAST *ast = new (pool) PostIncrDecrAST;
-    // copy PostfixAST
-    if (next) ast->next = next->clone(pool);
-    // copy PostIncrDecrAST
-    ast->incr_decr_token = incr_decr_token;
-    return ast;
-}
-
-MemberAccessAST *MemberAccessAST::clone(MemoryPool *pool) const
-{
-    MemberAccessAST *ast = new (pool) MemberAccessAST;
-    // copy PostfixAST
-    if (next) ast->next = next->clone(pool);
-    // copy MemberAccessAST
-    ast->access_token = access_token;
-    ast->template_token = template_token;
-    if (member_name) ast->member_name = member_name->clone(pool);
-    return ast;
-}
-
-TypeidExpressionAST *TypeidExpressionAST::clone(MemoryPool *pool) const
-{
-    TypeidExpressionAST *ast = new (pool) TypeidExpressionAST;
-    // copy ExpressionAST
-    // copy TypeidExpressionAST
-    ast->typeid_token = typeid_token;
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-TypenameCallExpressionAST *TypenameCallExpressionAST::clone(MemoryPool *pool) const
-{
-    TypenameCallExpressionAST *ast = new (pool) TypenameCallExpressionAST;
-    // copy ExpressionAST
-    // copy TypenameCallExpressionAST
-    ast->typename_token = typename_token;
-    if (name) ast->name = name->clone(pool);
-    ast->lparen_token = lparen_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-TypeConstructorCallAST *TypeConstructorCallAST::clone(MemoryPool *pool) const
-{
-    TypeConstructorCallAST *ast = new (pool) TypeConstructorCallAST;
-    // copy ExpressionAST
-    // copy TypeConstructorCallAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    ast->lparen_token = lparen_token;
-    if (expression_list) ast->expression_list = expression_list->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-PostfixExpressionAST *PostfixExpressionAST::clone(MemoryPool *pool) const
-{
-    PostfixExpressionAST *ast = new (pool) PostfixExpressionAST;
-    // copy ExpressionAST
-    // copy PostfixExpressionAST
-    if (base_expression) ast->base_expression = base_expression->clone(pool);
-    if (postfix_expressions) ast->postfix_expressions = postfix_expressions->clone(pool);
-    return ast;
-}
-
-PointerToMemberAST *PointerToMemberAST::clone(MemoryPool *pool) const
-{
-    PointerToMemberAST *ast = new (pool) PointerToMemberAST;
-    // copy PtrOperatorAST
-    if (next) ast->next = next->clone(pool);
-    // copy PointerToMemberAST
-    ast->global_scope_token = global_scope_token;
-    if (nested_name_specifier) ast->nested_name_specifier = nested_name_specifier->clone(pool);
-    ast->star_token = star_token;
-    if (cv_qualifier_seq) ast->cv_qualifier_seq = cv_qualifier_seq->clone(pool);
-    return ast;
-}
-
-PointerAST *PointerAST::clone(MemoryPool *pool) const
-{
-    PointerAST *ast = new (pool) PointerAST;
-    // copy PtrOperatorAST
-    if (next) ast->next = next->clone(pool);
-    // copy PointerAST
-    ast->star_token = star_token;
-    if (cv_qualifier_seq) ast->cv_qualifier_seq = cv_qualifier_seq->clone(pool);
-    return ast;
-}
-
-ReferenceAST *ReferenceAST::clone(MemoryPool *pool) const
-{
-    ReferenceAST *ast = new (pool) ReferenceAST;
-    // copy PtrOperatorAST
-    if (next) ast->next = next->clone(pool);
-    // copy ReferenceAST
-    ast->amp_token = amp_token;
-    return ast;
-}
-
-BreakStatementAST *BreakStatementAST::clone(MemoryPool *pool) const
-{
-    BreakStatementAST *ast = new (pool) BreakStatementAST;
-    // copy StatementAST
-    // copy BreakStatementAST
-    ast->break_token = break_token;
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ContinueStatementAST *ContinueStatementAST::clone(MemoryPool *pool) const
-{
-    ContinueStatementAST *ast = new (pool) ContinueStatementAST;
-    // copy StatementAST
-    // copy ContinueStatementAST
-    ast->continue_token = continue_token;
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-GotoStatementAST *GotoStatementAST::clone(MemoryPool *pool) const
-{
-    GotoStatementAST *ast = new (pool) GotoStatementAST;
-    // copy StatementAST
-    // copy GotoStatementAST
-    ast->goto_token = goto_token;
-    ast->identifier_token = identifier_token;
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ReturnStatementAST *ReturnStatementAST::clone(MemoryPool *pool) const
-{
-    ReturnStatementAST *ast = new (pool) ReturnStatementAST;
-    // copy StatementAST
-    // copy ReturnStatementAST
-    ast->return_token = return_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-SizeofExpressionAST *SizeofExpressionAST::clone(MemoryPool *pool) const
-{
-    SizeofExpressionAST *ast = new (pool) SizeofExpressionAST;
-    // copy ExpressionAST
-    // copy SizeofExpressionAST
-    ast->sizeof_token = sizeof_token;
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-NumericLiteralAST *NumericLiteralAST::clone(MemoryPool *pool) const
-{
-    NumericLiteralAST *ast = new (pool) NumericLiteralAST;
-    // copy ExpressionAST
-    // copy NumericLiteralAST
-    ast->literal_token = literal_token;
-    return ast;
-}
-
-BoolLiteralAST *BoolLiteralAST::clone(MemoryPool *pool) const
-{
-    BoolLiteralAST *ast = new (pool) BoolLiteralAST;
-    // copy ExpressionAST
-    // copy BoolLiteralAST
-    ast->literal_token = literal_token;
-    return ast;
-}
-
-ThisExpressionAST *ThisExpressionAST::clone(MemoryPool *pool) const
-{
-    ThisExpressionAST *ast = new (pool) ThisExpressionAST;
-    // copy ExpressionAST
-    // copy ThisExpressionAST
-    ast->this_token = this_token;
-    return ast;
-}
-
-NestedExpressionAST *NestedExpressionAST::clone(MemoryPool *pool) const
-{
-    NestedExpressionAST *ast = new (pool) NestedExpressionAST;
-    // copy ExpressionAST
-    // copy NestedExpressionAST
-    ast->lparen_token = lparen_token;
-    if (expression) ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-StringLiteralAST *StringLiteralAST::clone(MemoryPool *pool) const
-{
-    StringLiteralAST *ast = new (pool) StringLiteralAST;
-    // copy ExpressionAST
-    // copy StringLiteralAST
-    ast->literal_token = literal_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-SwitchStatementAST *SwitchStatementAST::clone(MemoryPool *pool) const
-{
-    SwitchStatementAST *ast = new (pool) SwitchStatementAST;
-    // copy StatementAST
-    // copy SwitchStatementAST
-    ast->switch_token = switch_token;
-    ast->lparen_token = lparen_token;
-    if (condition) ast->condition = condition->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-TemplateArgumentListAST *TemplateArgumentListAST::clone(MemoryPool *pool) const
-{
-    TemplateArgumentListAST *ast = new (pool) TemplateArgumentListAST;
-    // copy TemplateArgumentListAST
-    ast->comma_token = comma_token;
-    if (template_argument) ast->template_argument = template_argument->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-TemplateDeclarationAST *TemplateDeclarationAST::clone(MemoryPool *pool) const
-{
-    TemplateDeclarationAST *ast = new (pool) TemplateDeclarationAST;
-    // copy DeclarationAST
-    // copy TemplateDeclarationAST
-    ast->export_token = export_token;
-    ast->template_token = template_token;
-    ast->less_token = less_token;
-    if (template_parameters) ast->template_parameters = template_parameters->clone(pool);
-    ast->greater_token = greater_token;
-    if (declaration) ast->declaration = declaration->clone(pool);
-    return ast;
-}
-
-ThrowExpressionAST *ThrowExpressionAST::clone(MemoryPool *pool) const
-{
-    ThrowExpressionAST *ast = new (pool) ThrowExpressionAST;
-    // copy ExpressionAST
-    // copy ThrowExpressionAST
-    ast->throw_token = throw_token;
-    if (expression) ast->expression = expression->clone(pool);
-    return ast;
-}
-
-TranslationUnitAST *TranslationUnitAST::clone(MemoryPool *pool) const
-{
-    TranslationUnitAST *ast = new (pool) TranslationUnitAST;
-    // copy TranslationUnitAST
-    if (declarations) ast->declarations = declarations->clone(pool);
-    return ast;
-}
-
-TryBlockStatementAST *TryBlockStatementAST::clone(MemoryPool *pool) const
-{
-    TryBlockStatementAST *ast = new (pool) TryBlockStatementAST;
-    // copy StatementAST
-    // copy TryBlockStatementAST
-    ast->try_token = try_token;
-    if (statement) ast->statement = statement->clone(pool);
-    if (catch_clause_seq) ast->catch_clause_seq = catch_clause_seq->clone(pool);
-    return ast;
-}
-
-CatchClauseAST *CatchClauseAST::clone(MemoryPool *pool) const
-{
-    CatchClauseAST *ast = new (pool) CatchClauseAST;
-    // copy StatementAST
-    // copy CatchClauseAST
-    ast->catch_token = catch_token;
-    ast->lparen_token = lparen_token;
-    if (exception_declaration) ast->exception_declaration = exception_declaration->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-TypeIdAST *TypeIdAST::clone(MemoryPool *pool) const
-{
-    TypeIdAST *ast = new (pool) TypeIdAST;
-    // copy ExpressionAST
-    // copy TypeIdAST
-    if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    return ast;
-}
-
-TypenameTypeParameterAST *TypenameTypeParameterAST::clone(MemoryPool *pool) const
-{
-    TypenameTypeParameterAST *ast = new (pool) TypenameTypeParameterAST;
-    // copy DeclarationAST
-    // copy TypenameTypeParameterAST
-    ast->classkey_token = classkey_token;
-    if (name) ast->name = name->clone(pool);
-    ast->equal_token = equal_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    return ast;
-}
-
-TemplateTypeParameterAST *TemplateTypeParameterAST::clone(MemoryPool *pool) const
-{
-    TemplateTypeParameterAST *ast = new (pool) TemplateTypeParameterAST;
-    // copy DeclarationAST
-    // copy TemplateTypeParameterAST
-    ast->template_token = template_token;
-    ast->less_token = less_token;
-    if (template_parameters) ast->template_parameters = template_parameters->clone(pool);
-    ast->greater_token = greater_token;
-    ast->class_token = class_token;
-    if (name) ast->name = name->clone(pool);
-    ast->equal_token = equal_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    return ast;
-}
-
-UnaryExpressionAST *UnaryExpressionAST::clone(MemoryPool *pool) const
-{
-    UnaryExpressionAST *ast = new (pool) UnaryExpressionAST;
-    // copy ExpressionAST
-    // copy UnaryExpressionAST
-    ast->unary_op_token = unary_op_token;
-    if (expression) ast->expression = expression->clone(pool);
-    return ast;
-}
-
-UsingAST *UsingAST::clone(MemoryPool *pool) const
-{
-    UsingAST *ast = new (pool) UsingAST;
-    // copy DeclarationAST
-    // copy UsingAST
-    ast->using_token = using_token;
-    ast->typename_token = typename_token;
-    if (name) ast->name = name->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-UsingDirectiveAST *UsingDirectiveAST::clone(MemoryPool *pool) const
-{
-    UsingDirectiveAST *ast = new (pool) UsingDirectiveAST;
-    // copy DeclarationAST
-    // copy UsingDirectiveAST
-    ast->using_token = using_token;
-    ast->namespace_token = namespace_token;
-    if (name) ast->name = name->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-WhileStatementAST *WhileStatementAST::clone(MemoryPool *pool) const
-{
-    WhileStatementAST *ast = new (pool) WhileStatementAST;
-    // copy StatementAST
-    // copy WhileStatementAST
-    ast->while_token = while_token;
-    ast->lparen_token = lparen_token;
-    if (condition) ast->condition = condition->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
-
-IdentifierListAST *IdentifierListAST::clone(MemoryPool *pool) const
-{
-    IdentifierListAST *ast = new (pool) IdentifierListAST;
-    // copy IdentifierListAST
-    if (name) ast->name = name->clone(pool);
-    ast->comma_token = comma_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCClassForwardDeclarationAST *ObjCClassForwardDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCClassForwardDeclarationAST *ast = new (pool) ObjCClassForwardDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCClassForwardDeclarationAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->class_token = class_token;
-    if (identifier_list) ast->identifier_list = identifier_list->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ObjCClassDeclarationAST *ObjCClassDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCClassDeclarationAST *ast = new (pool) ObjCClassDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCClassDeclarationAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->interface_token = interface_token;
-    ast->implementation_token = implementation_token;
-    if (class_name) ast->class_name = class_name->clone(pool);
-    ast->lparen_token = lparen_token;
-    if (category_name) ast->category_name = category_name->clone(pool);
-    ast->rparen_token = rparen_token;
-    ast->colon_token = colon_token;
-    if (superclass) ast->superclass = superclass->clone(pool);
-    if (protocol_refs) ast->protocol_refs = protocol_refs->clone(pool);
-    if (inst_vars_decl) ast->inst_vars_decl = inst_vars_decl->clone(pool);
-    if (member_declarations) ast->member_declarations = member_declarations->clone(pool);
-    ast->end_token = end_token;
-    return ast;
-}
-
-ObjCProtocolForwardDeclarationAST *ObjCProtocolForwardDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCProtocolForwardDeclarationAST *ast = new (pool) ObjCProtocolForwardDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCProtocolForwardDeclarationAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->protocol_token = protocol_token;
-    if (identifier_list) ast->identifier_list = identifier_list->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ObjCProtocolDeclarationAST *ObjCProtocolDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCProtocolDeclarationAST *ast = new (pool) ObjCProtocolDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCProtocolDeclarationAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->protocol_token = protocol_token;
-    if (name) ast->name = name->clone(pool);
-    if (protocol_refs) ast->protocol_refs = protocol_refs->clone(pool);
-    if (member_declarations) ast->member_declarations = member_declarations->clone(pool);
-    ast->end_token = end_token;
-    return ast;
-}
-
-ObjCProtocolRefsAST *ObjCProtocolRefsAST::clone(MemoryPool *pool) const
-{
-    ObjCProtocolRefsAST *ast = new (pool) ObjCProtocolRefsAST;
-    // copy ObjCProtocolRefsAST
-    ast->less_token = less_token;
-    if (identifier_list) ast->identifier_list = identifier_list->clone(pool);
-    ast->greater_token = greater_token;
-    return ast;
-}
-
-ObjCMessageArgumentAST *ObjCMessageArgumentAST::clone(MemoryPool *pool) const
-{
-    ObjCMessageArgumentAST *ast = new (pool) ObjCMessageArgumentAST;
-    // copy ObjCMessageArgumentAST
-    if (parameter_value_expression) ast->parameter_value_expression = parameter_value_expression->clone(pool);
-    return ast;
-}
-
-ObjCMessageArgumentListAST *ObjCMessageArgumentListAST::clone(MemoryPool *pool) const
-{
-    ObjCMessageArgumentListAST *ast = new (pool) ObjCMessageArgumentListAST;
-    // copy ObjCMessageArgumentListAST
-    if (arg) ast->arg = arg->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCMessageExpressionAST *ObjCMessageExpressionAST::clone(MemoryPool *pool) const
-{
-    ObjCMessageExpressionAST *ast = new (pool) ObjCMessageExpressionAST;
-    // copy ExpressionAST
-    // copy ObjCMessageExpressionAST
-    ast->lbracket_token = lbracket_token;
-    if (receiver_expression) ast->receiver_expression = receiver_expression->clone(pool);
-    if (selector) ast->selector = selector->clone(pool);
-    if (argument_list) ast->argument_list = argument_list->clone(pool);
-    ast->rbracket_token = rbracket_token;
-    return ast;
-}
-
-ObjCProtocolExpressionAST *ObjCProtocolExpressionAST::clone(MemoryPool *pool) const
-{
-    ObjCProtocolExpressionAST *ast = new (pool) ObjCProtocolExpressionAST;
-    // copy ExpressionAST
-    // copy ObjCProtocolExpressionAST
-    ast->protocol_token = protocol_token;
-    ast->lparen_token = lparen_token;
-    ast->identifier_token = identifier_token;
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-ObjCTypeNameAST *ObjCTypeNameAST::clone(MemoryPool *pool) const
-{
-    ObjCTypeNameAST *ast = new (pool) ObjCTypeNameAST;
-    // copy ObjCTypeNameAST
-    ast->lparen_token = lparen_token;
-    if (type_id) ast->type_id = type_id->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-ObjCEncodeExpressionAST *ObjCEncodeExpressionAST::clone(MemoryPool *pool) const
-{
-    ObjCEncodeExpressionAST *ast = new (pool) ObjCEncodeExpressionAST;
-    // copy ExpressionAST
-    // copy ObjCEncodeExpressionAST
-    ast->encode_token = encode_token;
-    if (type_name) ast->type_name = type_name->clone(pool);
-    return ast;
-}
-
-ObjCSelectorWithoutArgumentsAST *ObjCSelectorWithoutArgumentsAST::clone(MemoryPool *pool) const
-{
-    ObjCSelectorWithoutArgumentsAST *ast = new (pool) ObjCSelectorWithoutArgumentsAST;
-    // copy ObjCSelectorAST
-    // copy ObjCSelectorWithoutArgumentsAST
-    ast->name_token = name_token;
-    return ast;
-}
-
-ObjCSelectorArgumentAST *ObjCSelectorArgumentAST::clone(MemoryPool *pool) const
-{
-    ObjCSelectorArgumentAST *ast = new (pool) ObjCSelectorArgumentAST;
-    // copy ObjCSelectorArgumentAST
-    ast->name_token = name_token;
-    ast->colon_token = colon_token;
-    return ast;
-}
-
-ObjCSelectorArgumentListAST *ObjCSelectorArgumentListAST::clone(MemoryPool *pool) const
-{
-    ObjCSelectorArgumentListAST *ast = new (pool) ObjCSelectorArgumentListAST;
-    // copy ObjCSelectorArgumentListAST
-    if (argument) ast->argument = argument->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCSelectorWithArgumentsAST *ObjCSelectorWithArgumentsAST::clone(MemoryPool *pool) const
-{
-    ObjCSelectorWithArgumentsAST *ast = new (pool) ObjCSelectorWithArgumentsAST;
-    // copy ObjCSelectorAST
-    // copy ObjCSelectorWithArgumentsAST
-    if (selector_arguments) ast->selector_arguments = selector_arguments->clone(pool);
-    return ast;
-}
-
-ObjCSelectorExpressionAST *ObjCSelectorExpressionAST::clone(MemoryPool *pool) const
-{
-    ObjCSelectorExpressionAST *ast = new (pool) ObjCSelectorExpressionAST;
-    // copy ExpressionAST
-    // copy ObjCSelectorExpressionAST
-    ast->selector_token = selector_token;
-    ast->lparen_token = lparen_token;
-    if (selector) ast->selector = selector->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
-ObjCInstanceVariablesDeclarationAST *ObjCInstanceVariablesDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCInstanceVariablesDeclarationAST *ast = new (pool) ObjCInstanceVariablesDeclarationAST;
-    // copy ObjCInstanceVariablesDeclarationAST
-    ast->lbrace_token = lbrace_token;
-    if (instance_variables) ast->instance_variables = instance_variables->clone(pool);
-    ast->rbrace_token = rbrace_token;
-    return ast;
-}
-
-ObjCVisibilityDeclarationAST *ObjCVisibilityDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCVisibilityDeclarationAST *ast = new (pool) ObjCVisibilityDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCVisibilityDeclarationAST
-    ast->visibility_token = visibility_token;
-    return ast;
-}
-
-ObjCPropertyAttributeAST *ObjCPropertyAttributeAST::clone(MemoryPool *pool) const
-{
-    ObjCPropertyAttributeAST *ast = new (pool) ObjCPropertyAttributeAST;
-    // copy ObjCPropertyAttributeAST
-    ast->attribute_identifier_token = attribute_identifier_token;
-    ast->equals_token = equals_token;
-    if (method_selector) ast->method_selector = method_selector->clone(pool);
-    return ast;
-}
-
-ObjCPropertyAttributeListAST *ObjCPropertyAttributeListAST::clone(MemoryPool *pool) const
-{
-    ObjCPropertyAttributeListAST *ast = new (pool) ObjCPropertyAttributeListAST;
-    // copy ObjCPropertyAttributeListAST
-    if (attr) ast->attr = attr->clone(pool);
-    ast->comma_token = comma_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCPropertyDeclarationAST *ObjCPropertyDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCPropertyDeclarationAST *ast = new (pool) ObjCPropertyDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCPropertyDeclarationAST
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->property_token = property_token;
-    ast->lparen_token = lparen_token;
-    if (property_attributes) ast->property_attributes = property_attributes->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (simple_declaration) ast->simple_declaration = simple_declaration->clone(pool);
-    return ast;
-}
-
-ObjCMessageArgumentDeclarationAST *ObjCMessageArgumentDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCMessageArgumentDeclarationAST *ast = new (pool) ObjCMessageArgumentDeclarationAST;
-    // copy ExpressionAST
-    // copy NameAST
-    // copy ObjCMessageArgumentDeclarationAST
-    if (type_name) ast->type_name = type_name->clone(pool);
-    if (attributes) ast->attributes = attributes->clone(pool);
-    ast->param_name_token = param_name_token;
-    return ast;
-}
-
-ObjCMessageArgumentDeclarationListAST *ObjCMessageArgumentDeclarationListAST::clone(MemoryPool *pool) const
-{
-    ObjCMessageArgumentDeclarationListAST *ast = new (pool) ObjCMessageArgumentDeclarationListAST;
-    // copy ObjCMessageArgumentDeclarationListAST
-    if (argument_declaration) ast->argument_declaration = argument_declaration->clone(pool);
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCMethodPrototypeAST *ObjCMethodPrototypeAST::clone(MemoryPool *pool) const
-{
-    ObjCMethodPrototypeAST *ast = new (pool) ObjCMethodPrototypeAST;
-    // copy ObjCMethodPrototypeAST
-    ast->method_type_token = method_type_token;
-    if (type_name) ast->type_name = type_name->clone(pool);
-    if (selector) ast->selector = selector->clone(pool);
-    if (arguments) ast->arguments = arguments->clone(pool);
-    ast->dot_dot_dot_token = dot_dot_dot_token;
-    if (attributes) ast->attributes = attributes->clone(pool);
-    return ast;
-}
-
-ObjCMethodDeclarationAST *ObjCMethodDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCMethodDeclarationAST *ast = new (pool) ObjCMethodDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCMethodDeclarationAST
-    if (method_prototype) ast->method_prototype = method_prototype->clone(pool);
-    if (function_body) ast->function_body = function_body->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ObjCSynthesizedPropertyAST *ObjCSynthesizedPropertyAST::clone(MemoryPool *pool) const
-{
-    ObjCSynthesizedPropertyAST *ast = new (pool) ObjCSynthesizedPropertyAST;
-    // copy ObjCSynthesizedPropertyAST
-    ast->equals_token = equals_token;
-    return ast;
-}
-
-ObjCSynthesizedPropertyListAST *ObjCSynthesizedPropertyListAST::clone(MemoryPool *pool) const
-{
-    ObjCSynthesizedPropertyListAST *ast = new (pool) ObjCSynthesizedPropertyListAST;
-    // copy ObjCSynthesizedPropertyListAST
-    if (synthesized_property) ast->synthesized_property = synthesized_property->clone(pool);
-    ast->comma_token = comma_token;
-    if (next) ast->next = next->clone(pool);
-    return ast;
-}
-
-ObjCSynthesizedPropertiesDeclarationAST *ObjCSynthesizedPropertiesDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCSynthesizedPropertiesDeclarationAST *ast = new (pool) ObjCSynthesizedPropertiesDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCSynthesizedPropertiesDeclarationAST
-    ast->synthesized_token = synthesized_token;
-    if (property_identifiers) ast->property_identifiers = property_identifiers->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ObjCDynamicPropertiesDeclarationAST *ObjCDynamicPropertiesDeclarationAST::clone(MemoryPool *pool) const
-{
-    ObjCDynamicPropertiesDeclarationAST *ast = new (pool) ObjCDynamicPropertiesDeclarationAST;
-    // copy DeclarationAST
-    // copy ObjCDynamicPropertiesDeclarationAST
-    ast->dynamic_token = dynamic_token;
-    if (property_identifiers) ast->property_identifiers = property_identifiers->clone(pool);
-    ast->semicolon_token = semicolon_token;
-    return ast;
-}
-
-ObjCFastEnumerationAST *ObjCFastEnumerationAST::clone(MemoryPool *pool) const
-{
-    ObjCFastEnumerationAST *ast = new (pool) ObjCFastEnumerationAST;
-    // copy StatementAST
-    // copy ObjCFastEnumerationAST
-    ast->for_token = for_token;
-    ast->lparen_token = lparen_token;
-    if (type_specifiers) ast->type_specifiers = type_specifiers->clone(pool);
-    if (declarator) ast->declarator = declarator->clone(pool);
-    if (initializer) ast->initializer = initializer->clone(pool);
-    ast->in_token = in_token;
-    if (fast_enumeratable_expression) ast->fast_enumeratable_expression = fast_enumeratable_expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (body_statement) ast->body_statement = body_statement->clone(pool);
-    return ast;
-}
-
-ObjCSynchronizedStatementAST *ObjCSynchronizedStatementAST::clone(MemoryPool *pool) const
-{
-    ObjCSynchronizedStatementAST *ast = new (pool) ObjCSynchronizedStatementAST;
-    // copy StatementAST
-    // copy ObjCSynchronizedStatementAST
-    ast->synchronized_token = synchronized_token;
-    ast->lparen_token = lparen_token;
-    if (synchronized_object) ast->synchronized_object = synchronized_object->clone(pool);
-    ast->rparen_token = rparen_token;
-    if (statement) ast->statement = statement->clone(pool);
-    return ast;
-}
diff --git a/src/shared/cplusplus/cplusplus.pri b/src/shared/cplusplus/cplusplus.pri
index e6453870b5a3454898de5e78e07a7a4093ede4b0..ddb82afbcd0bb2038cea1cb36c0d8bc145e4fb60 100644
--- a/src/shared/cplusplus/cplusplus.pri
+++ b/src/shared/cplusplus/cplusplus.pri
@@ -40,7 +40,6 @@ HEADERS += \
 
 SOURCES += \
     $$PWD/AST.cpp \
-    $$PWD/ASTClone.cpp \
     $$PWD/ASTVisit.cpp \
     $$PWD/ASTVisitor.cpp \
     $$PWD/Array.cpp \