// this script was compiled with wurst 1.8.1.0-jenkins-Wurst-1366 globals integer array Base_nextFree integer Base_firstFree=0 integer Base_maxIndex=0 integer array Base_typeId integer array Base_next 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_Base_test_Base_clear takes integer this, string w__wurst_stackPos returns nothing set wurst_stack[wurst_stack_depth] = w__wurst_stackPos set wurst_stack_depth = wurst_stack_depth + 1 if Base_typeId[this] == 0 then if this == 0 then call error("Nullpointer exception when calling Base.clear", "when calling error in testRecursiveMemberDispatch, line 5") else call error("Called Base.clear on invalid object.", "when calling error in testRecursiveMemberDispatch, line 5") endif endif set wurst_stack[wurst_stack_depth] = "when calling clear in testRecursiveMemberDispatch, line 5" set wurst_stack_depth = wurst_stack_depth + 1 if Base_typeId[this] <= 2 then if Base_typeId[this] <= 1 then if Base_next[this] != 0 then call dispatch_Base_test_Base_clear(Base_next[this], "when calling clear in testRecursiveMemberDispatch, line 7") endif set wurst_stack_depth = wurst_stack_depth - 1 else set wurst_stack[wurst_stack_depth] = "when calling clear in testRecursiveMemberDispatch, line 11" set wurst_stack_depth = wurst_stack_depth + 1 if Base_next[this] != 0 then call dispatch_Base_test_Base_clear(Base_next[this], "when calling clear in testRecursiveMemberDispatch, line 7") endif set wurst_stack_depth = wurst_stack_depth - 1 - 1 endif else set wurst_stack[wurst_stack_depth] = "when calling clear in testRecursiveMemberDispatch, line 14" set wurst_stack_depth = wurst_stack_depth + 1 if Base_next[this] != 0 then call dispatch_Base_test_Base_clear(Base_next[this], "when calling clear in testRecursiveMemberDispatch, line 7") endif set wurst_stack_depth = wurst_stack_depth - 1 call testSuccess() set wurst_stack_depth = wurst_stack_depth - 1 endif set wurst_stack_depth = wurst_stack_depth - 1 endfunction function dispatch_SubClassA_test_SubClassA_clear takes integer this, string w__wurst_stackPos returns nothing set wurst_stack[wurst_stack_depth] = w__wurst_stackPos set wurst_stack_depth = wurst_stack_depth + 1 if Base_typeId[this] == 0 then if this == 0 then call error("Nullpointer exception when calling SubClassA.clear", "when calling error in testRecursiveMemberDispatch, line 10") else call error("Called SubClassA.clear on invalid object.", "when calling error in testRecursiveMemberDispatch, line 10") endif endif set wurst_stack[wurst_stack_depth] = "when calling clear in testRecursiveMemberDispatch, line 10" set wurst_stack_depth = wurst_stack_depth + 1 set wurst_stack[wurst_stack_depth] = "when calling clear in testRecursiveMemberDispatch, line 11" set wurst_stack_depth = wurst_stack_depth + 1 if Base_next[this] != 0 then call dispatch_Base_test_Base_clear(Base_next[this], "when calling clear in testRecursiveMemberDispatch, line 7") endif set wurst_stack_depth = wurst_stack_depth - 1 - 1 - 1 endfunction function initGlobals takes nothing returns nothing endfunction function new_SubClassA 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_SubClassA in testRecursiveMemberDispatch, line 9" set wurst_stack_depth = wurst_stack_depth + 1 if Base_firstFree == 0 then if Base_maxIndex < 32768 then set Base_maxIndex = Base_maxIndex + 1 set this = Base_maxIndex set Base_typeId[this] = 2 else call error("Out of memory: Could not create SubClassA.", "when calling error in testRecursiveMemberDispatch, line 9") set this = 0 endif else set Base_firstFree = Base_firstFree - 1 set this = Base_nextFree[Base_firstFree] set Base_typeId[this] = 2 endif set wurst_stack_depth = wurst_stack_depth - 1 - 1 return this endfunction function new_SubClassB 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_SubClassB in testRecursiveMemberDispatch, line 12" set wurst_stack_depth = wurst_stack_depth + 1 if Base_firstFree == 0 then if Base_maxIndex < 32768 then set Base_maxIndex = Base_maxIndex + 1 set this = Base_maxIndex set Base_typeId[this] = 3 else call error("Out of memory: Could not create SubClassB.", "when calling error in testRecursiveMemberDispatch, line 12") set this = 0 endif else set Base_firstFree = Base_firstFree - 1 set this = Base_nextFree[Base_firstFree] set Base_typeId[this] = 3 endif set wurst_stack_depth = wurst_stack_depth - 1 - 1 return this endfunction function main takes nothing returns nothing local integer suba local integer subb call initGlobals() set wurst_stack[wurst_stack_depth] = "when calling init_test in testRecursiveMemberDispatch, line 1" set wurst_stack_depth = wurst_stack_depth + 1 set suba = new_SubClassA("when calling new_SubClassA in testRecursiveMemberDispatch, line 17") set subb = new_SubClassB("when calling new_SubClassB in testRecursiveMemberDispatch, line 18") set Base_next[suba] = subb call dispatch_SubClassA_test_SubClassA_clear(suba, "when calling clear in testRecursiveMemberDispatch, line 20") set wurst_stack_depth = wurst_stack_depth - 1 endfunction function config takes nothing returns nothing endfunction