// 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;
	}
	
	private String tabOut()
	{
		return tabOut(0);
	}
	
	private String tabOut(Object child)
	{
		if (child == null ||
			child instanceof MCompoundStmt)
			return "";

		return tabOut(0);
	}
	
	private String stripNl(String str)
	{
		if (str.endsWith("\n"))
			return str.substring(0, str.length() - 1);
		return str;
	}
	
	public abstract static class MStmt {}
	
	public class MForStmt extends MStmt
	{
		public MStmt initializer;
		public MExpression condition;
		public MExpression updater;
// 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;

	}
	
	private String tabOut()
	{
		return tabOut(0);
	}
	
	private String tabOut(Object child)
	{
		if (child == null ||
			child instanceof MCompoundStmt)
			return "";

		return tabOut(0);
	}
	
	private String stripNl(String str)
	{
		if (str.endsWith("\n"))
			return str.substring(0, str.length() - 1);
		return str;
	}
	
	public abstract static class MStmt {}
	
	public class MForStmt extends MStmt
	{
		public MStmt initializer;
		public MExpression condition;
		public MExpression updater;
		public MSimpleDecl decl;