Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision a16764a6fbfe44300fc8834400a31c89befda091)
+++ src/SynTree/Statement.cc	(revision 68f9c43ecf1873cbb5f06aee682704b56612ed16)
@@ -44,13 +44,7 @@
 }
 
-Statement::~Statement() {}
-
 ExprStmt::ExprStmt( Expression *expr ) : Statement(), expr( expr ) {}
 
 ExprStmt::ExprStmt( const ExprStmt &other ) : Statement( other ), expr( maybeClone( other.expr ) ) {}
-
-ExprStmt::~ExprStmt() {
-	delete expr;
-}
 
 void ExprStmt::print( std::ostream &os, Indenter indent ) const {
@@ -66,11 +60,4 @@
   cloneAll( other.input, input );
   cloneAll( other.clobber, clobber );
-}
-
-AsmStmt::~AsmStmt() {
-	delete instruction;
-	deleteAll( output );
-	deleteAll( input );
-	deleteAll( clobber );
 }
 
@@ -122,8 +109,4 @@
 ReturnStmt::ReturnStmt( const ReturnStmt & other ) : Statement( other ), expr( maybeClone( other.expr ) ) {}
 
-ReturnStmt::~ReturnStmt() {
-	delete expr;
-}
-
 void ReturnStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Return Statement, returning: ";
@@ -141,11 +124,4 @@
 	Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {
 	cloneAll( other.initialization, initialization );
-}
-
-IfStmt::~IfStmt() {
-	deleteAll( initialization );
-	delete condition;
-	delete thenPart;
-	delete elsePart;
 }
 
@@ -185,10 +161,4 @@
 }
 
-SwitchStmt::~SwitchStmt() {
-	delete condition;
-	// destroy statements
-	deleteAll( statements );
-}
-
 void SwitchStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Switch on condition: ";
@@ -209,9 +179,4 @@
 	Statement( other ), condition( maybeClone(other.condition ) ), _isDefault( other._isDefault ) {
 	cloneAll( other.stmts, stmts );
-}
-
-CaseStmt::~CaseStmt() {
-	delete condition;
-	deleteAll( stmts );
 }
 
@@ -243,9 +208,4 @@
 }
 
-WhileStmt::~WhileStmt() {
-	delete body;
-	delete condition;
-}
-
 void WhileStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "While on condition: " << endl ;
@@ -265,11 +225,4 @@
 		cloneAll( other.initialization, initialization );
 
-}
-
-ForStmt::~ForStmt() {
-	deleteAll( initialization );
-	delete condition;
-	delete increment;
-	delete body;
 }
 
@@ -311,9 +264,4 @@
 ThrowStmt::ThrowStmt( const ThrowStmt &other ) :
 	Statement ( other ), kind( other.kind ), expr( maybeClone( other.expr ) ), target( maybeClone( other.target ) ) {
-}
-
-ThrowStmt::~ThrowStmt() {
-	delete expr;
-	delete target;
 }
 
@@ -336,10 +284,4 @@
 }
 
-TryStmt::~TryStmt() {
-	delete block;
-	deleteAll( handlers );
-	delete finallyBlock;
-}
-
 void TryStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Try Statement" << endl;
@@ -370,9 +312,4 @@
 }
 
-CatchStmt::~CatchStmt() {
-	delete decl;
-	delete body;
-}
-
 void CatchStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl;
@@ -397,8 +334,4 @@
 
 FinallyStmt::FinallyStmt( const FinallyStmt & other ) : Statement( other ), block( maybeClone( other.block ) ) {
-}
-
-FinallyStmt::~FinallyStmt() {
-	delete block;
 }
 
@@ -434,20 +367,4 @@
 }
 
-WaitForStmt::~WaitForStmt() {
-	for( auto & clause : clauses ) {
-		delete clause.target.function;
-		deleteAll( clause.target.arguments );
-		delete clause.statement;
-		delete clause.condition;
-	}
-
-	delete timeout.time;
-	delete timeout.statement;
-	delete timeout.condition;
-
-	delete orelse.statement;
-	delete orelse.condition;
-}
-
 void WaitForStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Waitfor Statement" << endl;
@@ -460,8 +377,4 @@
 WithStmt::WithStmt( const WithStmt & other ) : Statement( other ), stmt( maybeClone( other.stmt ) ) {
 	cloneAll( other.exprs, exprs );
-}
-WithStmt::~WithStmt() {
-	deleteAll( exprs );
-	delete stmt;
 }
 
@@ -489,8 +402,4 @@
 }
 
-ImplicitCtorDtorStmt::~ImplicitCtorDtorStmt() {
-	delete callStmt;
-}
-
 void ImplicitCtorDtorStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Implicit Ctor Dtor Statement" << endl;
