// this script was compiled with wurst 1.8.1.0-jenkins-Wurst-1367
globals
integer array C_nextFree
integer C_firstFree=0
integer C_maxIndex=0
integer array C_typeId
integer array SimpleFunc_nextFree
integer SimpleFunc_firstFree=0
integer SimpleFunc_maxIndex=0
integer array SimpleFunc_typeId
integer array C_y
integer array this
integer wurst_stack_depth=0
string array wurst_stack
endglobals
native testSuccess takes nothing returns nothing
function error takes string msg, string w__wurst_stackPos returns nothing
	local integer stacktraceIndex
	local integer stacktraceLimit
	set wurst_stack[wurst_stack_depth] = w__wurst_stackPos
	set wurst_stack_depth = wurst_stack_depth + 1
	set w__wurst_stackPos = ""
	set stacktraceIndex = wurst_stack_depth
	set stacktraceLimit = 0
	loop
		set stacktraceIndex = stacktraceIndex - 1
		set stacktraceLimit = stacktraceLimit + 1
		exitwhen stacktraceLimit > 20 or stacktraceIndex < 0
		set w__wurst_stackPos = w__wurst_stackPos + "\n   " + wurst_stack[stacktraceIndex]
	endloop
	call BJDebugMsg(msg + "\n" + w__wurst_stackPos)
	set wurst_stack_depth = wurst_stack_depth - 1
endfunction

function dispatch_SimpleFunc_test_SimpleFunc_apply takes integer this_1, string w__wurst_stackPos returns integer
	local integer this_2
	set wurst_stack[wurst_stack_depth] = w__wurst_stackPos
	set wurst_stack_depth = wurst_stack_depth + 1
	if SimpleFunc_typeId[this_1] == 0 then
		if this_1 == 0 then
			call error("Nullpointer exception when calling SimpleFunc.apply", "when calling error in captureThis, line 4")
		else
			call error("Called SimpleFunc.apply on invalid object.", "when calling error in captureThis, line 4")
		endif
	endif
	set wurst_stack[wurst_stack_depth] = "when calling apply_bar_C_test in captureThis, line 4"
	set wurst_stack_depth = wurst_stack_depth + 1
	set this_2 = this[this_1]
	set wurst_stack[wurst_stack_depth] = "when calling x in captureThis, line 8"
	set wurst_stack_depth = wurst_stack_depth + 1
	if C_typeId[this_2] == 0 then
		if this_2 == 0 then
			call error("Nullpointer exception when calling C.x", "when calling error in captureThis, line 12")
		else
			call error("Called C.x on invalid object.", "when calling error in captureThis, line 12")
		endif
	endif
	set wurst_stack_depth = wurst_stack_depth - 1
	set this_1 = 3 + C_y[this[this_1]]
	set wurst_stack_depth = wurst_stack_depth - 1 - 1
	return this_1
endfunction

function C_foo takes integer this_1, string w__wurst_stackPos returns nothing
	local integer this_2
	set wurst_stack[wurst_stack_depth] = w__wurst_stackPos
	set wurst_stack_depth = wurst_stack_depth + 1
	set wurst_stack[wurst_stack_depth] = "when calling alloc_SimpleFunc_bar_C_test in captureThis, line 8"
	set wurst_stack_depth = wurst_stack_depth + 1
	if SimpleFunc_firstFree == 0 then
		if SimpleFunc_maxIndex < 32768 then
			set SimpleFunc_maxIndex = SimpleFunc_maxIndex + 1
			set this_2 = SimpleFunc_maxIndex
			set SimpleFunc_typeId[this_2] = 3
		else
			call error("Out of memory: Could not create SimpleFunc_bar_C_test.", "when calling error in captureThis, line 8")
			set this_2 = 0
		endif
	else
		set SimpleFunc_firstFree = SimpleFunc_firstFree - 1
		set this_2 = SimpleFunc_nextFree[SimpleFunc_firstFree]
		set SimpleFunc_typeId[this_2] = 3
	endif
	set wurst_stack_depth = wurst_stack_depth - 1
	set this[this_2] = this_1
	set wurst_stack[wurst_stack_depth] = "when calling bar in captureThis, line 8"
	set wurst_stack_depth = wurst_stack_depth + 1
	if C_typeId[this_1] == 0 then
		if this_1 == 0 then
			call error("Nullpointer exception when calling C.bar", "when calling error in captureThis, line 9")
		else
			call error("Called C.bar on invalid object.", "when calling error in captureThis, line 9")
		endif
	endif
	set wurst_stack[wurst_stack_depth] = "when calling bar in captureThis, line 9"
	set wurst_stack_depth = wurst_stack_depth + 1
	if dispatch_SimpleFunc_test_SimpleFunc_apply(this_2, "when calling apply in captureThis, line 10") == 7 then
		call testSuccess()
	endif
	set wurst_stack_depth = wurst_stack_depth - 1 - 1 - 1
endfunction

function initGlobals takes nothing returns nothing
endfunction

function new_C takes string w__wurst_stackPos returns integer
	local integer this_1
	set wurst_stack[wurst_stack_depth] = w__wurst_stackPos
	set wurst_stack_depth = wurst_stack_depth + 1
	set wurst_stack[wurst_stack_depth] = "when calling alloc_C in captureThis, line 5"
	set wurst_stack_depth = wurst_stack_depth + 1
	if C_firstFree == 0 then
		if C_maxIndex < 32768 then
			set C_maxIndex = C_maxIndex + 1
			set this_1 = C_maxIndex
			set C_typeId[this_1] = 1
		else
			call error("Out of memory: Could not create C.", "when calling error in captureThis, line 5")
			set this_1 = 0
		endif
	else
		set C_firstFree = C_firstFree - 1
		set this_1 = C_nextFree[C_firstFree]
		set C_typeId[this_1] = 1
	endif
	set wurst_stack_depth = wurst_stack_depth - 1 - 1
	return this_1
endfunction

function main takes nothing returns nothing
	local integer c
	call initGlobals()
	set wurst_stack[wurst_stack_depth] = "when calling init_test in captureThis, line 1"
	set wurst_stack_depth = wurst_stack_depth + 1
	call new_C("when calling new_C in captureThis, line 15")
	set c = new_C("when calling new_C in captureThis, line 16")
	set C_y[c] = 4
	set wurst_stack[wurst_stack_depth] = "when calling foo in captureThis, line 18"
	set wurst_stack_depth = wurst_stack_depth + 1
	if C_typeId[c] == 0 then
		if c == 0 then
			call error("Nullpointer exception when calling C.foo", "when calling error in captureThis, line 7")
		else
			call error("Called C.foo on invalid object.", "when calling error in captureThis, line 7")
		endif
	endif
	call C_foo(c, "when calling foo in captureThis, line 7")
	set wurst_stack_depth = wurst_stack_depth - 1 - 1
endfunction

function config takes nothing returns nothing
endfunction