// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/TranslationUnitContext.java
// public class TranslationUnitContext 
// {
// 	SourceConverter     converter;
// 	StackManager        stackMngr;
// 	ExpressionEvaluator exprEvaluator;
// 	StmtEvaluator       stmtEvaluator;
// 	BitfieldManager     bitfieldMngr;
// 	EnumManager         enumMngr;
// 	FunctionManager     funcMngr;
// 	SpecialGenerator    specialGenerator;
// 	InitializationManager initMngr;
// 	TypeManager           typeMngr;
// 	GlobalCtx             global;
// 	StmtModels            stmtModels;
// 	public DeclarationModels     declModels;
// 	public int                   tabLevel;
// 	
// 	String currentFileName;
// 	IType currentReturnType;
// }
// 
// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/models/DeclarationModels.java
// public class MSimpleDecl extends CppDeclaration
// {
// 	public boolean isStatic;
// 	public String type;
// 	public MExpression initExpr;
// 	public boolean isPublic;
// 		
// 	@Override
// 	public String toString() 
// 	{
// 		// public [static] type name [= expr];
// 		if (this.isPublic)
// 		{
// 			return String.format("%spublic %s %s %s%s%s;",
// 				tabOut(),
// 				this.isStatic ? " static" : "",
// 				this.type, this.name,
// 				this.initExpr != null ? " = " : "",
// 				this.initExpr != null ? this.initExpr : "");
// 		}
// 		else
// 		{
// 			// type name [= expr]
// 			return String.format("%s %s%s%s",
// 					this.type, this.name,
// 					this.initExpr != null ? " = " : "",
// 					this.initExpr != null ? this.initExpr : "");
// 		}
// 	}
// }
// 
// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/models/ExpressionModels.java
// public abstract static class MExpression
// {}


import java.util.ArrayList;
import java.util.List;
import com.github.danfickle.cpptojavasourceconverter.TranslationUnitContext;
import com.github.danfickle.cpptojavasourceconverter.models.DeclarationModels.MSimpleDecl;
import com.github.danfickle.cpptojavasourceconverter.models.ExpressionModels.MExpression;
	
	public class MDeclarationStmt extends MStmt
	{
		public MSimpleDecl simple;
		
		@Override
		public String toString() 
		{
			return String.format("%s%s\n", tabOut(), this.simple);
		}
	}

	public class MDoStmt extends MStmt
	{
		public MExpression expr;
		public MStmt body;
		
		@Override
		public String toString() 
		{
			return String.format(
					"%sdo\n" +
			        "%s%s\n" +
					"%swhile (%s);\n",
					tabOut(), tabOut(this.body), this.body, tabOut(), this.expr);
		}
	}
	
	public class MExprStmt extends MStmt
	{
// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/TranslationUnitContext.java
// public class TranslationUnitContext 
// {
// 	SourceConverter     converter;
// 	StackManager        stackMngr;
// 	ExpressionEvaluator exprEvaluator;
// 	StmtEvaluator       stmtEvaluator;
// 	BitfieldManager     bitfieldMngr;
// 	EnumManager         enumMngr;
// 	FunctionManager     funcMngr;
// 	SpecialGenerator    specialGenerator;
// 	InitializationManager initMngr;
// 	TypeManager           typeMngr;
// 	GlobalCtx             global;
// 	StmtModels            stmtModels;
// 	public DeclarationModels     declModels;
// 	public int                   tabLevel;
// 	
// 	String currentFileName;
// 	IType currentReturnType;
// }
// 
// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/models/DeclarationModels.java
// public class MSimpleDecl extends CppDeclaration
// {
// 	public boolean isStatic;
// 	public String type;
// 	public MExpression initExpr;
// 	public boolean isPublic;
// 		
// 	@Override
// 	public String toString() 
// 	{
// 		// public [static] type name [= expr];
// 		if (this.isPublic)
// 		{
// 			return String.format("%spublic %s %s %s%s%s;",
// 				tabOut(),
// 				this.isStatic ? " static" : "",
// 				this.type, this.name,
// 				this.initExpr != null ? " = " : "",
// 				this.initExpr != null ? this.initExpr : "");
// 		}
// 		else
// 		{
// 			// type name [= expr]
// 			return String.format("%s %s%s%s",
// 					this.type, this.name,
// 					this.initExpr != null ? " = " : "",
// 					this.initExpr != null ? this.initExpr : "");
// 		}
// 	}
// }
// 
// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/models/ExpressionModels.java
// public abstract static class MExpression
// {}


// Path: src/main/java/com/github/danfickle/cpptojavasourceconverter/models/StmtModels.java
import java.util.ArrayList;
import java.util.List;
import com.github.danfickle.cpptojavasourceconverter.TranslationUnitContext;
import com.github.danfickle.cpptojavasourceconverter.models.DeclarationModels.MSimpleDecl;
import com.github.danfickle.cpptojavasourceconverter.models.ExpressionModels.MExpression;

	
	public class MDeclarationStmt extends MStmt
	{
		public MSimpleDecl simple;
		
		@Override
		public String toString() 
		{
			return String.format("%s%s\n", tabOut(), this.simple);
		}
	}

	public class MDoStmt extends MStmt
	{
		public MExpression expr;
		public MStmt body;
		
		@Override
		public String toString() 
		{
			return String.format(
					"%sdo\n" +
			        "%s%s\n" +
					"%swhile (%s);\n",
					tabOut(), tabOut(this.body), this.body, tabOut(), this.expr);
		}
	}
	
	public class MExprStmt extends MStmt
	{
		public MExpression expr;