string test_s202
array<integer> T_nextFree750
integer T_firstFree184
integer T_maxIndex122
array<integer> T_typeId366
integer wurst_stack_depth223
array<string> wurst_stack170


string test_s202 = ""
integer T_firstFree184 = 0
integer T_maxIndex122 = 0
integer wurst_stack_depth223 = 0


function initGlobals104() { 
}


function main141() { 
    initGlobals104();
    wurst_stack_170[wurst_stack_depth_223] = "when calling init_test in ondestroy_dynamicdispatchFrotty1, line 1";
    wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
    test_s_202 = "";
    dispatch_T_destroyT387(new_A208("when calling new_A in ondestroy_dynamicdispatchFrotty1, line 10"), "when calling dispatch_T_destroyT in ondestroy_dynamicdispatchFrotty1, line 11");
    if (test_s_202 == "") {
        testSuccess358();
    } else {
    };
    wurst_stack_depth_223 = (wurst_stack_depth_223 - 1);
}


function config191() { 
}


IS_NATIVE function testSuccess358() { 
}


function new_A208(string __wurst_stackPos165) returns integer { 
    local integer this375
    wurst_stack_170[wurst_stack_depth_223] = __wurst_stackPos_165;
    wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
    wurst_stack_170[wurst_stack_depth_223] = "when calling alloc_A in ondestroy_dynamicdispatchFrotty1, line 4";
    wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
    if (T_firstFree_184 == 0) {
        if (T_maxIndex_122 < 32768) {
            T_maxIndex_122 = (T_maxIndex_122 + 1);
            this_375 = T_maxIndex_122;
            T_typeId_366[this_375] = 2;
        } else {
            error167("Out of memory: Could not create A.", "when calling error in ondestroy_dynamicdispatchFrotty1, line 4");
            this_375 = 0;
        };
    } else {
        T_firstFree_184 = (T_firstFree_184 - 1);
        this_375 = T_nextFree_750[T_firstFree_184];
        T_typeId_366[this_375] = 2;
    };
    wurst_stack_depth_223 = ((wurst_stack_depth_223 - 1) - 1);
    return this_375;
}


function error167(string msg173, string __wurst_stackPos519) { 
    local integer stacktraceIndex578
    local integer stacktraceLimit854
    wurst_stack_170[wurst_stack_depth_223] = __wurst_stackPos_519;
    wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
    __wurst_stackPos_519 = "";
    stacktraceIndex_578 = wurst_stack_depth_223;
    stacktraceLimit_854 = 0;
    loop {
        stacktraceIndex_578 = (stacktraceIndex_578 - 1);
        stacktraceLimit_854 = (stacktraceLimit_854 + 1);
        exitwhen ((stacktraceLimit_854 > 20) or (stacktraceIndex_578 < 0));
        __wurst_stackPos_519 = (__wurst_stackPos_519 + ("
   " + wurst_stack_170[stacktraceIndex_578]));
    };
    $debugPrint160((msg_173 + ("
" + __wurst_stackPos_519)));
    wurst_stack_depth_223 = (wurst_stack_depth_223 - 1);
}


function dispatch_T_destroyT387(integer this834, string __wurst_stackPos117) { 
    wurst_stack_170[wurst_stack_depth_223] = __wurst_stackPos_117;
    wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
    if (T_typeId_366[this_834] == 0) {
        if (this_834 == 0) {
            error167("Nullpointer exception when calling T.T", "when calling error in ondestroy_dynamicdispatchFrotty1, line 8");
        } else {
            error167("Called T.T on invalid object.", "when calling error in ondestroy_dynamicdispatchFrotty1, line 8");
        };
    } else {
    };
    if (T_typeId_366[this_834] <= 2) {
        wurst_stack_170[wurst_stack_depth_223] = "when calling destroyT in ondestroy_dynamicdispatchFrotty1, line 8";
        wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
        wurst_stack_170[wurst_stack_depth_223] = "when calling dealloc_T in ondestroy_dynamicdispatchFrotty1, line 8";
        wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
        if (T_typeId_366[this_834] == 0) {
            error167("Double free: object of type T", "when calling error in ondestroy_dynamicdispatchFrotty1, line 8");
        } else {
            T_nextFree_750[T_firstFree_184] = this_834;
            T_firstFree_184 = (T_firstFree_184 + 1);
            T_typeId_366[this_834] = 0;
        };
        wurst_stack_depth_223 = ((wurst_stack_depth_223 - 1) - 1);
    } else {
        wurst_stack_170[wurst_stack_depth_223] = "when calling destroyB in ondestroy_dynamicdispatchFrotty1, line 8";
        wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
        test_s_202 = (test_s_202 + "B");
        wurst_stack_170[wurst_stack_depth_223] = "when calling dealloc_B in ondestroy_dynamicdispatchFrotty1, line 6";
        wurst_stack_depth_223 = (wurst_stack_depth_223 + 1);
        if (T_typeId_366[this_834] == 0) {
            error167("Double free: object of type B", "when calling error in ondestroy_dynamicdispatchFrotty1, line 5");
        } else {
            T_nextFree_750[T_firstFree_184] = this_834;
            T_firstFree_184 = (T_firstFree_184 + 1);
            T_typeId_366[this_834] = 0;
        };
        wurst_stack_depth_223 = ((wurst_stack_depth_223 - 1) - 1);
    };
    wurst_stack_depth_223 = (wurst_stack_depth_223 - 1);
}