Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision baf7fee060790c21c0bbe680e7fba33fe7b6b433)
+++ src/SynTree/Statement.h	(revision 385c1309bdc9ace6d6de8377cf50fe8b65bccccb)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Statement.h -- 
+// Statement.h --
 //
 // Author           : Richard C. Bilson
@@ -57,4 +57,5 @@
   public:
 	ExprStmt( std::list<Label> labels, Expression *expr );
+	ExprStmt( const ExprStmt &other );
 	virtual ~ExprStmt();
 
@@ -73,4 +74,5 @@
   public:
 	AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> input, std::list<Expression *> output, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels );
+	AsmStmt( const AsmStmt &other );
 	virtual ~AsmStmt();
 
@@ -103,4 +105,5 @@
   public:
 	IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart );
+	IfStmt( const IfStmt &other );
 	virtual ~IfStmt();
 
@@ -111,5 +114,5 @@
 	Statement *get_elsePart() { return elsePart; }
 	void set_elsePart( Statement *newValue ) { elsePart = newValue; }
-	
+
 	virtual IfStmt *clone() const { return new IfStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -125,4 +128,5 @@
   public:
 	SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
+	SwitchStmt( const SwitchStmt &other );
 	virtual ~SwitchStmt();
 
@@ -146,4 +150,5 @@
   public:
 	ChooseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
+	ChooseStmt( const ChooseStmt &other );
 	virtual ~ChooseStmt();
 
@@ -177,6 +182,7 @@
 class CaseStmt : public Statement {
   public:
-	CaseStmt( std::list<Label> labels, Expression *conditions, 
+	CaseStmt( std::list<Label> labels, Expression *conditions,
 	      std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
+	CaseStmt( const CaseStmt &other );
 	virtual ~CaseStmt();
 
@@ -192,5 +198,5 @@
 	std::list<Statement *> &get_statements() { return stmts; }
 	void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; }
-	
+
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -208,4 +214,5 @@
 	WhileStmt( std::list<Label> labels, Expression *condition,
 	       Statement *body, bool isDoWhile = false );
+	WhileStmt( const WhileStmt &other );
 	virtual ~WhileStmt();
 
@@ -216,5 +223,5 @@
 	bool get_isDoWhile() { return isDoWhile; }
 	void set_isDoWhile( bool newValue ) { isDoWhile = newValue; }
-	
+
 	virtual WhileStmt *clone() const { return new WhileStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -231,4 +238,5 @@
 	ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
 	     Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
+	ForStmt( const ForStmt &other );
 	virtual ~ForStmt();
 
@@ -241,5 +249,5 @@
 	Statement *get_body() { return body; }
 	void set_body( Statement *newValue ) { body = newValue; }
-	
+
 	virtual ForStmt *clone() const { return new ForStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -259,10 +267,9 @@
 	BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError);
 	BranchStmt( std::list<Label> labels, Expression *computedTarget, Type ) throw (SemanticError);
-	virtual ~BranchStmt() {}
 
 	Label get_originalTarget() { return originalTarget; }
 	Label get_target() { return target; }
 	void set_target( Label newValue ) { target = newValue; }
-	
+
 	Expression *get_computedTarget() { return computedTarget; }
 	void set_target( Expression * newValue ) { computedTarget = newValue; }
@@ -286,9 +293,10 @@
   public:
 	ReturnStmt( std::list<Label> labels, Expression *expr, bool throwP = false );
+	ReturnStmt( const ReturnStmt &other );
 	virtual ~ReturnStmt();
 
 	Expression *get_expr() { return expr; }
 	void set_expr( Expression *newValue ) { expr = newValue; }
-	
+
 	virtual ReturnStmt *clone() const { return new ReturnStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -305,5 +313,4 @@
 	NullStmt();
 	NullStmt( std::list<Label> labels );
-	virtual ~NullStmt();
 
 	virtual NullStmt *clone() const { return new NullStmt( *this ); }
@@ -311,9 +318,9 @@
 	virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-	
-  private:
-};
-
-class TryStmt : public Statement { 
+
+  private:
+};
+
+class TryStmt : public Statement {
   public:
 	TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &handlers, FinallyStmt *finallyBlock = 0 );
@@ -332,14 +339,15 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-	
+
   private:
 	CompoundStmt *block;
 	std::list<Statement *> handlers;
 	FinallyStmt *finallyBlock;
-}; 
+};
 
 class CatchStmt : public Statement {
   public:
 	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
+	CatchStmt( const CatchStmt &other );
 	virtual ~CatchStmt();
 
@@ -349,10 +357,10 @@
 	Statement *get_body() { return body; }
 	void set_body( Statement *newValue ) { body = newValue; }
-	
+
 	virtual CatchStmt *clone() const { return new CatchStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-	
+
   private:
 	Declaration *decl;
@@ -361,12 +369,13 @@
 };
 
-class FinallyStmt : public Statement { 
+class FinallyStmt : public Statement {
   public:
 	FinallyStmt( std::list<Label> labels, CompoundStmt *block );
+	FinallyStmt( const FinallyStmt &other );
 	virtual ~FinallyStmt();
 
 	CompoundStmt *get_block() const { return block; }
 	void set_block( CompoundStmt *newValue ) { block = newValue; }
-	
+
 	virtual FinallyStmt *clone() const { return new FinallyStmt( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -375,5 +384,5 @@
   private:
 	CompoundStmt *block;
-}; 
+};
 
 
