// this script was compiled with wurst 1.8.1.0-jenkins-Wurst-1367
globals
integer array CounterImpl_nextFree
integer CounterImpl_firstFree=0
integer CounterImpl_maxIndex=0
integer array CounterImpl_typeId
integer array CounterImpl_Counter_count
integer wurst_stack_depth=0
string array wurst_stack
endglobals
native testFail takes string msg returns nothing
native testSuccess takes nothing returns nothing
function initGlobals takes nothing returns nothing
endfunction

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 new_CounterImpl takes string w__wurst_stackPos returns integer
	local integer this
	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_CounterImpl in simple.wurst, line 20"
	set wurst_stack_depth = wurst_stack_depth + 1
	if CounterImpl_firstFree == 0 then
		if CounterImpl_maxIndex < 32768 then
			set CounterImpl_maxIndex = CounterImpl_maxIndex + 1
			set this = CounterImpl_maxIndex
			set CounterImpl_typeId[this] = 1
		else
			call error("Out of memory: Could not create CounterImpl.", "when calling error in simple.wurst, line 20")
			set this = 0
		endif
	else
		set CounterImpl_firstFree = CounterImpl_firstFree - 1
		set this = CounterImpl_nextFree[CounterImpl_firstFree]
		set CounterImpl_typeId[this] = 1
	endif
	set wurst_stack_depth = wurst_stack_depth - 1
	set CounterImpl_Counter_count[this] = 0
	set wurst_stack_depth = wurst_stack_depth - 1
	return this
endfunction

function init_test takes string w__wurst_stackPos returns nothing
	local integer c
	set wurst_stack[wurst_stack_depth] = w__wurst_stackPos
	set wurst_stack_depth = wurst_stack_depth + 1
	set c = new_CounterImpl("when calling new_CounterImpl in simple.wurst, line 27")
	set wurst_stack[wurst_stack_depth] = "when calling incCounter in simple.wurst, line 28"
	set wurst_stack_depth = wurst_stack_depth + 1
	if CounterImpl_typeId[c] == 0 then
		if c == 0 then
			call error("Nullpointer exception when calling CounterImpl.incCounter", "when calling error in simple.wurst, line 10")
		else
			call error("Called CounterImpl.incCounter on invalid object.", "when calling error in simple.wurst, line 10")
		endif
	endif
	set CounterImpl_Counter_count[c] = CounterImpl_Counter_count[c] + 1
	set wurst_stack_depth = wurst_stack_depth - 1
	set wurst_stack[wurst_stack_depth] = "when calling incCounter in simple.wurst, line 29"
	set wurst_stack_depth = wurst_stack_depth + 1
	if CounterImpl_typeId[c] == 0 then
		if c == 0 then
			call error("Nullpointer exception when calling CounterImpl.incCounter", "when calling error in simple.wurst, line 10")
		else
			call error("Called CounterImpl.incCounter on invalid object.", "when calling error in simple.wurst, line 10")
		endif
	endif
	set CounterImpl_Counter_count[c] = CounterImpl_Counter_count[c] + 1
	set wurst_stack_depth = wurst_stack_depth - 1
	set wurst_stack[wurst_stack_depth] = "when calling getCounter in simple.wurst, line 31"
	set wurst_stack_depth = wurst_stack_depth + 1
	if CounterImpl_typeId[c] == 0 then
		if c == 0 then
			call error("Nullpointer exception when calling CounterImpl.getCounter", "when calling error in simple.wurst, line 14")
		else
			call error("Called CounterImpl.getCounter on invalid object.", "when calling error in simple.wurst, line 14")
		endif
	endif
	set c = CounterImpl_Counter_count[c]
	set wurst_stack_depth = wurst_stack_depth - 1
	if c == 2 then
		call testSuccess()
	else
		call testFail("defect in equality if")
	endif
	set wurst_stack_depth = wurst_stack_depth - 1
endfunction

function main takes nothing returns nothing
	call initGlobals()
	call init_test("when calling init_test in simple.wurst, line 1")
endfunction

function config takes nothing returns nothing
endfunction