sobinist

MyImpl

Apr 3rd, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.87 KB | None | 0 0
  1. tdstNodeInterpret_ *__cdecl fn_p_stComparisonCondition_MOD(SuperObject *superObject, tdstNodeInterpret_ *interpreter, tdstGetSetParam_ *getSetParam) {
  2.     /*tdstNodeInterpret_* returnVal = fn_p_stComparisonCondition(superObject, interpreter, getSetParam);
  3.     return returnVal;*/
  4.    
  5.     int comparisonType; // edi@1
  6.     tdstNodeInterpret_ *interpreterA; // eax@1
  7.     tdstNodeInterpret_ *interpreterB; // edx@1
  8.     double paramA; // st7@3
  9.     double paramB; // st6@3
  10.     int typeMinusFour; // edi@5
  11.     tdstNodeInterpret_ *result; // eax@10
  12.     tdstGetSetParam_ GetSetParam; // [sp+8h] [bp-20h]@1
  13.  
  14.     comparisonType = interpreter[-1].tableIndex;
  15.     interpreterA = fn_p_stEvalTree(superObject, interpreter, (tdstGetSetParam_ *)((char *)&GetSetParam + 16));
  16.     interpreterB = fn_p_stEvalTree(superObject, interpreterA, &GetSetParam);
  17.     if (GetSetParam.field8_paramTypes != GetSetParam.field4_DataType) {
  18.         if (GetSetParam.field8_paramTypes == 8) {
  19.             paramA = *(float *)&GetSetParam.field5;
  20.             paramB = (float)GetSetParam.field1;
  21.         } else {
  22.             paramA = (double)GetSetParam.field5;
  23.             if (GetSetParam.field4_DataType == 8) {
  24.                 paramB = *(float *)&GetSetParam.field1;
  25.             } else {
  26.                 paramB = (double)GetSetParam.field1;
  27.             }
  28.         }
  29.     LABEL_27:
  30.         switch (comparisonType) {
  31.             case 4:
  32.             if (paramA != paramB) {
  33.                 goto RETURNFALSE_2;
  34.             }
  35.             getSetParam->field1 = 1;
  36.             return interpreterB;
  37.             case 5:
  38.             if (paramA == paramB) {
  39.                 goto RETURNFALSE_2;
  40.             }
  41.             getSetParam->field1 = 1;
  42.             return interpreterB;
  43.             case 6:
  44.             if (paramA >= paramB) {
  45.                 goto RETURNFALSE_2;
  46.             }
  47.             getSetParam->field1 = 1;
  48.             return interpreterB;
  49.             case 7:
  50.             if (paramA <= paramB) {
  51.                 goto RETURNFALSE_2;
  52.             }
  53.             getSetParam->field1 = 1;
  54.             return interpreterB;
  55.             case 8:
  56.             if (paramA > paramB) {
  57.                 goto RETURNFALSE_2;
  58.             }
  59.             getSetParam->field1 = 1;
  60.             return interpreterB;
  61.             case 9:
  62.             if (paramA >= paramB) {
  63.                 goto RETURNTRUE;
  64.             }
  65.             goto RETURNFALSE_2;
  66.             default:
  67.             goto RETURNFALSE_1;
  68.         }
  69.         goto RETURNFALSE_1;
  70.     }
  71.     if (GetSetParam.field8_paramTypes == 8) {
  72.         paramA = *(float *)&GetSetParam.field5;
  73.         paramB = *(float *)&GetSetParam.field1;
  74.         goto LABEL_27;
  75.     }
  76.     if (GetSetParam.field8_paramTypes == 21) {
  77.         typeMinusFour = comparisonType - 4;
  78.         if (typeMinusFour) {
  79.             if (typeMinusFour != 1) {
  80.             RETURNFALSE_1:
  81.                 getSetParam->field1 = 0;
  82.                 return interpreterB;
  83.             }
  84.             if (*(float *)&GetSetParam.field5 != *(float *)&GetSetParam.field1
  85.                 || *(float *)&GetSetParam.field6 != *(float *)&GetSetParam.field2
  86.                 || *(float *)&GetSetParam.field7 != *(float *)&GetSetParam.field3) {
  87.             RETURNTRUE:
  88.                 getSetParam->field1 = 1;
  89.                 result = interpreterB;
  90.             } else {
  91.                 getSetParam->field1 = 0;
  92.                 result = interpreterB;
  93.             }
  94.         } else if (*(float *)&GetSetParam.field5 != *(float *)&GetSetParam.field1
  95.             || *(float *)&GetSetParam.field6 != *(float *)&GetSetParam.field2
  96.             || *(float *)&GetSetParam.field7 != *(float *)&GetSetParam.field3) {
  97.         RETURNFALSE_2:
  98.             getSetParam->field1 = 0;
  99.             result = interpreterB;
  100.         } else {
  101.             getSetParam->field1 = 1;
  102.             result = interpreterB;
  103.         }
  104.     } else {
  105.         switch (comparisonType) {
  106.             case 4:
  107.             getSetParam->field1 = GetSetParam.field5 == GetSetParam.field1;
  108.             result = interpreterB;
  109.             break;
  110.             case 5:
  111.             getSetParam->field1 = GetSetParam.field5 != GetSetParam.field1;
  112.             result = interpreterB;
  113.             break;
  114.             case 6:
  115.             getSetParam->field1 = GetSetParam.field5 < GetSetParam.field1;
  116.             result = interpreterB;
  117.             break;
  118.             case 7:
  119.             getSetParam->field1 = GetSetParam.field5 > GetSetParam.field1;
  120.             result = interpreterB;
  121.             break;
  122.             case 8:
  123.             getSetParam->field1 = GetSetParam.field5 <= GetSetParam.field1;
  124.             result = interpreterB;
  125.             break;
  126.             case 9:
  127.             getSetParam->field1 = GetSetParam.field5 >= GetSetParam.field1;
  128.             result = interpreterB;
  129.             break;
  130.             default:
  131.             goto RETURNFALSE_1;
  132.         }
  133.     }
  134.     return result;
  135. }
Add Comment
Please, Sign In to add comment