Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 8cc5cb01105cea863ee8ce78afaec9c069dc61b8)
+++ src/Parser/ParseNode.h	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 12:24:11 2016
-// Update Count     : 443
+// Last Modified On : Sun Aug 14 08:09:54 2016
+// Update Count     : 469
 //
 
@@ -45,8 +45,8 @@
 	virtual ~ParseNode();
 
-	ParseNode *get_link() const { return next; }
+	ParseNode *get_next() const { return next; }
+	ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
 	ParseNode *get_last();
-	ParseNode *set_link( ParseNode * );
-	void set_next( ParseNode *newlink ) { next = newlink; }
+	ParseNode *set_last( ParseNode * );
 
 	virtual ParseNode *clone() const { return 0; };
@@ -343,6 +343,4 @@
 	~StatementNode();
 
-	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
-
 	StatementNode *set_block( StatementNode *b ) { block = b; return this; }
 	StatementNode *get_block() const { return block; }
@@ -357,7 +355,6 @@
 
 	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
-	void setCatchRest( bool newVal ) { isCatchRest = newVal; }
-
-	std::string get_target() const;
+
+	void setCatchRest( bool newVal ) { catchAny = newVal; }
 
 	// StatementNode *add_controlexp( ExpressionNode * );
@@ -368,5 +365,5 @@
 	virtual StatementNode *clone() const;
 	virtual Statement *build() const;
-  private:
+  public:
 	static const char *StType[];
 	Type type;
@@ -374,13 +371,14 @@
 	StatementNode *block;
 	std::list<std::string> labels;
-	std::string *target;				// target label for jump statements
+	std::string *target;								// target label for jump statements
 	DeclarationNode *decl;
-	bool isCatchRest;
+	bool catchAny;
 }; // StatementNode
 
 class StatementNode2 : public StatementNode {
   public:
-	StatementNode2() {}
+	StatementNode2() { stmt = nullptr; }
 	StatementNode2( Statement *stmt ) : stmt( stmt ) {}
+	StatementNode2( DeclarationNode *decl );
 	virtual ~StatementNode2() {}
 
@@ -392,6 +390,7 @@
 		return this;
 	}
+	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
+
 	virtual StatementNode *append_last_case( StatementNode * );
-	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
 
 	virtual void print( std::ostream &os, int indent = 0 ) {}
@@ -401,9 +400,11 @@
 }; // StatementNode
 
+Statement *build_expr( ExpressionNode *ctl );
+
 struct ForCtl {
 	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
-		init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
+		init( new StatementNode2( build_expr( expr ) ) ), condition( condition ), change( change ) {}
 	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
-		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
+		init( new StatementNode2( decl ) ), condition( condition ), change( change ) {}
 
 	StatementNode *init;
@@ -412,5 +413,4 @@
 };
 
-Statement *build_expr( ExpressionNode *ctl );
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
@@ -423,4 +423,7 @@
 Statement *build_return( ExpressionNode *ctl );
 Statement *build_throw( ExpressionNode *ctl );
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
+Statement *build_finally( StatementNode *stmt );
 
 //##############################################################################
@@ -429,5 +432,4 @@
   public:
 	CompoundStmtNode();
-	CompoundStmtNode( const std::string * );
 	CompoundStmtNode( StatementNode * );
 	~CompoundStmtNode();
@@ -477,5 +479,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< NodeType *>( cur->get_link() );
+		cur = dynamic_cast< NodeType *>( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
