// Generated by Haxe 3.4.7
#include <hxcpp.h>

#ifndef INCLUDED_Reflect
#include <Reflect.h>
#endif
#ifndef INCLUDED_Type
#include <Type.h>
#endif
#ifndef INCLUDED_haxe_rtti_Meta
#include <haxe/rtti/Meta.h>
#endif
#ifndef INCLUDED_massive_munit_TestClassHelper
#include <massive/munit/TestClassHelper.h>
#endif
#ifndef INCLUDED_massive_munit_TestResult
#include <massive/munit/TestResult.h>
#endif

HX_DEFINE_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_48_new,"massive.munit.TestClassHelper","new",0xfa387a5f,"massive.munit.TestClassHelper.new","massive/munit/TestClassHelper.hx",48,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_167_hasNext,"massive.munit.TestClassHelper","hasNext",0x5f61baec,"massive.munit.TestClassHelper.hasNext","massive/munit/TestClassHelper.hx",167,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_177_next,"massive.munit.TestClassHelper","next",0xf7329a14,"massive.munit.TestClassHelper.next","massive/munit/TestClassHelper.hx",177,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_187_current,"massive.munit.TestClassHelper","current",0x12feb1b8,"massive.munit.TestClassHelper.current","massive/munit/TestClassHelper.hx",187,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_191_parse,"massive.munit.TestClassHelper","parse",0x7937f7f2,"massive.munit.TestClassHelper.parse","massive/munit/TestClassHelper.hx",191,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_201_getInheritanceChain,"massive.munit.TestClassHelper","getInheritanceChain",0x89dc7b0c,"massive.munit.TestClassHelper.getInheritanceChain","massive/munit/TestClassHelper.hx",201,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_209_collateFieldMeta,"massive.munit.TestClassHelper","collateFieldMeta",0xda874afa,"massive.munit.TestClassHelper.collateFieldMeta","massive/munit/TestClassHelper.hx",209,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_261_scanForTests,"massive.munit.TestClassHelper","scanForTests",0x1ceba4d6,"massive.munit.TestClassHelper.scanForTests","massive/munit/TestClassHelper.hx",261,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_274_searchForMatchingTags,"massive.munit.TestClassHelper","searchForMatchingTags",0x9f12b016,"massive.munit.TestClassHelper.searchForMatchingTags","massive/munit/TestClassHelper.hx",274,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_306_addTest,"massive.munit.TestClassHelper","addTest",0xd0522092,"massive.munit.TestClassHelper.addTest","massive/munit/TestClassHelper.hx",306,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_317_sortTestsByName,"massive.munit.TestClassHelper","sortTestsByName",0xc2d1fc44,"massive.munit.TestClassHelper.sortTestsByName","massive/munit/TestClassHelper.hx",317,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_325_nullFunc,"massive.munit.TestClassHelper","nullFunc",0x1203bf0c,"massive.munit.TestClassHelper.nullFunc","massive/munit/TestClassHelper.hx",325,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_53_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",53,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_58_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",58,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_63_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",63,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_68_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",68,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_73_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",73,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_78_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",78,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_83_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",83,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_90_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",90,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_95_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",95,0xfbaf8533)
HX_LOCAL_STACK_FRAME(_hx_pos_e903e4a515dbaa2d_100_boot,"massive.munit.TestClassHelper","boot",0xef4b9953,"massive.munit.TestClassHelper.boot","massive/munit/TestClassHelper.hx",100,0xfbaf8533)
static const ::String _hx_array_data_e3fe5eed_30[] = {
	HX_("BeforeClass",19,7f,e8,b1),HX_("AfterClass",9c,e0,20,a2),HX_("Before",9f,c8,c6,ce),HX_("After",fc,d5,cf,b0),HX_("Test",72,f4,d2,37),HX_("AsyncTest",8e,21,5a,1c),HX_("TestDebug",81,70,f4,41),
};
namespace massive{
namespace munit{

void TestClassHelper_obj::__construct(hx::Class type,hx::Null< bool >  __o_isDebug){
bool isDebug = __o_isDebug.Default(false);
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_48_new)
HXLINE( 140)		this->index = (int)0;
HXLINE( 139)		this->tests = ::Array_obj< ::Dynamic>::__new(0);
HXLINE( 150)		this->type = type;
HXLINE( 151)		this->isDebug = isDebug;
HXLINE( 152)		this->className = ::Type_obj::getClassName(type);
HXLINE( 153)		this->beforeClass = ::massive::munit::TestClassHelper_obj::nullFunc_dyn();
HXLINE( 154)		this->afterClass = ::massive::munit::TestClassHelper_obj::nullFunc_dyn();
HXLINE( 155)		this->before = ::massive::munit::TestClassHelper_obj::nullFunc_dyn();
HXLINE( 156)		this->after = ::massive::munit::TestClassHelper_obj::nullFunc_dyn();
HXLINE( 157)		this->parse(type);
            	}

Dynamic TestClassHelper_obj::__CreateEmpty() { return new TestClassHelper_obj; }

void *TestClassHelper_obj::_hx_vtable = 0;

Dynamic TestClassHelper_obj::__Create(hx::DynamicArray inArgs)
{
	hx::ObjectPtr< TestClassHelper_obj > _hx_result = new TestClassHelper_obj();
	_hx_result->__construct(inArgs[0],inArgs[1]);
	return _hx_result;
}

bool TestClassHelper_obj::_hx_isInstanceOf(int inClassId) {
	return inClassId==(int)0x00000001 || inClassId==(int)0x21c33b47;
}

bool TestClassHelper_obj::hasNext(){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_167_hasNext)
HXDLIN( 167)		return (this->index < this->tests->length);
            	}


HX_DEFINE_DYNAMIC_FUNC0(TestClassHelper_obj,hasNext,return )

 ::Dynamic TestClassHelper_obj::next(){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_177_next)
HXDLIN( 177)		if (this->hasNext()) {
HXDLIN( 177)			::Array< ::Dynamic> _hx_tmp = this->tests;
HXDLIN( 177)			return _hx_tmp->__get(this->index++);
            		}
            		else {
HXDLIN( 177)			return null();
            		}
HXDLIN( 177)		return null();
            	}


HX_DEFINE_DYNAMIC_FUNC0(TestClassHelper_obj,next,return )

 ::Dynamic TestClassHelper_obj::current(){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_187_current)
HXDLIN( 187)		if ((this->index <= (int)0)) {
HXDLIN( 187)			return this->tests->__get((int)0);
            		}
            		else {
HXDLIN( 187)			::Array< ::Dynamic> _hx_tmp = this->tests;
HXDLIN( 187)			return _hx_tmp->__get((this->index - (int)1));
            		}
HXDLIN( 187)		return null();
            	}


HX_DEFINE_DYNAMIC_FUNC0(TestClassHelper_obj,current,return )

void TestClassHelper_obj::parse(hx::Class type){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_191_parse)
HXLINE( 192)		this->test = ::Type_obj::createEmptyInstance(type);
HXLINE( 194)		::Array< ::Dynamic> inherintanceChain = this->getInheritanceChain(type);
HXLINE( 195)		 ::Dynamic fieldMeta = this->collateFieldMeta(inherintanceChain);
HXLINE( 196)		this->scanForTests(fieldMeta);
HXLINE( 197)		this->tests->sort(this->sortTestsByName_dyn());
            	}


HX_DEFINE_DYNAMIC_FUNC1(TestClassHelper_obj,parse,(void))

::Array< ::Dynamic> TestClassHelper_obj::getInheritanceChain(hx::Class clazz){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_201_getInheritanceChain)
HXLINE( 202)		::Array< ::Dynamic> inherintanceChain = ::Array_obj< ::Dynamic>::__new(1)->init(0,clazz);
HXLINE( 203)		while(true){
HXLINE( 203)			clazz = ::Type_obj::getSuperClass(clazz);
HXDLIN( 203)			if (!(hx::IsNotNull( clazz ))) {
HXLINE( 203)				goto _hx_goto_5;
            			}
HXLINE( 204)			inherintanceChain->push(clazz);
            		}
            		_hx_goto_5:;
HXLINE( 205)		return inherintanceChain;
            	}


HX_DEFINE_DYNAMIC_FUNC1(TestClassHelper_obj,getInheritanceChain,return )

 ::Dynamic TestClassHelper_obj::collateFieldMeta(::Array< ::Dynamic> inherintanceChain){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_209_collateFieldMeta)
HXLINE( 210)		 ::Dynamic meta =  ::Dynamic(hx::Anon_obj::Create(0));
HXLINE( 211)		int i = inherintanceChain->length;
HXLINE( 212)		while(true){
HXLINE( 212)			i = (i - (int)1);
HXDLIN( 212)			if (!(((i + (int)1) > (int)0))) {
HXLINE( 212)				goto _hx_goto_7;
            			}
HXLINE( 214)			hx::Class clazz = inherintanceChain->__get(i).StaticCast< hx::Class >();
HXLINE( 215)			 ::Dynamic newMeta = ::haxe::rtti::Meta_obj::getFields(clazz);
HXLINE( 216)			::Array< ::String > markedFieldNames = ::Reflect_obj::fields(newMeta);
HXLINE( 218)			{
HXLINE( 218)				int _g = (int)0;
HXDLIN( 218)				while((_g < markedFieldNames->length)){
HXLINE( 218)					::String fieldName = markedFieldNames->__get(_g);
HXDLIN( 218)					_g = (_g + (int)1);
HXLINE( 220)					 ::Dynamic recordedFieldTags = ::Reflect_obj::field(meta,fieldName);
HXLINE( 221)					 ::Dynamic newFieldTags = ::Reflect_obj::field(newMeta,fieldName);
HXLINE( 223)					::Array< ::String > newTagNames = ::Reflect_obj::fields(newFieldTags);
HXLINE( 224)					if (hx::IsNull( recordedFieldTags )) {
HXLINE( 229)						 ::Dynamic tagsCopy =  ::Dynamic(hx::Anon_obj::Create(0));
HXLINE( 230)						{
HXLINE( 230)							int _g1 = (int)0;
HXDLIN( 230)							while((_g1 < newTagNames->length)){
HXLINE( 230)								::String tagName = newTagNames->__get(_g1);
HXDLIN( 230)								_g1 = (_g1 + (int)1);
HXLINE( 231)								::Reflect_obj::setField(tagsCopy,tagName,::Reflect_obj::field(newFieldTags,tagName));
            							}
            						}
HXLINE( 233)						::Reflect_obj::setField(meta,fieldName,tagsCopy);
            					}
            					else {
HXLINE( 237)						bool ignored = false;
HXLINE( 238)						{
HXLINE( 238)							int _g11 = (int)0;
HXDLIN( 238)							while((_g11 < newTagNames->length)){
HXLINE( 238)								::String tagName1 = newTagNames->__get(_g11);
HXDLIN( 238)								_g11 = (_g11 + (int)1);
HXLINE( 240)								if ((tagName1 == HX_("Ignore",32,2d,5d,c7))) {
HXLINE( 241)									ignored = true;
            								}
HXLINE( 246)								bool _hx_tmp;
HXDLIN( 246)								bool _hx_tmp1;
HXDLIN( 246)								if (!(ignored)) {
HXLINE( 246)									if ((tagName1 != HX_("Test",72,f4,d2,37))) {
HXLINE( 246)										_hx_tmp1 = (tagName1 == HX_("AsyncTest",8e,21,5a,1c));
            									}
            									else {
HXLINE( 246)										_hx_tmp1 = true;
            									}
            								}
            								else {
HXLINE( 246)									_hx_tmp1 = false;
            								}
HXDLIN( 246)								if (_hx_tmp1) {
HXLINE( 246)									_hx_tmp = ::Reflect_obj::hasField(recordedFieldTags,HX_("Ignore",32,2d,5d,c7));
            								}
            								else {
HXLINE( 246)									_hx_tmp = false;
            								}
HXDLIN( 246)								if (_hx_tmp) {
HXLINE( 249)									::Reflect_obj::deleteField(recordedFieldTags,HX_("Ignore",32,2d,5d,c7));
            								}
HXLINE( 251)								 ::Dynamic tagValue = ::Reflect_obj::field(newFieldTags,tagName1);
HXLINE( 252)								::Reflect_obj::setField(recordedFieldTags,tagName1,tagValue);
            							}
            						}
            					}
            				}
            			}
            		}
            		_hx_goto_7:;
HXLINE( 257)		return meta;
            	}


HX_DEFINE_DYNAMIC_FUNC1(TestClassHelper_obj,collateFieldMeta,return )

void TestClassHelper_obj::scanForTests( ::Dynamic fieldMeta){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_261_scanForTests)
HXLINE( 262)		::Array< ::String > fieldNames = ::Reflect_obj::fields(fieldMeta);
HXLINE( 263)		{
HXLINE( 263)			int _g = (int)0;
HXDLIN( 263)			while((_g < fieldNames->length)){
HXLINE( 263)				::String fieldName = fieldNames->__get(_g);
HXDLIN( 263)				_g = (_g + (int)1);
HXLINE( 265)				 ::Dynamic f = ::Reflect_obj::field(this->test,fieldName);
HXLINE( 266)				if (!(::Reflect_obj::isFunction(f))) {
HXLINE( 266)					continue;
            				}
HXLINE( 267)				 ::Dynamic funcMeta = ::Reflect_obj::field(fieldMeta,fieldName);
HXLINE( 268)				this->searchForMatchingTags(fieldName,f,funcMeta);
            			}
            		}
            	}


HX_DEFINE_DYNAMIC_FUNC1(TestClassHelper_obj,scanForTests,(void))

void TestClassHelper_obj::searchForMatchingTags(::String fieldName, ::Dynamic func, ::Dynamic funcMeta){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_274_searchForMatchingTags)
HXDLIN( 274)		int _g = (int)0;
HXDLIN( 274)		::Array< ::String > _g1 = ::massive::munit::TestClassHelper_obj::META_TAGS;
HXDLIN( 274)		while((_g < _g1->length)){
HXDLIN( 274)			::String tag = _g1->__get(_g);
HXDLIN( 274)			_g = (_g + (int)1);
HXLINE( 276)			if (!(::Reflect_obj::hasField(funcMeta,tag))) {
HXLINE( 276)				continue;
            			}
HXLINE( 277)			::Array< ::String > args = ( (::Array< ::String >)(::Reflect_obj::field(funcMeta,tag)) );
HXLINE( 278)			::String description;
HXDLIN( 278)			if (hx::IsNotNull( args )) {
HXLINE( 278)				description = args->__get((int)0);
            			}
            			else {
HXLINE( 278)				description = HX_("",00,00,00,00);
            			}
HXLINE( 279)			bool isAsync;
HXDLIN( 279)			if (hx::IsNotNull( args )) {
HXLINE( 279)				isAsync = (description == HX_("Async",1c,6f,6b,b9));
            			}
            			else {
HXLINE( 279)				isAsync = false;
            			}
HXLINE( 280)			bool isIgnored = ::Reflect_obj::hasField(funcMeta,HX_("Ignore",32,2d,5d,c7));
HXLINE( 282)			if (isAsync) {
HXLINE( 284)				description = HX_("",00,00,00,00);
            			}
            			else {
HXLINE( 286)				if (isIgnored) {
HXLINE( 288)					args = ( (::Array< ::String >)(::Reflect_obj::field(funcMeta,HX_("Ignore",32,2d,5d,c7))) );
HXLINE( 289)					if (hx::IsNotNull( args )) {
HXLINE( 289)						description = args->__get((int)0);
            					}
            					else {
HXLINE( 289)						description = HX_("",00,00,00,00);
            					}
            				}
            			}
HXLINE( 292)			::String _hx_switch_0 = tag;
            			if (  (_hx_switch_0==HX_("After",fc,d5,cf,b0)) ){
HXLINE( 297)				this->after = func;
HXDLIN( 297)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("AfterClass",9c,e0,20,a2)) ){
HXLINE( 295)				this->afterClass = func;
HXDLIN( 295)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("AsyncTest",8e,21,5a,1c)) ){
HXLINE( 298)				if (!(this->isDebug)) {
HXLINE( 298)					this->addTest(fieldName,func,this->test,true,isIgnored,description);
            				}
HXDLIN( 298)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("Before",9f,c8,c6,ce)) ){
HXLINE( 296)				this->before = func;
HXDLIN( 296)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("BeforeClass",19,7f,e8,b1)) ){
HXLINE( 294)				this->beforeClass = func;
HXDLIN( 294)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("Test",72,f4,d2,37)) ){
HXLINE( 299)				if (!(this->isDebug)) {
HXLINE( 299)					this->addTest(fieldName,func,this->test,isAsync,isIgnored,description);
            				}
HXDLIN( 299)				goto _hx_goto_15;
            			}
            			if (  (_hx_switch_0==HX_("TestDebug",81,70,f4,41)) ){
HXLINE( 300)				if (this->isDebug) {
HXLINE( 300)					this->addTest(fieldName,func,this->test,isAsync,isIgnored,description);
            				}
HXDLIN( 300)				goto _hx_goto_15;
            			}
            			_hx_goto_15:;
            		}
            	}


HX_DEFINE_DYNAMIC_FUNC3(TestClassHelper_obj,searchForMatchingTags,(void))

void TestClassHelper_obj::addTest(::String field, ::Dynamic testFunction, ::Dynamic testInstance,bool isAsync,bool isIgnored,::String description){
            	HX_GC_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_306_addTest)
HXLINE( 307)		 ::massive::munit::TestResult result =  ::massive::munit::TestResult_obj::__alloc( HX_CTX );
HXLINE( 308)		result->async = isAsync;
HXLINE( 309)		result->ignore = isIgnored;
HXLINE( 310)		result->className = this->className;
HXLINE( 311)		result->description = description;
HXLINE( 312)		result->name = field;
HXLINE( 313)		this->tests->push( ::Dynamic(hx::Anon_obj::Create(3)
            			->setFixed(0,HX_("result",dd,68,84,08),result)
            			->setFixed(1,HX_("test",52,c8,f9,4c),testFunction)
            			->setFixed(2,HX_("scope",94,71,d9,78),testInstance)));
            	}


HX_DEFINE_DYNAMIC_FUNC6(TestClassHelper_obj,addTest,(void))

int TestClassHelper_obj::sortTestsByName( ::Dynamic x, ::Dynamic y){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_317_sortTestsByName)
HXLINE( 318)		::String xName = ( ( ::massive::munit::TestResult)(x->__Field(HX_("result",dd,68,84,08),hx::paccDynamic)) )->name;
HXLINE( 319)		::String yName = ( ( ::massive::munit::TestResult)(y->__Field(HX_("result",dd,68,84,08),hx::paccDynamic)) )->name;
HXLINE( 320)		if ((xName == yName)) {
HXLINE( 320)			return (int)0;
            		}
HXLINE( 321)		if ((xName > yName)) {
HXLINE( 321)			return (int)1;
            		}
HXLINE( 322)		return (int)-1;
            	}


HX_DEFINE_DYNAMIC_FUNC2(TestClassHelper_obj,sortTestsByName,return )

::String TestClassHelper_obj::META_TAG_BEFORE_CLASS;

::String TestClassHelper_obj::META_TAG_AFTER_CLASS;

::String TestClassHelper_obj::META_TAG_BEFORE;

::String TestClassHelper_obj::META_TAG_AFTER;

::String TestClassHelper_obj::META_TAG_TEST;

::String TestClassHelper_obj::META_TAG_ASYNC_TEST;

::String TestClassHelper_obj::META_TAG_IGNORE;

::String TestClassHelper_obj::META_PARAM_ASYNC_TEST;

::String TestClassHelper_obj::META_TAG_TEST_DEBUG;

::Array< ::String > TestClassHelper_obj::META_TAGS;

void TestClassHelper_obj::nullFunc(){
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_325_nullFunc)
            	}


STATIC_HX_DEFINE_DYNAMIC_FUNC0(TestClassHelper_obj,nullFunc,(void))


hx::ObjectPtr< TestClassHelper_obj > TestClassHelper_obj::__new(hx::Class type,hx::Null< bool >  __o_isDebug) {
	hx::ObjectPtr< TestClassHelper_obj > __this = new TestClassHelper_obj();
	__this->__construct(type,__o_isDebug);
	return __this;
}

hx::ObjectPtr< TestClassHelper_obj > TestClassHelper_obj::__alloc(hx::Ctx *_hx_ctx,hx::Class type,hx::Null< bool >  __o_isDebug) {
	TestClassHelper_obj *__this = (TestClassHelper_obj*)(hx::Ctx::alloc(_hx_ctx, sizeof(TestClassHelper_obj), true, "massive.munit.TestClassHelper"));
	*(void **)__this = TestClassHelper_obj::_hx_vtable;
	__this->__construct(type,__o_isDebug);
	return __this;
}

TestClassHelper_obj::TestClassHelper_obj()
{
}

void TestClassHelper_obj::__Mark(HX_MARK_PARAMS)
{
	HX_MARK_BEGIN_CLASS(TestClassHelper);
	HX_MARK_MEMBER_NAME(type,"type");
	HX_MARK_MEMBER_NAME(test,"test");
	HX_MARK_MEMBER_NAME(beforeClass,"beforeClass");
	HX_MARK_MEMBER_NAME(afterClass,"afterClass");
	HX_MARK_MEMBER_NAME(before,"before");
	HX_MARK_MEMBER_NAME(after,"after");
	HX_MARK_MEMBER_NAME(className,"className");
	HX_MARK_MEMBER_NAME(tests,"tests");
	HX_MARK_MEMBER_NAME(index,"index");
	HX_MARK_MEMBER_NAME(isDebug,"isDebug");
	HX_MARK_END_CLASS();
}

void TestClassHelper_obj::__Visit(HX_VISIT_PARAMS)
{
	HX_VISIT_MEMBER_NAME(type,"type");
	HX_VISIT_MEMBER_NAME(test,"test");
	HX_VISIT_MEMBER_NAME(beforeClass,"beforeClass");
	HX_VISIT_MEMBER_NAME(afterClass,"afterClass");
	HX_VISIT_MEMBER_NAME(before,"before");
	HX_VISIT_MEMBER_NAME(after,"after");
	HX_VISIT_MEMBER_NAME(className,"className");
	HX_VISIT_MEMBER_NAME(tests,"tests");
	HX_VISIT_MEMBER_NAME(index,"index");
	HX_VISIT_MEMBER_NAME(isDebug,"isDebug");
}

hx::Val TestClassHelper_obj::__Field(const ::String &inName,hx::PropertyAccess inCallProp)
{
	switch(inName.length) {
	case 4:
		if (HX_FIELD_EQ(inName,"type") ) { return hx::Val( type ); }
		if (HX_FIELD_EQ(inName,"test") ) { return hx::Val( test ); }
		if (HX_FIELD_EQ(inName,"next") ) { return hx::Val( next_dyn() ); }
		break;
	case 5:
		if (HX_FIELD_EQ(inName,"after") ) { return hx::Val( after ); }
		if (HX_FIELD_EQ(inName,"tests") ) { return hx::Val( tests ); }
		if (HX_FIELD_EQ(inName,"index") ) { return hx::Val( index ); }
		if (HX_FIELD_EQ(inName,"parse") ) { return hx::Val( parse_dyn() ); }
		break;
	case 6:
		if (HX_FIELD_EQ(inName,"before") ) { return hx::Val( before ); }
		break;
	case 7:
		if (HX_FIELD_EQ(inName,"isDebug") ) { return hx::Val( isDebug ); }
		if (HX_FIELD_EQ(inName,"hasNext") ) { return hx::Val( hasNext_dyn() ); }
		if (HX_FIELD_EQ(inName,"current") ) { return hx::Val( current_dyn() ); }
		if (HX_FIELD_EQ(inName,"addTest") ) { return hx::Val( addTest_dyn() ); }
		break;
	case 9:
		if (HX_FIELD_EQ(inName,"className") ) { return hx::Val( className ); }
		break;
	case 10:
		if (HX_FIELD_EQ(inName,"afterClass") ) { return hx::Val( afterClass ); }
		break;
	case 11:
		if (HX_FIELD_EQ(inName,"beforeClass") ) { return hx::Val( beforeClass ); }
		break;
	case 12:
		if (HX_FIELD_EQ(inName,"scanForTests") ) { return hx::Val( scanForTests_dyn() ); }
		break;
	case 15:
		if (HX_FIELD_EQ(inName,"sortTestsByName") ) { return hx::Val( sortTestsByName_dyn() ); }
		break;
	case 16:
		if (HX_FIELD_EQ(inName,"collateFieldMeta") ) { return hx::Val( collateFieldMeta_dyn() ); }
		break;
	case 19:
		if (HX_FIELD_EQ(inName,"getInheritanceChain") ) { return hx::Val( getInheritanceChain_dyn() ); }
		break;
	case 21:
		if (HX_FIELD_EQ(inName,"searchForMatchingTags") ) { return hx::Val( searchForMatchingTags_dyn() ); }
	}
	return super::__Field(inName,inCallProp);
}

bool TestClassHelper_obj::__GetStatic(const ::String &inName, Dynamic &outValue, hx::PropertyAccess inCallProp)
{
	switch(inName.length) {
	case 8:
		if (HX_FIELD_EQ(inName,"nullFunc") ) { outValue = nullFunc_dyn(); return true; }
		break;
	case 9:
		if (HX_FIELD_EQ(inName,"META_TAGS") ) { outValue = ( META_TAGS ); return true; }
	}
	return false;
}

hx::Val TestClassHelper_obj::__SetField(const ::String &inName,const hx::Val &inValue,hx::PropertyAccess inCallProp)
{
	switch(inName.length) {
	case 4:
		if (HX_FIELD_EQ(inName,"type") ) { type=inValue.Cast< hx::Class >(); return inValue; }
		if (HX_FIELD_EQ(inName,"test") ) { test=inValue.Cast<  ::Dynamic >(); return inValue; }
		break;
	case 5:
		if (HX_FIELD_EQ(inName,"after") ) { after=inValue.Cast<  ::Dynamic >(); return inValue; }
		if (HX_FIELD_EQ(inName,"tests") ) { tests=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
		if (HX_FIELD_EQ(inName,"index") ) { index=inValue.Cast< int >(); return inValue; }
		break;
	case 6:
		if (HX_FIELD_EQ(inName,"before") ) { before=inValue.Cast<  ::Dynamic >(); return inValue; }
		break;
	case 7:
		if (HX_FIELD_EQ(inName,"isDebug") ) { isDebug=inValue.Cast< bool >(); return inValue; }
		break;
	case 9:
		if (HX_FIELD_EQ(inName,"className") ) { className=inValue.Cast< ::String >(); return inValue; }
		break;
	case 10:
		if (HX_FIELD_EQ(inName,"afterClass") ) { afterClass=inValue.Cast<  ::Dynamic >(); return inValue; }
		break;
	case 11:
		if (HX_FIELD_EQ(inName,"beforeClass") ) { beforeClass=inValue.Cast<  ::Dynamic >(); return inValue; }
	}
	return super::__SetField(inName,inValue,inCallProp);
}

bool TestClassHelper_obj::__SetStatic(const ::String &inName,Dynamic &ioValue,hx::PropertyAccess inCallProp)
{
	switch(inName.length) {
	case 9:
		if (HX_FIELD_EQ(inName,"META_TAGS") ) { META_TAGS=ioValue.Cast< ::Array< ::String > >(); return true; }
	}
	return false;
}

void TestClassHelper_obj::__GetFields(Array< ::String> &outFields)
{
	outFields->push(HX_HCSTRING("type","\xba","\xf2","\x08","\x4d"));
	outFields->push(HX_HCSTRING("test","\x52","\xc8","\xf9","\x4c"));
	outFields->push(HX_HCSTRING("beforeClass","\x39","\xe7","\xb5","\xcd"));
	outFields->push(HX_HCSTRING("afterClass","\x7c","\xdc","\x6f","\xab"));
	outFields->push(HX_HCSTRING("before","\x7f","\x54","\x32","\x9a"));
	outFields->push(HX_HCSTRING("after","\x1c","\x66","\xa2","\x1d"));
	outFields->push(HX_HCSTRING("className","\xa3","\x92","\x3d","\xdc"));
	outFields->push(HX_HCSTRING("tests","\xe1","\x7f","\x95","\x0d"));
	outFields->push(HX_HCSTRING("index","\x12","\x9b","\x14","\xbe"));
	outFields->push(HX_HCSTRING("isDebug","\x09","\xf6","\xa4","\x73"));
	super::__GetFields(outFields);
};

#if HXCPP_SCRIPTABLE
static hx::StorageInfo TestClassHelper_obj_sMemberStorageInfo[] = {
	{hx::fsObject /*::hx::Class*/ ,(int)offsetof(TestClassHelper_obj,type),HX_HCSTRING("type","\xba","\xf2","\x08","\x4d")},
	{hx::fsObject /*Dynamic*/ ,(int)offsetof(TestClassHelper_obj,test),HX_HCSTRING("test","\x52","\xc8","\xf9","\x4c")},
	{hx::fsObject /*Dynamic*/ ,(int)offsetof(TestClassHelper_obj,beforeClass),HX_HCSTRING("beforeClass","\x39","\xe7","\xb5","\xcd")},
	{hx::fsObject /*Dynamic*/ ,(int)offsetof(TestClassHelper_obj,afterClass),HX_HCSTRING("afterClass","\x7c","\xdc","\x6f","\xab")},
	{hx::fsObject /*Dynamic*/ ,(int)offsetof(TestClassHelper_obj,before),HX_HCSTRING("before","\x7f","\x54","\x32","\x9a")},
	{hx::fsObject /*Dynamic*/ ,(int)offsetof(TestClassHelper_obj,after),HX_HCSTRING("after","\x1c","\x66","\xa2","\x1d")},
	{hx::fsString,(int)offsetof(TestClassHelper_obj,className),HX_HCSTRING("className","\xa3","\x92","\x3d","\xdc")},
	{hx::fsObject /*cpp::ArrayBase*/ ,(int)offsetof(TestClassHelper_obj,tests),HX_HCSTRING("tests","\xe1","\x7f","\x95","\x0d")},
	{hx::fsInt,(int)offsetof(TestClassHelper_obj,index),HX_HCSTRING("index","\x12","\x9b","\x14","\xbe")},
	{hx::fsBool,(int)offsetof(TestClassHelper_obj,isDebug),HX_HCSTRING("isDebug","\x09","\xf6","\xa4","\x73")},
	{ hx::fsUnknown, 0, null()}
};
static hx::StaticInfo TestClassHelper_obj_sStaticStorageInfo[] = {
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_BEFORE_CLASS,HX_HCSTRING("META_TAG_BEFORE_CLASS","\x77","\x0f","\xce","\x2b")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_AFTER_CLASS,HX_HCSTRING("META_TAG_AFTER_CLASS","\xd6","\x3c","\x10","\x6e")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_BEFORE,HX_HCSTRING("META_TAG_BEFORE","\x9e","\x0d","\x99","\xef")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_AFTER,HX_HCSTRING("META_TAG_AFTER","\xbd","\xd9","\xe0","\xde")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_TEST,HX_HCSTRING("META_TAG_TEST","\xb1","\xc7","\x9a","\xb8")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_ASYNC_TEST,HX_HCSTRING("META_TAG_ASYNC_TEST","\x34","\xb8","\xd0","\x6d")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_IGNORE,HX_HCSTRING("META_TAG_IGNORE","\x31","\x72","\x2f","\xe8")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_PARAM_ASYNC_TEST,HX_HCSTRING("META_PARAM_ASYNC_TEST","\x61","\x5f","\x3c","\xad")},
	{hx::fsString,(void *) &TestClassHelper_obj::META_TAG_TEST_DEBUG,HX_HCSTRING("META_TAG_TEST_DEBUG","\xe5","\xf3","\xb5","\x68")},
	{hx::fsObject /*Array< ::String >*/ ,(void *) &TestClassHelper_obj::META_TAGS,HX_HCSTRING("META_TAGS","\xd3","\x5b","\x3b","\x6a")},
	{ hx::fsUnknown, 0, null()}
};
#endif

static ::String TestClassHelper_obj_sMemberFields[] = {
	HX_HCSTRING("type","\xba","\xf2","\x08","\x4d"),
	HX_HCSTRING("test","\x52","\xc8","\xf9","\x4c"),
	HX_HCSTRING("beforeClass","\x39","\xe7","\xb5","\xcd"),
	HX_HCSTRING("afterClass","\x7c","\xdc","\x6f","\xab"),
	HX_HCSTRING("before","\x7f","\x54","\x32","\x9a"),
	HX_HCSTRING("after","\x1c","\x66","\xa2","\x1d"),
	HX_HCSTRING("className","\xa3","\x92","\x3d","\xdc"),
	HX_HCSTRING("tests","\xe1","\x7f","\x95","\x0d"),
	HX_HCSTRING("index","\x12","\x9b","\x14","\xbe"),
	HX_HCSTRING("isDebug","\x09","\xf6","\xa4","\x73"),
	HX_HCSTRING("hasNext","\x6d","\xa5","\x46","\x18"),
	HX_HCSTRING("next","\xf3","\x84","\x02","\x49"),
	HX_HCSTRING("current","\x39","\x9c","\xe3","\xcb"),
	HX_HCSTRING("parse","\x33","\x90","\x55","\xbd"),
	HX_HCSTRING("getInheritanceChain","\x0d","\xa3","\x77","\x21"),
	HX_HCSTRING("collateFieldMeta","\x59","\x88","\x3b","\xdc"),
	HX_HCSTRING("scanForTests","\xb5","\x06","\x00","\xc0"),
	HX_HCSTRING("searchForMatchingTags","\x57","\x9a","\xc8","\xb1"),
	HX_HCSTRING("addTest","\x13","\x0b","\x37","\x89"),
	HX_HCSTRING("sortTestsByName","\xc5","\xcf","\x56","\xf5"),
	::String(null()) };

static void TestClassHelper_obj_sMarkStatics(HX_MARK_PARAMS) {
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::__mClass,"__mClass");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_BEFORE_CLASS,"META_TAG_BEFORE_CLASS");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_AFTER_CLASS,"META_TAG_AFTER_CLASS");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_BEFORE,"META_TAG_BEFORE");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_AFTER,"META_TAG_AFTER");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_TEST,"META_TAG_TEST");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_ASYNC_TEST,"META_TAG_ASYNC_TEST");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_IGNORE,"META_TAG_IGNORE");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_PARAM_ASYNC_TEST,"META_PARAM_ASYNC_TEST");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAG_TEST_DEBUG,"META_TAG_TEST_DEBUG");
	HX_MARK_MEMBER_NAME(TestClassHelper_obj::META_TAGS,"META_TAGS");
};

#ifdef HXCPP_VISIT_ALLOCS
static void TestClassHelper_obj_sVisitStatics(HX_VISIT_PARAMS) {
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::__mClass,"__mClass");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_BEFORE_CLASS,"META_TAG_BEFORE_CLASS");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_AFTER_CLASS,"META_TAG_AFTER_CLASS");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_BEFORE,"META_TAG_BEFORE");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_AFTER,"META_TAG_AFTER");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_TEST,"META_TAG_TEST");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_ASYNC_TEST,"META_TAG_ASYNC_TEST");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_IGNORE,"META_TAG_IGNORE");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_PARAM_ASYNC_TEST,"META_PARAM_ASYNC_TEST");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAG_TEST_DEBUG,"META_TAG_TEST_DEBUG");
	HX_VISIT_MEMBER_NAME(TestClassHelper_obj::META_TAGS,"META_TAGS");
};

#endif

hx::Class TestClassHelper_obj::__mClass;

static ::String TestClassHelper_obj_sStaticFields[] = {
	HX_HCSTRING("META_TAG_BEFORE_CLASS","\x77","\x0f","\xce","\x2b"),
	HX_HCSTRING("META_TAG_AFTER_CLASS","\xd6","\x3c","\x10","\x6e"),
	HX_HCSTRING("META_TAG_BEFORE","\x9e","\x0d","\x99","\xef"),
	HX_HCSTRING("META_TAG_AFTER","\xbd","\xd9","\xe0","\xde"),
	HX_HCSTRING("META_TAG_TEST","\xb1","\xc7","\x9a","\xb8"),
	HX_HCSTRING("META_TAG_ASYNC_TEST","\x34","\xb8","\xd0","\x6d"),
	HX_HCSTRING("META_TAG_IGNORE","\x31","\x72","\x2f","\xe8"),
	HX_HCSTRING("META_PARAM_ASYNC_TEST","\x61","\x5f","\x3c","\xad"),
	HX_HCSTRING("META_TAG_TEST_DEBUG","\xe5","\xf3","\xb5","\x68"),
	HX_HCSTRING("META_TAGS","\xd3","\x5b","\x3b","\x6a"),
	HX_HCSTRING("nullFunc","\x6b","\x05","\x6c","\x21"),
	::String(null())
};

void TestClassHelper_obj::__register()
{
	hx::Object *dummy = new TestClassHelper_obj;
	TestClassHelper_obj::_hx_vtable = *(void **)dummy;
	hx::Static(__mClass) = new hx::Class_obj();
	__mClass->mName = HX_HCSTRING("massive.munit.TestClassHelper","\xed","\x5e","\xfe","\xe3");
	__mClass->mSuper = &super::__SGetClass();
	__mClass->mConstructEmpty = &__CreateEmpty;
	__mClass->mConstructArgs = &__Create;
	__mClass->mGetStaticField = &TestClassHelper_obj::__GetStatic;
	__mClass->mSetStaticField = &TestClassHelper_obj::__SetStatic;
	__mClass->mMarkFunc = TestClassHelper_obj_sMarkStatics;
	__mClass->mStatics = hx::Class_obj::dupFunctions(TestClassHelper_obj_sStaticFields);
	__mClass->mMembers = hx::Class_obj::dupFunctions(TestClassHelper_obj_sMemberFields);
	__mClass->mCanCast = hx::TCanCast< TestClassHelper_obj >;
#ifdef HXCPP_VISIT_ALLOCS
	__mClass->mVisitFunc = TestClassHelper_obj_sVisitStatics;
#endif
#ifdef HXCPP_SCRIPTABLE
	__mClass->mMemberStorageInfo = TestClassHelper_obj_sMemberStorageInfo;
#endif
#ifdef HXCPP_SCRIPTABLE
	__mClass->mStaticStorageInfo = TestClassHelper_obj_sStaticStorageInfo;
#endif
	hx::_hx_RegisterClass(__mClass->mName, __mClass);
}

void TestClassHelper_obj::__boot()
{
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_53_boot)
HXDLIN(  53)		META_TAG_BEFORE_CLASS = HX_("BeforeClass",19,7f,e8,b1);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_58_boot)
HXDLIN(  58)		META_TAG_AFTER_CLASS = HX_("AfterClass",9c,e0,20,a2);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_63_boot)
HXDLIN(  63)		META_TAG_BEFORE = HX_("Before",9f,c8,c6,ce);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_68_boot)
HXDLIN(  68)		META_TAG_AFTER = HX_("After",fc,d5,cf,b0);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_73_boot)
HXDLIN(  73)		META_TAG_TEST = HX_("Test",72,f4,d2,37);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_78_boot)
HXDLIN(  78)		META_TAG_ASYNC_TEST = HX_("AsyncTest",8e,21,5a,1c);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_83_boot)
HXDLIN(  83)		META_TAG_IGNORE = HX_("Ignore",32,2d,5d,c7);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_90_boot)
HXDLIN(  90)		META_PARAM_ASYNC_TEST = HX_("Async",1c,6f,6b,b9);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_95_boot)
HXDLIN(  95)		META_TAG_TEST_DEBUG = HX_("TestDebug",81,70,f4,41);
            	}
{
            	HX_STACKFRAME(&_hx_pos_e903e4a515dbaa2d_100_boot)
HXDLIN( 100)		META_TAGS = ::Array_obj< ::String >::fromData( _hx_array_data_e3fe5eed_30,7);
            	}
}

} // end namespace massive
} // end namespace munit
