signed int __fastcall gmThread::Sys_Execute(int a1, int a2)
{
int v2; // r5@1
int v3; // r3@3
int v4; // r2@3
int v5; // r1@3
int v6; // r7@3
int v7; // r4@3
int v8; // r12@3
int v9; // r3@6
int v10; // r0@6
int v11; // r0@8
int v12; // r3@8
int v13; // r3@10
int v15; // r8@15
int v16; // r2@15
int v17; // r3@15
void (__fastcall *v18)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@15
signed int v19; // r4@17
signed int v20; // r0@17
int v21; // r2@17
int v22; // r3@17
int v23; // r3@19
signed int v24; // r2@23
int v25; // r2@24
void (__fastcall *v26)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@24
signed int v27; // r2@28
int v28; // r2@29
signed int v29; // r2@33
int v30; // r8@33
int v31; // r2@34
signed int v32; // r2@38
int v33; // r2@39
int v34; // r3@43
int v35; // r3@43
int v36; // r1@43
int v37; // r3@44
int v38; // r1@44
signed int v39; // r3@46
int v40; // r0@46
int v41; // r2@53
int v42; // r3@53
int v43; // r1@53
int v44; // r1@53
int v45; // r1@53
int v46; // r3@54
int v47; // r1@54
int v48; // r0@54
int v49; // r1@54
int v50; // r1@55
int v51; // r3@58
unsigned int v52; // r2@58
unsigned int v53; // r10@58
int v54; // r0@59
void (__fastcall *v55)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@59
int v56; // r1@61
int v57; // r10@61
int v58; // r1@61
int v59; // r2@61
int v60; // r10@63
int v61; // r8@63
int v62; // r0@63
void (__fastcall *v63)(_DWORD, _DWORD); // r3@63
int v64; // r1@67
int v65; // r3@68
int v66; // r8@68
int v67; // r2@70
int v68; // r3@70
void (__fastcall *v69)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@70
int v70; // r0@72
int v71; // r2@72
int v72; // r3@72
void (__fastcall *v73)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@72
int v74; // r8@74
int v75; // r9@74
int v76; // r3@74
int v77; // r0@74
int v78; // r1@74
int v79; // r0@74
int v80; // r3@74
void (__fastcall *v81)(_DWORD, _DWORD); // r2@74
int v82; // r1@78
int v83; // r2@80
int v84; // r1@82
int v85; // r8@84
int v86; // lr@85
int v87; // r7@86
int v88; // r2@86
int v89; // r1@86
int v90; // r3@86
int v91; // r1@86
int v92; // r0@86
int v93; // r1@86
signed int v94; // r12@86
int v95; // r12@87
signed int v96; // r0@88
int v97; // r3@88
int v98; // r3@94
int v99; // r8@94
int v100; // r0@94
void (__fastcall *v101)(_DWORD, _DWORD); // r3@94
int v102; // r3@96
int v103; // r2@96
int v104; // r1@96
int v105; // lr@96
int v106; // r12@96
int v107; // r1@96
int v108; // r0@96
int v109; // r0@98
bool v110; // zf@99
int v111; // r3@102
int v112; // r1@102
int v113; // r1@102
int v114; // r3@103
int v115; // r8@103
int v116; // r0@103
int v117; // r8@104
signed int v118; // r3@105
int v119; // r1@106
int v120; // r1@110
int v121; // r0@111
int v122; // r1@111
int v123; // r8@112
int v124; // r3@112
int v125; // r0@112
int v126; // r0@114
int v127; // r1@114
int v128; // r2@114
int v129; // r12@114
int v130; // r2@114
int v131; // lr@114
int v132; // r0@114
int v133; // r1@114
int v134 // r0@118
int v135; // r1@119
int v136; // r10@119
int v137; // r1@119
int v138; // r12@119
int v139; // r7@121
int v140; // lr@122
int v141; // r8@122
int v142; // r1@122
int v143; // r1@122
int v144; // r1@122
int v145; // lr@123
int v146; // r1@124
int v147; // r3@124
int v148; // r3@128
int (*v149)(void); // r3@129
int v150; // lr@132
int v151; // r0@133
int v152; // r1@133
int v153; // r3@134
int v154; // r12@134
int v155; // r3@151
int v156; // r1@151
int v157; // r1@155
int v158; // r6@160
int v159; // r0@160
int v160; // r7@162
int v161; // r6@162
int v162; // r0@162
char *v163; // [sp+0h] [bp-80h]@0
int v164; // [sp+Ch] [bp-74h]@58
signed int v165; // [sp+10h] [bp-70h]@1
int v166; // [sp+1Ch] [bp-64h]@1
char v167; // [sp+20h] [bp-60h]@102
int v168; // [sp+24h] [bp-5Ch]@102
int v169; // [sp+2Ch] [bp-54h]@6
int v170; // [sp+30h] [bp-50h]@5
int v171; // [sp+34h] [bp-4Ch]@60
char v172; // [sp+38h] [bp-48h]@60
int v173; // [sp+3Ch] [bp-44h]@61
int v174; // [sp+40h] [bp-40h]@60
int v175; // [sp+44h] [bp-3Ch]@61
char v176; // [sp+48h] [bp-38h]@67
int v177; // [sp+4Ch] [bp-34h]@67
char v178; // [sp+50h] [bp-30h]@78
int v179; // [sp+54h] [bp-2Ch]@78
v2 = a1;
v166 = a2;
v165 = *(_DWORD *)(a1 + 52);
if ( v165 )
return v165;
if ( *(_DWORD *)(a1 + 16) )
{
v148 = *(_DWORD *)(a1 + 28);
if ( *(_BYTE *)(v148 + 552) )
{
v149 = *(int (**)(void))(v148 + 20);
if ( v149 )
{
if ( v149() )
return v165;
}
}
}
v3 = *(_DWORD *)(v2 + 32);
v4 = 8 * (*(_DWORD *)(v2 + 44) + 536870911);
v5 = v3 + v4;
v6 = v3 + v4 + 8;
v7 = v3 + 8 * *(_DWORD *)(v2 + 40);
v8 = *(_DWORD *)(v2 + 68);
if ( !v8 )
v8 = *(_DWORD *)(*(_DWORD *)(v5 + 4) + 28);
v170 = *(_DWORD *)(*(_DWORD *)(v5 + 4) + 28);
while ( 2 )
{
v9 = v8 + 4;
v169 = v8 + 4;
v10 = *(_DWORD *)v8;
switch ( *(_DWORD *)v8 )
{
case 0:
v60 = *(_DWORD *)(v8 + 4);
v169 = v8 + 8;
v61 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v7 + 4) = v60;
*(_DWORD *)v7 = 3;
v62 = *(_DWORD *)(v2 + 28);
v63 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v62 + 512) + 240 * v61 + 4);
if ( !v63 )
goto LABEL_66;
v63(v2, v7 - 8);
if ( *(_DWORD *)(v7 - 8) )
goto LABEL_83;
v62 = *(_DWORD *)(v2 + 28);
LABEL_66:
if ( !v61 )
{
gmLog::LogEntry(v62 + 568, "getdot failed.");
goto LABEL_98;
}
v174 = 3;
v175 = v60;
gmTableObject::Get(&v176, *(_DWORD *)(*(_DWORD *)(v62 + 512) + 240 * v61 + 220), &v174);
v64 = v177;
*(_DWORD *)(v7 - 8) = *(_DWORD *)&v176;
*(_DWORD *)(v7 - 4) = v64;
v8 = v169;
continue;
case 1:
v98 = *(_DWORD *)(v8 + 4);
v169 = v8 + 8;
v99 = v7 - 16;
*(_DWORD *)v7 = 3;
*(_DWORD *)(v7 + 4) = v98;
v100 = *(_DWORD *)(v2 + 28);
v101 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v100 + 512) + 240 * *(_DWORD *)(v7 - 16) + 8);
if ( v101 )
goto LABEL_95;
gmLog::LogEntry(v100 + 568, "setdot failed.");
goto LABEL_98;
case 2:
v85 = *(_DWORD *)(v2 + 28);
v67 = *(_DWORD *)(v85 + 512);
v68 = v67 + 240 * *(_DWORD *)(v7 - 16);
v69 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v68 + 12);
if ( v69 )
goto LABEL_71;
v86 = *(_DWORD *)(v68 + 120);
if ( v86 )
goto LABEL_86;
v160 = gmGetOperatorName(2);
v161 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 16));
v162 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
gmLog::LogEntry(v85 + 568, "operator %s undefined for type %s and %s", v160, v161, v162);
goto LABEL_98;
case 3:
v70 = *(_DWORD *)(v2 + 28);
v71 = *(_DWORD *)(v70 + 512);
v72 = v71 + 240 * *(_DWORD *)(v7 - 24);
v73 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v72 + 16);
if ( v73 )
{
v7 -= 24;
v73(v2, v7, v71, v72);
v8 = v169;
continue;
}
v139 = *(_DWORD *)(v72 + 124);
if ( !v139 )
{
gmLog::LogEntry(v70 + 568, "setind failed.");
goto LABEL_98;
}
v140 = v7 - 8;
v141 = v7 + 8;
v142 = *(_DWORD *)(v7 - 4);
*(_DWORD *)v141 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v141 + 4) = v142;
v143 = *(_DWORD *)(v7 - 12);
v88 = (int)&v169;
*(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
*(_DWORD *)(v7 + 4) = v143;
v144 = *(_DWORD *)(v7 - 20);
v90 = (int)&v170;
*(_DWORD *)v140 = *(_DWORD *)(v7 - 24);
*(_DWORD *)(v140 + 4) = v144;
v93 = 3;
*(_DWORD *)(v7 - 24) = 0;
v92 = v2;
*(_DWORD *)(v7 - 20) = 0;
*(_DWORD *)(v7 - 12) = v139;
*(_DWORD *)(v7 - 16) = 5;
v95 = (v7 + 16 - *(_DWORD *)(v2 + 32)) >> 3;
goto LABEL_88;
case 4:
case 5:
case 6:
case 7:
case 8:
case 0xB:
case 0xC:
case 0xD:
case 0xE:
case 0xF:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
v65 = *(_DWORD *)(v7 - 8);
v66 = *(_DWORD *)(v2 + 28);
if ( v65 < *(_DWORD *)(v7 - 16) )
v65 = *(_DWORD *)(v7 - 16);
v67 = *(_DWORD *)(v66 + 512);
v68 = v67 + 240 * v65 + 4 * v10;
v69 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v68 + 4);
if ( v69 )
{
LABEL_71:
v69(v2, v7 - 16, v67, v68);
v7 -= 8;
v8 = v169;
continue;
}
v86 = *(_DWORD *)(v68 + 112);
if ( !v86 )
{
gmGetOperatorName(v10);
gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 16));
gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
gmLog::LogEntry(v66 + 568, "operator %s undefined for type %s and %s");
goto LABEL_98;
}
LABEL_86:
v87 = v7 + 8;
v88 = (int)&v169;
v89 = *(_DWORD *)(v7 - 12);
v90 = (int)&v170;
*(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
*(_DWORD *)(v7 + 4) = v89;
v91 = *(_DWORD *)(v7 - 4);
*(_DWORD *)v87 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v87 + 4) = v91;
v92 = v2;
*(_DWORD *)(v7 - 16) = v69;
v93 = 2;
*(_DWORD *)(v7 - 12) = v69;
*(_DWORD *)(v7 - 8) = 5;
*(_DWORD *)(v7 - 4) = v86;
v94 = v7 + 16 - *(_DWORD *)(v2 + 32);
goto LABEL_87;
case 9:
case 0xA:
case 0x10:
case 0x17:
case 0x18:
case 0x19:
v15 = *(_DWORD *)(v2 + 28);
v16 = *(_DWORD *)(v15 + 512);
v17 = v16 + 240 * *(_DWORD *)(v7 - 8) + 4 * v10;
v18 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v17 + 4);
if ( v18 )
{
v18(v2, v7 - 8, v16, v17);
v8 = v169;
continue;
}
v145 = *(_DWORD *)(v17 + 112);
if ( !v145 )
{
v158 = gmGetOperatorName(v10);
v159 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
gmLog::LogEntry(v15 + 568, "unary operator %s undefined for type %s", v158, v159, v163);
goto LABEL_98;
}
v146 = *(_DWORD *)(v7 - 4);
v147 = v7 + 8;
v88 = (int)&v169;
*(_DWORD *)v147 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v147 + 4) = v146;
v90 = (int)&v170;
*(_DWORD *)(v7 - 8) = 0;
v92 = v2;
*(_DWORD *)(v7 - 4) = 0;
*(_DWORD *)v7 = 5;
*(_DWORD *)(v7 + 4) = v145;
v93 = 1;
v94 = v7 + 16 - *(_DWORD *)(v2 + 32);
goto LABEL_87;
default:
goto LABEL_14;
case 0x1B:
v83 = *(_DWORD *)(v2 + 28);
if ( !*(_BYTE *)(v83 + 552) || !*(_DWORD *)(v83 + 8) )
{
LABEL_14:
v8 += 4;
continue;
}
v84 = *(_DWORD *)(v2 + 32);
*(_DWORD *)(v2 + 68) = v9;
*(_DWORD *)(v2 + 40) = (v7 - v84) >> 3;
if ( (*(int (__fastcall **)(int))(v83 + 8))(v2) )
return v165;
goto LABEL_83;
case 0x1C:
v8 = v170 + *(_DWORD *)(v8 + 4);
continue;
case 0x1D:
v32 = *(_DWORD *)(v7 - 8);
v30 = v7 - 8;
if ( v32 <= 6 )
goto LABEL_41;
v33 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v32;
v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v33 + 108);
if ( v26 )
{
v26(v2, v7 - 8, v33, v9);
v9 = v169;
}
else
{
v150 = *(_DWORD *)(v33 + 216);
if ( v150 )
goto LABEL_138;
}
LABEL_41:
if ( !*(_DWORD *)(v7 - 4) )
goto LABEL_37;
goto LABEL_42;
case 0x1E:
v29 = *(_DWORD *)(v7 - 8);
v30 = v7 - 8;
if ( v29 <= 6 )
goto LABEL_36;
v31 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v29;
v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v31 + 108);
if ( v26 )
{
v26(v2, v7 - 8, v31, v9);
v9 = v169;
}
else
{
v150 = *(_DWORD *)(v31 + 216);
if ( v150 )
{
LABEL_138:
v151 = *(_DWORD *)v30;
v152 = *(_DWORD *)(v30 + 4);
goto LABEL_134;
}
}
LABEL_36:
if ( *(_DWORD *)(v7 - 4) )
{
LABEL_37:
v7 = v30;
v8 = v170 + *(_DWORD *)v9;
}
else
{
LABEL_42:
v8 = v9 + 4;
v7 = v30;
}
continue;
case 0x1F:
v27 = *(_DWORD *)(v7 - 8);
if ( v27 <= 6 )
goto LABEL_31;
v28 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v27;
v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v28 + 108);
if ( v26 )
{
v26(v2, v7 - 8, v28, v9);
v9 = v169;
}
else
{
v150 = *(_DWORD *)(v28 + 216);
if ( v150 )
goto LABEL_133;
}
LABEL_31:
if ( !*(_DWORD *)(v7 - 4) )
goto LABEL_27;
goto LABEL_32;
case 0x20:
v24 = *(_DWORD *)(v7 - 8);
if ( v24 <= 6 )
goto LABEL_26;
v25 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v24;
v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v25 + 108);
if ( v26 )
{
v26(v2, v7 - 8, v25, v9);
v9 = v169;
}
else
{
v150 = *(_DWORD *)(v25 + 216);
if ( v150 )
{
LABEL_133:
v151 = *(_DWORD *)(v7 - 8);
v152 = *(_DWORD *)(v7 - 4);
LABEL_134:
v153 = v7 + 8;
*(_DWORD *)v153 = v151;
*(_DWORD *)(v153 + 4) = v152;
v90 = (int)&v170;
*(_DWORD *)(v7 - 8) = v26;
v92 = v2;
*(_DWORD *)(v7 - 4) = v26;
*(_DWORD *)v7 = 5;
*(_DWORD *)(v7 + 4) = v150;
v93 = 1;
v154 = *(_DWORD *)(v2 + 32);
v169 -= 4;
v88 = (int)&v169;
v94 = v7 + 16 - v154;
LABEL_87:
v95 = v94 >> 3;
LABEL_88:
*(_DWORD *)(v2 + 40) = v95;
v96 = gmThread::PushStackFrame(v92, v93, v88, v90);
v97 = *(_DWORD *)(v2 + 32);
v7 = v97 + 8 * *(_DWORD *)(v2 + 40);
v6 = v97 + 8 * *(_DWORD *)(v2 + 44);
if ( v96 )
{
if ( v96 == 6 )
return v165;
if ( v96 != 7 )
{
if ( v96 == 3 )
{
v165 = 3;
gmMachine::Sys_SwitchState(*(_DWORD *)(v2 + 28), v2, 3);
}
else
{
v165 = v96;
}
return v165;
}
LABEL_98:
*(_DWORD *)(v2 + 68) = v169;
gmThread::LogLineFile(v2);
gmThread::LogCallStack(v2);
v109 = *(_DWORD *)(v2 + 28);
if ( !gmMachine::s_machineCallback )
goto LABEL_101;
v110 = ((int (__fastcall *)(int, signed int, int))gmMachine::s_machineCallback)(v109, 1, v2) == 0;
v109 = *(_DWORD *)(v2 + 28);
if ( v110 || !*(_BYTE *)(v109 + 552) || !*(_DWORD *)(v109 + 4) )
goto LABEL_101;
v165 = 4;
gmMachine::Sys_SwitchState(v109, v2, 4);
return v165;
}
goto LABEL_83;
}
}
LABEL_26:
if ( *(_DWORD *)(v7 - 4) )
LABEL_27:
v8 = v170 + *(_DWORD *)v9;
else
LABEL_32:
v8 = v9 + 4;
continue;
case 0x21:
v19 = v7 - *(_DWORD *)(v2 + 32);
v169 = v8 + 8;
*(_DWORD *)(v2 + 40) = v19 >> 3;
v20 = gmThread::PushStackFrame(v2, *(_DWORD *)(v8 + 4), (int)&v169, (int)&v170);
v21 = *(_DWORD *)(v2 + 40);
v22 = *(_DWORD *)(v2 + 32);
v7 = v22 + 8 * v21;
v6 = v22 + 8 * *(_DWORD *)(v2 + 44);
if ( v20 )
{
if ( v20 != 6 )
{
if ( v20 == 7 )
goto LABEL_98;
if ( v20 == 3 )
{
if ( v166 )
{
v155 = v22 + 8 * (v21 + 536870911);
v156 = *(_DWORD *)(v155 + 4);
*(_DWORD *)v166 = *(_DWORD *)v155;
*(_DWORD *)(v166 + 4) = v156;
}
goto LABEL_156;
}
v165 = v20;
}
return v165;
}
if ( *(_DWORD *)(v2 + 16) )
{
v23 = *(_DWORD *)(v2 + 28);
if ( *(_BYTE *)(v23 + 552) )
{
if ( *(_DWORD *)(v23 + 12) )
{
*(_DWORD *)(v2 + 68) = v169;
if ( (*(int (__fastcall **)(int))(v23 + 12))(v2) )
return v165;
}
}
}
goto LABEL_83;
case 0x22:
*(_DWORD *)v7 = 0;
v7 += 8;
*(_DWORD *)(v7 - 4) = 0;
goto LABEL_8;
case 0x23:
LABEL_8:
*(_DWORD *)(v2 + 40) = (v7 - *(_DWORD *)(v2 + 32)) >> 3;
v11 = gmThread::Sys_PopStackFrame(v2, &v169, &v170);
v12 = *(_DWORD *)(v2 + 32);
v7 = v12 + 8 * *(_DWORD *)(v2 + 40);
v6 = v12 + 8 * *(_DWORD *)(v2 + 44);
if ( !v11 )
{
if ( *(_DWORD *)(v2 + 16) )
{
v13 = *(_DWORD *)(v2 + 28);
if ( *(_BYTE *)(v13 + 552) )
{
if ( *(_DWORD *)(v13 + 16) )
{
*(_DWORD *)(v2 + 68) = v169;
if ( (*(int (__fastcall **)(int))(v13 + 16))(v2) )
return v165;
}
}
}
LABEL_83:
v8 = v169;
continue;
}
if ( v11 != 3 )
{
if ( v11 == 7 )
goto LABEL_98;
goto LABEL_83;
}
if ( v166 )
{
v157 = *(_DWORD *)(v7 - 4);
*(_DWORD *)v166 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v166 + 4) = v157;
}
LABEL_156:
v109 = *(_DWORD *)(v2 + 28);
LABEL_101:
gmMachine::Sys_SwitchState(v109, v2, 3);
return 3;
case 0x24:
v169 = v8 + 8;
v51 = *(_DWORD *)(v7 - 16);
v52 = *(_DWORD *)(v8 + 4);
v53 = v52 >> 16;
v164 = (unsigned __int16)v52;
if ( v51 == 4 )
{
v174 = *(_DWORD *)(v7 - 4);
v134 = gmTableObject::GetNext(*(_DWORD *)(v7 - 12), &v174);
*(_DWORD *)(v7 - 4) = v174;
if ( v134 )
{
v135 = *(_DWORD *)(v134 + 8);
v136 = v6 + 8 * v53;
*(_DWORD *)v136 = *(_DWORD *)(v134 + 4);
*(_DWORD *)(v136 + 4) = v135;
v137 = *(_DWORD *)(v134 + 16);
v138 = v6 + 8 * v164;
*(_DWORD *)v138 = *(_DWORD *)(v134 + 12);
*(_DWORD *)(v138 + 4) = v137;
*(_DWORD *)v7 = 1;
*(_DWORD *)(v7 + 4) = 1;
}
else
{
*(_DWORD *)(v7 + 4) = 0;
*(_DWORD *)v7 = 1;
}
LABEL_120:
v7 += 8;
v8 = v169;
}
else
{
v54 = *(_DWORD *)(v2 + 28);
v55 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)(v54 + 512) + 240 * v51 + 236);
if ( !v55 )
{
gmLog::LogEntry(v54 + 568, "foreach expression has no iterator function");
goto LABEL_98;
}
v171 = *(_DWORD *)(v7 - 4);
v163 = &v172;
v55(v2, *(_DWORD *)(v7 - 12), &v171, &v174);
if ( v171 == -1 )
{
*(_DWORD *)(v7 + 4) = 0;
*(_DWORD *)v7 = 1;
}
else
{
v56 = v175;
v57 = v6 + 8 * v53;
*(_DWORD *)v57 = v174;
*(_DWORD *)(v57 + 4) = v56;
v58 = v173;
v59 = v6 + 8 * v164;
*(_DWORD *)v59 = *(_DWORD *)&v172;
*(_DWORD *)(v59 + 4) = v58;
*(_DWORD *)v7 = 1;
*(_DWORD *)(v7 + 4) = 1;
}
v7 += 8;
*(_DWORD *)(v7 - 12) = v171;
v8 = v169;
}
continue;
case 0x25:
v7 -= 8;
v8 += 4;
continue;
case 0x26:
v7 -= 16;
v8 += 4;
continue;
case 0x27:
v50 = *(_DWORD *)(v7 - 4);
*(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v7 + 4) = v50;
v7 += 8;
v8 = v169;
continue;
case 0x28:
v46 = v7 + 8;
v47 = *(_DWORD *)(v7 - 12);
*(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
*(_DWORD *)(v7 + 4) = v47;
v48 = *(_DWORD *)(v7 - 8);
v49 = *(_DWORD *)(v7 - 4);
v7 += 16;
v8 = v169;
*(_DWORD *)v46 = v48;
*(_DWORD *)(v46 + 4) = v49;
continue;
case 0x29:
v41 = v7 - 8;
v42 = v7 - 16;
v43 = *(_DWORD *)(v7 - 4);
*(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v7 + 4) = v43;
v44 = *(_DWORD *)(v7 - 12);
*(_DWORD *)v41 = *(_DWORD *)(v7 - 16);
*(_DWORD *)(v41 + 4) = v44;
v45 = *(_DWORD *)(v7 + 4);
*(_DWORD *)v42 = *(_DWORD *)v7;
*(_DWORD *)(v42 + 4) = v45;
v8 = v169;
continue;
case 0x2A:
*(_DWORD *)v7 = 0;
v7 += 8;
*(_DWORD *)(v7 - 4) = 0;
v8 = v169;
continue;
case 0x2B:
*(_DWORD *)v7 = 1;
v7 += 8;
v8 = v169 + 4;
*(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
continue;
case 0x2C:
*(_DWORD *)v7 = 1;
*(_DWORD *)(v7 + 4) = 0;
v7 += 8;
v8 = v169;
continue;
case 0x2D:
*(_DWORD *)v7 = 1;
*(_DWORD *)(v7 + 4) = 1;
v7 += 8;
v8 = v169;
continue;
case 0x2E:
*(_DWORD *)v7 = 2;
v7 += 8;
v8 = v169 + 4;
*(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
continue;
case 0x2F:
*(_DWORD *)v7 = 3;
v7 += 8;
v8 = v169 + 4;
*(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
continue;
case 0x30:
v39 = v7 - *(_DWORD *)(v2 + 32);
v7 += 8;
*(_DWORD *)(v2 + 40) = v39 >> 3;
*(_DWORD *)(v7 - 8) = 4;
v40 = gmMachine::AllocTableObject(*(_DWORD *)(v2 + 28));
v8 = v169;
*(_DWORD *)(v7 - 4) = v40;
continue;
case 0x31:
*(_DWORD *)v7 = 5;
v7 += 8;
v8 = v169 + 4;
*(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
continue;
case 0x32:
v37 = *(_DWORD *)(v2 + 32) + 8 * (*(_DWORD *)(v2 + 44) + 536870910);
v38 = *(_DWORD *)(v37 + 4);
*(_DWORD *)v7 = *(_DWORD *)v37;
*(_DWORD *)(v7 + 4) = v38;
v7 += 8;
v8 = v169;
continue;
case 0x33:
v34 = *(_DWORD *)(v8 + 4);
v169 = v8 + 8;
v35 = v6 + 8 * v34;
v36 = *(_DWORD *)(v35 + 4);
*(_DWORD *)v7 = *(_DWORD *)v35;
*(_DWORD *)(v7 + 4) = v36;
v7 += 8;
v8 = v169;
continue;
case 0x34:
v114 = *(_DWORD *)(v2 + 28);
v115 = *(_DWORD *)(v8 + 4);
v169 = v8 + 8;
v116 = *(_DWORD *)(v114 + 24);
if ( *(_BYTE *)(v116 + 112) )
{
v117 = v6 + 8 * v115;
}
else
{
v118 = *(_DWORD *)(v6 + 8 * v115);
v117 = v6 + 8 * v115;
if ( v118 > 2 )
{
v119 = *(_DWORD *)(v117 + 4);
if ( v119 )
{
if ( !*(_BYTE *)(v119 + 13) && *(_DWORD *)(v116 + 96) != *(_BYTE *)(v119 + 12) )
gmGCColorSet::GrayThisObject(v116 + 4);
}
}
}
v7 -= 8;
v120 = *(_DWORD *)(v7 + 4);
*(_DWORD *)v117 = *(_DWORD *)v7;
*(_DWORD *)(v117 + 4) = v120;
v8 = v169;
continue;
case 0x35:
*(_DWORD *)v7 = 3;
v111 = v169 + 4;
*(_DWORD *)(v7 + 4) = *(_DWORD *)v169;
v112 = *(_DWORD *)(v2 + 28);
v169 = v111;
gmTableObject::Get(&v167, *(_DWORD *)(v112 + 116), v7);
v113 = v168;
*(_DWORD *)v7 = *(_DWORD *)&v167;
*(_DWORD *)(v7 + 4) = v113;
v7 += 8;
v8 = v169;
continue;
case 0x36:
*(_DWORD *)v7 = 3;
v121 = v169 + 4;
*(_DWORD *)(v7 + 4) = *(_DWORD *)v169;
v7 -= 8;
v122 = *(_DWORD *)(v2 + 28);
v169 = v121;
v163 = 0;
gmTableObject::Set(*(_DWORD *)(v122 + 116));
v8 = v169;
continue;
case 0x37:
v74 = *(_DWORD *)(v2 + 32);
v75 = *(_DWORD *)(v2 + 44) + 536870910;
v169 = v8 + 8;
v76 = v74 + 8 * v75;
v77 = *(_DWORD *)v76;
v78 = *(_DWORD *)(v76 + 4);
*(_DWORD *)(v7 + 12) = *(_DWORD *)(v8 + 4);
*(_DWORD *)(v7 + 8) = 3;
*(_DWORD *)v7 = v77;
*(_DWORD *)(v7 + 4) = v78;
v79 = *(_DWORD *)(v2 + 28);
v80 = *(_DWORD *)(v74 + 8 * v75);
v81 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v79 + 512) + 240 * v80 + 4);
if ( !v81 )
goto LABEL_77;
v81(v2, v7);
if ( *(_DWORD *)v7 )
goto LABEL_120;
v80 = *(_DWORD *)(v74 + 8 * v75);
v79 = *(_DWORD *)(v2 + 28);
LABEL_77:
if ( !v80 )
{
gmLog::LogEntry(v79 + 568, "getthis failed. this is null");
goto LABEL_98;
}
gmTableObject::Get(&v178, *(_DWORD *)(*(_DWORD *)(v79 + 512) + 240 * v80 + 220), v7 + 8);
v82 = v179;
*(_DWORD *)v7 = *(_DWORD *)&v178;
*(_DWORD *)(v7 + 4) = v82;
v7 += 8;
v8 = v169;
continue;
case 0x38:
v99 = v7 - 8;
v102 = *(_DWORD *)(v2 + 32);
v103 = *(_DWORD *)(v2 + 44) + 536870910;
v169 = v8 + 8;
v104 = *(_DWORD *)(v7 - 4);
v105 = v102 + 8 * v103;
v106 = *(_DWORD *)(v8 + 4);
*(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
*(_DWORD *)(v7 + 4) = v104;
v107 = *(_DWORD *)(v105 + 4);
*(_DWORD *)v99 = *(_DWORD *)v105;
*(_DWORD *)(v99 + 4) = v107;
*(_DWORD *)(v7 + 12) = v106;
*(_DWORD *)(v7 + 8) = 3;
v108 = *(_DWORD *)(v2 + 28);
v101 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v108 + 512) + 240 * *(_DWORD *)(v102 + 8 * v103) + 8);
if ( !v101 )
{
((void (__fastcall *)(int, _DWORD))gmLog::LogEntry)(v108 + 568, "setthis failed.");
goto LABEL_98;
}
LABEL_95:
v101(v2, v99);
v7 = v99;
v8 = v169;
continue;
case 0x39:
v123 = gmMachine::CreateThread(*(_DWORD *)(v2 + 28), &v174);
gmThread::Touch(v123, *(_DWORD *)(v2 + 36) - *(_DWORD *)(v2 + 44) - 4);
memcpy(
*(void **)(v123 + 32),
(const void *)(*(_DWORD *)(v2 + 32) + 8 * (*(_DWORD *)(v2 + 44) + 536870910)),
8 * (*(_DWORD *)(v2 + 40) - *(_DWORD *)(v2 + 44) + 2));
*(_DWORD *)(v123 + 40) = *(_DWORD *)(v2 + 40) - *(_DWORD *)(v2 + 44) + 2;
v124 = *(_DWORD *)(v2 + 28);
v125 = *(_DWORD *)(v124 + 220);
if ( v125 )
*(_DWORD *)(v124 + 220) = *(_DWORD *)v125;
else
v125 = gmMemChain::Alloc(v124 + 224);
*(_DWORD *)(v123 + 48) = v125;
*(_DWORD *)v125 = 0;
v7 += 8;
v126 = v169;
*(_DWORD *)(*(_DWORD *)(v123 + 48) + 4) = 0;
*(_DWORD *)(*(_DWORD *)(v123 + 48) + 8) = 0;
v127 = *(_DWORD *)(v123 + 40);
v128 = *(_DWORD *)(v123 + 32);
*(_DWORD *)(v123 + 68) = v126 + 4;
*(_DWORD *)(v123 + 44) = 2;
v129 = *(_DWORD *)(v2 + 72);
*(_DWORD *)(v128 + 8 * v127) = 1;
v130 = *(_DWORD *)(v123 + 40);
v131 = *(_DWORD *)(v123 + 32);
v132 = v169;
*(_DWORD *)(v123 + 40) = v130 + 1;
v133 = v170;
*(_DWORD *)(v131 + 8 * v130 + 4) = v129;
v169 = v133 + *(_DWORD *)v132;
*(_DWORD *)(v7 - 8) = 1;
v8 = v169;
*(_DWORD *)(v7 - 4) = *(_DWORD *)(v123 + 72);
continue;
}
}
}