Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
+++ src/Parser/parser.yy	(revision 1ca15c165af833b8bf00d171a2d0bbf0ea937489)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 23:03:05 2016
-// Update Count     : 1846
+// Last Modified On : Thu Aug 11 18:02:57 2016
+// Update Count     : 1861
 //
 
@@ -665,5 +665,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
+			$$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
 		}
 	;
@@ -717,5 +717,5 @@
 expression_statement:
 	comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Exp, $1, 0 ); }
+		{ $$ = new StatementNode2( build_expr( $1 ) ); }
 	;
 
@@ -758,12 +758,13 @@
 
 case_value_list:										// CFA
-	case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
+	//case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
+	case_value									{ $$ = new StatementNode2( build_case( $1 ) ); }
 		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
-	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
 	;
 
 case_label:												// CFA
 	CASE case_value_list ':'					{ $$ = $2; }
-	| DEFAULT ':'								{ $$ = new StatementNode( StatementNode::Default ); }
+	| DEFAULT ':'								{ $$ = new StatementNode2( build_default() ); }
 		// A semantic check is required to ensure only one default clause per switch/choose statement.
 	;
@@ -810,5 +811,5 @@
 fall_through_opt:										// CFA
 	// empty
-		{ $$ = new StatementNode( StatementNode::Break ); }	// insert implicit break
+		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
 	| fall_through
 	;
@@ -839,40 +840,31 @@
 jump_statement:
 	GOTO IDENTIFIER ';'
-		//{ $$ = new StatementNode( StatementNode::Goto, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Goto ) ); }
 	| GOTO '*' comma_expression ';'						// GCC, computed goto
 		// The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
 		// whereas normal operator precedence yields goto (*i)+3;
-		{ $$ = new StatementNode( StatementNode::Goto, $3 ); }
+		{ $$ = new StatementNode2( build_computedgoto( $3 ) ); }
 	| CONTINUE ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Continue ); }
 		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
 	| CONTINUE IDENTIFIER ';'							// CFA, multi-level continue
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Continue, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
 	| BREAK ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Break ); }
 		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
 	| BREAK IDENTIFIER ';'								// CFA, multi-level exit
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Break, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
 	| RETURN comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
-	| THROW assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROW ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
-	| THROWRESUME assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-	| THROWRESUME assignment_expression_opt AT assignment_expression ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROWRESUME ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
+		{ $$ = new StatementNode2( build_return( $2 ) ); }
+	| THROW assignment_expression_opt ';'				// handles rethrow
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt ';'			// handles reresume
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
 	;
 
