sobinist

original

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