
int * __regparm3 d_index_template_argument_part_8(int *param_1,int param_2)

{
  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {
    return (int *)0x0;
  }
  if (param_2 < 1) {
    if (param_2 != 0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      param_1 = (int *)param_1[3];
      param_2 = param_2 + -1;
      if (param_1 == (int *)0x0) {
        return param_1;
      }
      if (*param_1 != 0x2f) {
        return (int *)0x0;
      }
    } while (param_2 != 0);
  }
  return (int *)param_1[2];
}



int * __regparm3 FUN_00437780(int *param_1,int param_2)

{
  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {
    return (int *)0x0;
  }
  if (param_2 < 1) {
    if (param_2 != 0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      param_1 = (int *)param_1[3];
      param_2 = param_2 + -1;
      if (param_1 == (int *)0x0) {
        return param_1;
      }
      if (*param_1 != 0x2f) {
        return (int *)0x0;
      }
    } while (param_2 != 0);
  }
  return (int *)param_1[2];
}


TEST EAX,EAX
JZ 0x004377b0
CMP dword ptr [EAX],0x2f
JNZ 0x004377b0
TEST EDX,EDX
JG 0x00437799
JMP 0x004377a4
CMP dword ptr [EAX],0x2f
JNZ 0x004377b0
TEST EDX,EDX
JZ 0x004377a6
MOV EAX,dword ptr [EAX + 0xc]
SUB EDX,0x1
TEST EAX,EAX
JNZ 0x00437790
RET
JNZ 0x004377b0
MOV EAX,dword ptr [EAX + 0x8]
RET
XOR EAX,EAX
RET
(translation_unit "int * __regparm3 FUN_00437780(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}\n\n" (function_definition "int * __regparm3 FUN_00437780(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" primitive_type (pointer_declarator "* __regparm3 FUN_00437780(int *param_1,int param_2)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_00437780(int *param_1,int param_2)" identifier (parameter_list "(int *param_1,int param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) )))) (compound_statement "{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" { (if_statement "if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "((param_1 == (int *)0x0) || (*param_1 != 0x2f))" ( (binary_expression "(param_1 == (int *)0x0) || (*param_1 != 0x2f)" (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) ))) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }" { (if_statement "if (param_2 != 0) {\n      return (int *)0x0;\n    }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n      return (int *)0x0;\n    }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" else (compound_statement "{\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" { (do_statement "do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);" do (compound_statement "{\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    }" { (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (if_statement "if (param_1 == (int *)0x0) {\n        return param_1;\n      }" if (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (if_statement "if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) while (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) ;) }))) (return_statement "return (int *)param_1[2];" return (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) })))
(translation_unit "int * __regparm3 d_index_template_argument_part_8(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}\n\n" (function_definition "int * __regparm3 d_index_template_argument_part_8(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" primitive_type (pointer_declarator "* __regparm3 d_index_template_argument_part_8(int *param_1,int param_2)" * (ERROR "__regparm3" identifier) (function_declarator "d_index_template_argument_part_8(int *param_1,int param_2)" identifier (parameter_list "(int *param_1,int param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) )))) (compound_statement "{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" { (if_statement "if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "((param_1 == (int *)0x0) || (*param_1 != 0x2f))" ( (binary_expression "(param_1 == (int *)0x0) || (*param_1 != 0x2f)" (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) ))) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }" { (if_statement "if (param_2 != 0) {\n      return (int *)0x0;\n    }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n      return (int *)0x0;\n    }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" else (compound_statement "{\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" { (do_statement "do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);" do (compound_statement "{\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    }" { (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (if_statement "if (param_1 == (int *)0x0) {\n        return param_1;\n      }" if (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (if_statement "if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) while (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) ;) }))) (return_statement "return (int *)param_1[2];" return (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) })))
(translation_unit "int * __regparm3 FUN_00437780(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}\n\n" (function_definition "int * __regparm3 FUN_00437780(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" primitive_type (pointer_declarator "* __regparm3 FUN_00437780(int *param_1,int param_2)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_00437780(int *param_1,int param_2)" identifier (parameter_list "(int *param_1,int param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) )))) (compound_statement "{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" { (if_statement "if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "((param_1 == (int *)0x0) || (*param_1 != 0x2f))" ( (binary_expression "(param_1 == (int *)0x0) || (*param_1 != 0x2f)" (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) ))) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }" { (if_statement "if (param_2 != 0) {\n      return (int *)0x0;\n    }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n      return (int *)0x0;\n    }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" else (compound_statement "{\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" { (do_statement "do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);" do (compound_statement "{\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    }" { (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (if_statement "if (param_1 == (int *)0x0) {\n        return param_1;\n      }" if (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (if_statement "if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "(*param_1 != 0x2f)" ( (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" * identifier) != number_literal) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) while (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) ;) }))) (return_statement "return (int *)param_1[2];" return (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }))) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ;) })))
(function_definition "int * __regparm3 FUN_00437780(int *param_1,int param_2)\n\n{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" (primitive_type "int") (pointer_declarator "* __regparm3 FUN_00437780(int *param_1,int param_2)" (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00437780(int *param_1,int param_2)" (identifier "FUN_00437780") (parameter_list "(int *param_1,int param_2)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")")))) (compound_statement "{\n  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }\n  if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }\n  return (int *)param_1[2];\n}" ({ "{") (if_statement "if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {\n    return (int *)0x0;\n  }" (if "if") (parenthesized_expression "((param_1 == (int *)0x0) || (*param_1 != 0x2f))" (( "(") (binary_expression "(param_1 == (int *)0x0) || (*param_1 != 0x2f)" (parenthesized_expression "(param_1 == (int *)0x0)" (( "(") (binary_expression "param_1 == (int *)0x0" (identifier "param_1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(*param_1 != 0x2f)" (( "(") (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (number_literal "0x2f")) () ")"))) () ")")) (compound_statement "{\n    return (int *)0x0;\n  }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (param_2 < 1) {\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" (if "if") (parenthesized_expression "(param_2 < 1)" (( "(") (binary_expression "param_2 < 1" (identifier "param_2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    if (param_2 != 0) {\n      return (int *)0x0;\n    }\n  }" ({ "{") (if_statement "if (param_2 != 0) {\n      return (int *)0x0;\n    }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return (int *)0x0;\n    }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" (else "else") (compound_statement "{\n    do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);\n  }" ({ "{") (do_statement "do {\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    } while (param_2 != 0);" (do "do") (compound_statement "{\n      param_1 = (int *)param_1[3];\n      param_2 = param_2 + -1;\n      if (param_1 == (int *)0x0) {\n        return param_1;\n      }\n      if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }\n    }" ({ "{") (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" (identifier "param_1") (= "=") (cast_expression "(int *)param_1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" (identifier "param_2") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (param_1 == (int *)0x0) {\n        return param_1;\n      }" (if "if") (parenthesized_expression "(param_1 == (int *)0x0)" (( "(") (binary_expression "param_1 == (int *)0x0" (identifier "param_1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return param_1;\n      }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (if_statement "if (*param_1 != 0x2f) {\n        return (int *)0x0;\n      }" (if "if") (parenthesized_expression "(*param_1 != 0x2f)" (( "(") (binary_expression "*param_1 != 0x2f" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (number_literal "0x2f")) () ")")) (compound_statement "{\n        return (int *)0x0;\n      }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")))) (return_statement "return (int *)param_1[2];" (return "return") (cast_expression "(int *)param_1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))

int * __regparm3 function_1(int *var_1,int var_2)

{
  if ((var_1 == (int *)0x0) || (*var_1 != 0x2f)) {
    return (int *)0x0;
  }
  if (var_2 < 1) {
    if (var_2 != 0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      var_1 = (int *)var_1[3];
      var_2 = var_2 + -1;
      if (var_1 == (int *)0x0) {
        return var_1;
      }
      if (*var_1 != 0x2f) {
        return (int *)0x0;
      }
    } while (var_2 != 0);
  }
  return (int *)var_1[2];
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) alternative: (else_clause (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))

int * __regparm3 MASKED(int *param_1,int param_2)

{
  if ((param_1 == (int *)0x0) || (*param_1 != 0x2f)) {
    return (int *)0x0;
  }
  if (param_2 < 1) {
    if (param_2 != 0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      param_1 = (int *)param_1[3];
      param_2 = param_2 + -1;
      if (param_1 == (int *)0x0) {
        return param_1;
      }
      if (*param_1 != 0x2f) {
        return (int *)0x0;
      }
    } while (param_2 != 0);
  }
  return (int *)param_1[2];
}

