Index: src/ControlStruct/LabelFixer.cc
===================================================================
--- src/ControlStruct/LabelFixer.cc	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
+++ src/ControlStruct/LabelFixer.cc	(revision 5518719a47526994033bde07b833a0aada3e4cb4)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar 11 22:26:02 2019
-// Update Count     : 159
+// Last Modified By : Andrew Beach
+// Last Modified On : Tue Jan 21 10:32:00 2020
+// Update Count     : 160
 //
 
@@ -21,5 +21,5 @@
 #include "ControlStruct/LabelGenerator.h"  // for LabelGenerator
 #include "LabelFixer.h"
-#include "MLEMutator.h"                    // for MLEMutator
+#include "MLEMutator.h"                    // for MultiLevelExitMutator
 #include "SynTree/Declaration.h"           // for FunctionDecl
 #include "SynTree/Expression.h"            // for NameExpr, Expression, Unty...
@@ -44,6 +44,6 @@
 
 	void LabelFixer::postvisit( FunctionDecl * functionDecl ) {
-		PassVisitor<MLEMutator> mlemut( resolveJumps(), generator );
-		functionDecl->acceptMutator( mlemut );
+		PassVisitor<MultiLevelExitMutator> mlem( resolveJumps(), generator );
+		functionDecl->acceptMutator( mlem );
 	}
 
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
+++ src/ControlStruct/MLEMutator.cc	(revision 5518719a47526994033bde07b833a0aada3e4cb4)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jan 16 15:33:00 2020
-// Update Count     : 221
+// Last Modified On : Tue Jan 21 10:33:00 2020
+// Update Count     : 222
 //
 
@@ -33,16 +33,30 @@
 
 namespace ControlStruct {
-	MLEMutator::~MLEMutator() {
+	MultiLevelExitMutator::~MultiLevelExitMutator() {
 		delete targetTable;
 		targetTable = 0;
 	}
 	namespace {
-		bool isLoop( const MLEMutator::Entry & e ) { return dynamic_cast< WhileStmt * >( e.get_controlStructure() ) || dynamic_cast< ForStmt * >( e.get_controlStructure() ); }
-		bool isSwitch( const MLEMutator::Entry & e ) { return dynamic_cast< SwitchStmt *>( e.get_controlStructure() ); }
-
-		bool isBreakTarget( const MLEMutator::Entry & e ) { return isLoop( e ) || isSwitch( e ) || dynamic_cast< CompoundStmt *>( e.get_controlStructure() ); }
-		bool isContinueTarget( const MLEMutator::Entry & e ) { return isLoop( e ); }
-		bool isFallthroughTarget( const MLEMutator::Entry & e ) { return dynamic_cast< CaseStmt *>( e.get_controlStructure() );; }
-		bool isFallthroughDefaultTarget( const MLEMutator::Entry & e ) { return isSwitch( e ); }
+		bool isLoop( const MultiLevelExitMutator::Entry & e ) {
+			return dynamic_cast< WhileStmt * >( e.get_controlStructure() )
+				|| dynamic_cast< ForStmt * >( e.get_controlStructure() );
+		}
+		bool isSwitch( const MultiLevelExitMutator::Entry & e ) {
+			return dynamic_cast< SwitchStmt *>( e.get_controlStructure() );
+		}
+
+		bool isBreakTarget( const MultiLevelExitMutator::Entry & e ) {
+			return isLoop( e ) || isSwitch( e )
+				|| dynamic_cast< CompoundStmt *>( e.get_controlStructure() );
+		}
+		bool isContinueTarget( const MultiLevelExitMutator::Entry & e ) {
+			return isLoop( e );
+		}
+		bool isFallthroughTarget( const MultiLevelExitMutator::Entry & e ) {
+			return dynamic_cast< CaseStmt *>( e.get_controlStructure() );
+		}
+		bool isFallthroughDefaultTarget( const MultiLevelExitMutator::Entry & e ) {
+			return isSwitch( e );
+		}
 	} // namespace
 
@@ -50,5 +64,5 @@
 	// through the breakLabel field tha they need a place to jump to on a break statement, add the break label to the
 	// body of statements
-	void MLEMutator::fixBlock( std::list< Statement * > &kids, bool caseClause ) {
+	void MultiLevelExitMutator::fixBlock( std::list< Statement * > &kids, bool caseClause ) {
 		SemanticErrorException errors;
 
@@ -81,5 +95,5 @@
 	}
 
-	void MLEMutator::premutate( CompoundStmt *cmpndStmt ) {
+	void MultiLevelExitMutator::premutate( CompoundStmt *cmpndStmt ) {
 		visit_children = false;
 		bool labeledBlock = !(cmpndStmt->labels.empty());
@@ -118,9 +132,11 @@
 			}
 		}
-		assertf( false, "Could not find label '%s' on statement %s", originalTarget.get_name().c_str(), toString( stmt ).c_str() );
-	}
-
-
-	Statement *MLEMutator::postmutate( BranchStmt *branchStmt ) throw ( SemanticErrorException ) {
+		assertf( false, "Could not find label '%s' on statement %s",
+			originalTarget.get_name().c_str(), toString( stmt ).c_str() );
+	}
+
+
+	Statement *MultiLevelExitMutator::postmutate( BranchStmt *branchStmt )
+			throw ( SemanticErrorException ) {
 		std::string originalTarget = branchStmt->originalTarget;
 
@@ -230,5 +246,5 @@
 	}
 
-	Statement *MLEMutator::mutateLoop( Statement *bodyLoop, Entry &e ) {
+	Statement *MultiLevelExitMutator::mutateLoop( Statement *bodyLoop, Entry &e ) {
 		// only generate these when needed
 		if( !e.isContUsed() && !e.isBreakUsed() ) return bodyLoop;
@@ -253,5 +269,5 @@
 
 	template< typename LoopClass >
-	void MLEMutator::prehandleLoopStmt( LoopClass * loopStmt ) {
+	void MultiLevelExitMutator::prehandleLoopStmt( LoopClass * loopStmt ) {
 		// remember this as the most recent enclosing loop, then mutate the body of the loop -- this will determine
 		// whether brkLabel and contLabel are used with branch statements and will recursively do the same to nested
@@ -264,5 +280,5 @@
 
 	template< typename LoopClass >
-	Statement * MLEMutator::posthandleLoopStmt( LoopClass * loopStmt ) {
+	Statement * MultiLevelExitMutator::posthandleLoopStmt( LoopClass * loopStmt ) {
 		assert( ! enclosingControlStructures.empty() );
 		Entry &e = enclosingControlStructures.back();
@@ -275,21 +291,21 @@
 	}
 
-	void MLEMutator::premutate( WhileStmt * whileStmt ) {
+	void MultiLevelExitMutator::premutate( WhileStmt * whileStmt ) {
 		return prehandleLoopStmt( whileStmt );
 	}
 
-	void MLEMutator::premutate( ForStmt * forStmt ) {
+	void MultiLevelExitMutator::premutate( ForStmt * forStmt ) {
 		return prehandleLoopStmt( forStmt );
 	}
 
-	Statement * MLEMutator::postmutate( WhileStmt * whileStmt ) {
+	Statement * MultiLevelExitMutator::postmutate( WhileStmt * whileStmt ) {
 		return posthandleLoopStmt( whileStmt );
 	}
 
-	Statement * MLEMutator::postmutate( ForStmt * forStmt ) {
+	Statement * MultiLevelExitMutator::postmutate( ForStmt * forStmt ) {
 		return posthandleLoopStmt( forStmt );
 	}
 
-	void MLEMutator::premutate( IfStmt * ifStmt ) {
+	void MultiLevelExitMutator::premutate( IfStmt * ifStmt ) {
 		// generate a label for breaking out of a labeled if
 		bool labeledBlock = !(ifStmt->get_labels().empty());
@@ -301,5 +317,5 @@
 	}
 
-	Statement * MLEMutator::postmutate( IfStmt * ifStmt ) {
+	Statement * MultiLevelExitMutator::postmutate( IfStmt * ifStmt ) {
 		bool labeledBlock = !(ifStmt->get_labels().empty());
 		if ( labeledBlock ) {
@@ -311,5 +327,5 @@
 	}
 
-	void MLEMutator::premutate( TryStmt * tryStmt ) {
+	void MultiLevelExitMutator::premutate( TryStmt * tryStmt ) {
 		// generate a label for breaking out of a labeled if
 		bool labeledBlock = !(tryStmt->get_labels().empty());
@@ -321,5 +337,5 @@
 	}
 
-	Statement * MLEMutator::postmutate( TryStmt * tryStmt ) {
+	Statement * MultiLevelExitMutator::postmutate( TryStmt * tryStmt ) {
 		bool labeledBlock = !(tryStmt->get_labels().empty());
 		if ( labeledBlock ) {
@@ -331,5 +347,5 @@
 	}
 
-	void MLEMutator::premutate( FinallyStmt * ) {
+	void MultiLevelExitMutator::premutate( FinallyStmt * ) {
 		GuardAction([this, old = std::move(enclosingControlStructures)]() {
 			enclosingControlStructures = std::move(old);
@@ -338,5 +354,5 @@
 	}
 
-	void MLEMutator::premutate( CaseStmt *caseStmt ) {
+	void MultiLevelExitMutator::premutate( CaseStmt *caseStmt ) {
 		visit_children = false;
 
@@ -377,5 +393,5 @@
 	}
 
-	void MLEMutator::premutate( SwitchStmt *switchStmt ) {
+	void MultiLevelExitMutator::premutate( SwitchStmt *switchStmt ) {
 		// generate a label for breaking out of a labeled switch
 		Label brkLabel = generator->newLabel("switchBreak", switchStmt);
@@ -403,5 +419,5 @@
 	}
 
-	Statement * MLEMutator::postmutate( SwitchStmt * switchStmt ) {
+	Statement * MultiLevelExitMutator::postmutate( SwitchStmt * switchStmt ) {
 		Entry &e = enclosingControlStructures.back();
 		assert ( e == switchStmt );
Index: src/ControlStruct/MLEMutator.h
===================================================================
--- src/ControlStruct/MLEMutator.h	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
+++ src/ControlStruct/MLEMutator.h	(revision 5518719a47526994033bde07b833a0aada3e4cb4)
@@ -10,9 +10,7 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jan 16 12:46:00 2020
-// Update Count     : 46
+// Last Modified On : Tue Jan 21 10:33:00 2020
+// Update Count     : 47
 //
-
-// Can anyone figure out what MLE stands for?
 
 #pragma once
@@ -32,9 +30,11 @@
 	class LabelGenerator;
 
-	class MLEMutator : public WithVisitorRef<MLEMutator>, public WithShortCircuiting, public WithGuards {
+	class MultiLevelExitMutator : public WithVisitorRef<MultiLevelExitMutator>,
+			public WithShortCircuiting, public WithGuards {
 	  public:
 		class Entry;
-		MLEMutator( std::map<Label, Statement *> *t, LabelGenerator *gen = 0 ) : targetTable( t ), breakLabel(std::string("")), generator( gen ) {}
-		~MLEMutator();
+		MultiLevelExitMutator( std::map<Label, Statement *> *t, LabelGenerator *gen = 0 ) :
+			targetTable( t ), breakLabel(std::string("")), generator( gen ) {}
+		~MultiLevelExitMutator();
 
 		void premutate( CompoundStmt *cmpndStmt );
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
+++ src/SynTree/Statement.cc	(revision 5518719a47526994033bde07b833a0aada3e4cb4)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jan 10 14:20:47 2020
-// Update Count     : 70
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Jan 20 16:03:00 2020
+// Update Count     : 71
 //
 
@@ -101,5 +101,7 @@
 
 
-const char * BranchStmt::brType[] = { "Goto", "Break", "Continue" };
+const char * BranchStmt::brType[] = {
+	"Goto", "Break", "Continue", "Fall Through", "Fall Through Default",
+};
 
 BranchStmt::BranchStmt( Label target, Type type ) throw ( SemanticErrorException ) :
@@ -119,4 +121,5 @@
 
 void BranchStmt::print( std::ostream & os, Indenter indent ) const {
+	assert(type < 5);
 	os << "Branch (" << brType[type] << ")" << endl ;
 	if ( target != "" ) os << indent+1 << "with target: " << target << endl;
