
/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* DWARF original prototype: void parse(Dwarf_info_reader * this) */

void __thiscall gold::Dwarf_info_reader::parse(Dwarf_info_reader *this)

{
  Relobj *pRVar1;
  _func_int_varargs **pp_Var2;
  _func_int_varargs *p_Var3;
  char cVar4;
  int iVar5;
  
  pRVar1 = this->object_;
  pp_Var2 = (pRVar1->super_Object)._vptr_Object;
  p_Var3 = pp_Var2[3];
  if (p_Var3 == Relobj::is_big_endian) {
    iVar5 = (*pp_Var2[0x3a])(pRVar1);
    cVar4 = (char)iVar5;
  }
  else {
    iVar5 = (*p_Var3)(pRVar1);
    cVar4 = (char)iVar5;
  }
  if (cVar4 != '\0') {
    do_parse<true>(this);
    return;
  }
  do_parse<false>(this);
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void FUN_000591e0(int param_1)

{
  int *piVar1;
  code *pcVar2;
  char cVar3;
  
  piVar1 = *(int **)(param_1 + 8);
  pcVar2 = *(code **)(*piVar1 + 0xc);
  if (pcVar2 == FUN_0003a350) {
    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);
  }
  else {
    cVar3 = (*pcVar2)(piVar1);
  }
  if (cVar3 != '\0') {
    FUN_0005d520();
    return;
  }
  FUN_0005dd30();
  return;
}


PUSH ESI
CALL 0x000559ea
ADD ESI,0x335e1a
PUSH EBX
SUB ESP,0x4
MOV EBX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EBX + 0x8]
LEA ESI,[ESI + 0xffcab350]
MOV EDX,dword ptr [EAX]
MOV ECX,dword ptr [EDX + 0xc]
CMP ECX,ESI
JNZ 0x00059238
SUB ESP,0xc
PUSH EAX
CALL dword ptr [EDX + 0xe8]
ADD ESP,0x10
MOV dword ptr [ESP + 0x10],EBX
TEST AL,AL
JZ 0x00059228
ADD ESP,0x4
POP EBX
POP ESI
JMP 0x0005d520
ADD ESP,0x4
POP EBX
POP ESI
JMP 0x0005dd30
SUB ESP,0xc
PUSH EAX
CALL ECX
ADD ESP,0x10
JMP 0x00059213
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nvoid FUN_000591e0(int param_1)\n\n{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}\n\n" comment (function_definition "void FUN_000591e0(int param_1)\n\n{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" primitive_type (function_declarator "FUN_000591e0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (expression_statement "piVar1 = *(int **)(param_1 + 8);" (assignment_expression "piVar1 = *(int **)(param_1 + 8)" identifier = (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "pcVar2 = *(code **)(*piVar1 + 0xc);" (assignment_expression "pcVar2 = *(code **)(*piVar1 + 0xc)" identifier = (pointer_expression "*(code **)(*piVar1 + 0xc)" * (cast_expression "(code **)(*piVar1 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0xc)" ( (binary_expression "*piVar1 + 0xc" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" if (parenthesized_expression "(pcVar2 == FUN_0003a350)" ( (binary_expression "pcVar2 == FUN_0003a350" identifier == identifier) )) (compound_statement "{\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }" { (expression_statement "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);" (assignment_expression "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0xe8))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0xe8))" ( (pointer_expression "**(code **)(*piVar1 + 0xe8)" * (pointer_expression "*(code **)(*piVar1 + 0xe8)" * (cast_expression "(code **)(*piVar1 + 0xe8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0xe8)" ( (binary_expression "*piVar1 + 0xe8" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }) (else_clause "else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" else (compound_statement "{\n    cVar3 = (*pcVar2)(piVar1);\n  }" { (expression_statement "cVar3 = (*pcVar2)(piVar1);" (assignment_expression "cVar3 = (*pcVar2)(piVar1)" identifier = (call_expression "(*pcVar2)(piVar1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_0005d520();\n    return;\n  }" { (expression_statement "FUN_0005d520();" (call_expression "FUN_0005d520()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0005dd30();" (call_expression "FUN_0005dd30()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n/* DWARF original prototype: void parse(Dwarf_info_reader * this) */\n\nvoid __thiscall gold::Dwarf_info_reader::parse(Dwarf_info_reader *this)\n\n{\n  Relobj *pRVar1;\n  _func_int_varargs **pp_Var2;\n  _func_int_varargs *p_Var3;\n  char cVar4;\n  int iVar5;\n  \n  pRVar1 = this->object_;\n  pp_Var2 = (pRVar1->super_Object)._vptr_Object;\n  p_Var3 = pp_Var2[3];\n  if (p_Var3 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var2[0x3a])(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  if (cVar4 != '\0') {\n    do_parse<true>(this);\n    return;\n  }\n  do_parse<false>(this);\n  return;\n}\n\n" comment comment (function_definition "void __thiscall gold::Dwarf_info_reader::parse(Dwarf_info_reader *this)\n\n{\n  Relobj *pRVar1;\n  _func_int_varargs **pp_Var2;\n  _func_int_varargs *p_Var3;\n  char cVar4;\n  int iVar5;\n  \n  pRVar1 = this->object_;\n  pp_Var2 = (pRVar1->super_Object)._vptr_Object;\n  p_Var3 = pp_Var2[3];\n  if (p_Var3 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var2[0x3a])(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  if (cVar4 != '\0') {\n    do_parse<true>(this);\n    return;\n  }\n  do_parse<false>(this);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwarf_info_reader::" identifier : : identifier : :) (function_declarator "parse(Dwarf_info_reader *this)" identifier (parameter_list "(Dwarf_info_reader *this)" ( (parameter_declaration "Dwarf_info_reader *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  Relobj *pRVar1;\n  _func_int_varargs **pp_Var2;\n  _func_int_varargs *p_Var3;\n  char cVar4;\n  int iVar5;\n  \n  pRVar1 = this->object_;\n  pp_Var2 = (pRVar1->super_Object)._vptr_Object;\n  p_Var3 = pp_Var2[3];\n  if (p_Var3 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var2[0x3a])(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  if (cVar4 != '\0') {\n    do_parse<true>(this);\n    return;\n  }\n  do_parse<false>(this);\n  return;\n}" { (declaration "Relobj *pRVar1;" type_identifier (pointer_declarator "*pRVar1" * identifier) ;) (declaration "_func_int_varargs **pp_Var2;" type_identifier (pointer_declarator "**pp_Var2" * (pointer_declarator "*pp_Var2" * identifier)) ;) (declaration "_func_int_varargs *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "pRVar1 = this->object_;" (assignment_expression "pRVar1 = this->object_" identifier = (field_expression "this->object_" identifier -> field_identifier)) ;) (expression_statement "pp_Var2 = (pRVar1->super_Object)._vptr_Object;" (assignment_expression "pp_Var2 = (pRVar1->super_Object)._vptr_Object" identifier = (field_expression "(pRVar1->super_Object)._vptr_Object" (parenthesized_expression "(pRVar1->super_Object)" ( (field_expression "pRVar1->super_Object" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "p_Var3 = pp_Var2[3];" (assignment_expression "p_Var3 = pp_Var2[3]" identifier = (subscript_expression "pp_Var2[3]" identifier [ number_literal ])) ;) (if_statement "if (p_Var3 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var2[0x3a])(pRVar1);\n    cVar4 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }" if (parenthesized_expression "(p_Var3 == Relobj::is_big_endian)" ( (binary_expression "p_Var3 == Relobj" identifier == identifier) (ERROR "::is_big_endian" : : identifier) )) (compound_statement "{\n    iVar5 = (*pp_Var2[0x3a])(pRVar1);\n    cVar4 = (char)iVar5;\n  }" { (expression_statement "iVar5 = (*pp_Var2[0x3a])(pRVar1);" (assignment_expression "iVar5 = (*pp_Var2[0x3a])(pRVar1)" identifier = (call_expression "(*pp_Var2[0x3a])(pRVar1)" (parenthesized_expression "(*pp_Var2[0x3a])" ( (pointer_expression "*pp_Var2[0x3a]" * (subscript_expression "pp_Var2[0x3a]" identifier [ number_literal ])) )) (argument_list "(pRVar1)" ( identifier )))) ;) (expression_statement "cVar4 = (char)iVar5;" (assignment_expression "cVar4 = (char)iVar5" identifier = (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) }) (else_clause "else {\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }" else (compound_statement "{\n    iVar5 = (*p_Var3)(pRVar1);\n    cVar4 = (char)iVar5;\n  }" { (expression_statement "iVar5 = (*p_Var3)(pRVar1);" (assignment_expression "iVar5 = (*p_Var3)(pRVar1)" identifier = (call_expression "(*p_Var3)(pRVar1)" (parenthesized_expression "(*p_Var3)" ( (pointer_expression "*p_Var3" * identifier) )) (argument_list "(pRVar1)" ( identifier )))) ;) (expression_statement "cVar4 = (char)iVar5;" (assignment_expression "cVar4 = (char)iVar5" identifier = (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) }))) (if_statement "if (cVar4 != '\0') {\n    do_parse<true>(this);\n    return;\n  }" if (parenthesized_expression "(cVar4 != '\0')" ( (binary_expression "cVar4 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    do_parse<true>(this);\n    return;\n  }" { (expression_statement "do_parse<true>(this);" (binary_expression "do_parse<true>(this)" (binary_expression "do_parse<true" identifier < true) > (parenthesized_expression "(this)" ( identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "do_parse<false>(this);" (binary_expression "do_parse<false>(this)" (binary_expression "do_parse<false" identifier < false) > (parenthesized_expression "(this)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_000591e0(int param_1)\n\n{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}\n\n" (function_definition "void FUN_000591e0(int param_1)\n\n{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" primitive_type (function_declarator "FUN_000591e0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (expression_statement "piVar1 = *(int **)(param_1 + 8);" (assignment_expression "piVar1 = *(int **)(param_1 + 8)" identifier = (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "pcVar2 = *(code **)(*piVar1 + 0xc);" (assignment_expression "pcVar2 = *(code **)(*piVar1 + 0xc)" identifier = (pointer_expression "*(code **)(*piVar1 + 0xc)" * (cast_expression "(code **)(*piVar1 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0xc)" ( (binary_expression "*piVar1 + 0xc" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" if (parenthesized_expression "(pcVar2 == FUN_0003a350)" ( (binary_expression "pcVar2 == FUN_0003a350" identifier == identifier) )) (compound_statement "{\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }" { (expression_statement "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);" (assignment_expression "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0xe8))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0xe8))" ( (pointer_expression "**(code **)(*piVar1 + 0xe8)" * (pointer_expression "*(code **)(*piVar1 + 0xe8)" * (cast_expression "(code **)(*piVar1 + 0xe8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0xe8)" ( (binary_expression "*piVar1 + 0xe8" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }) (else_clause "else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" else (compound_statement "{\n    cVar3 = (*pcVar2)(piVar1);\n  }" { (expression_statement "cVar3 = (*pcVar2)(piVar1);" (assignment_expression "cVar3 = (*pcVar2)(piVar1)" identifier = (call_expression "(*pcVar2)(piVar1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_0005d520();\n    return;\n  }" { (expression_statement "FUN_0005d520();" (call_expression "FUN_0005d520()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0005dd30();" (call_expression "FUN_0005dd30()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })))
(function_definition "void FUN_000591e0(int param_1)\n\n{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000591e0(int param_1)" (identifier "FUN_000591e0") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int *piVar1;\n  code *pcVar2;\n  char cVar3;\n  \n  piVar1 = *(int **)(param_1 + 8);\n  pcVar2 = *(code **)(*piVar1 + 0xc);\n  if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }\n  if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }\n  FUN_0005dd30();\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "code *pcVar2;" (type_identifier "code") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (expression_statement "piVar1 = *(int **)(param_1 + 8);" (assignment_expression "piVar1 = *(int **)(param_1 + 8)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(param_1 + 8)" (* "*") (cast_expression "(int **)(param_1 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "pcVar2 = *(code **)(*piVar1 + 0xc);" (assignment_expression "pcVar2 = *(code **)(*piVar1 + 0xc)" (identifier "pcVar2") (= "=") (pointer_expression "*(code **)(*piVar1 + 0xc)" (* "*") (cast_expression "(code **)(*piVar1 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0xc)" (( "(") (binary_expression "*piVar1 + 0xc" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (pcVar2 == FUN_0003a350) {\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }\n  else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" (if "if") (parenthesized_expression "(pcVar2 == FUN_0003a350)" (( "(") (binary_expression "pcVar2 == FUN_0003a350" (identifier "pcVar2") (== "==") (identifier "FUN_0003a350")) () ")")) (compound_statement "{\n    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);\n  }" ({ "{") (expression_statement "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);" (assignment_expression "cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1)" (identifier "cVar3") (= "=") (call_expression "(**(code **)(*piVar1 + 0xe8))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0xe8))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0xe8)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0xe8)" (* "*") (cast_expression "(code **)(*piVar1 + 0xe8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0xe8)" (( "(") (binary_expression "*piVar1 + 0xe8" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0xe8")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    cVar3 = (*pcVar2)(piVar1);\n  }" (else "else") (compound_statement "{\n    cVar3 = (*pcVar2)(piVar1);\n  }" ({ "{") (expression_statement "cVar3 = (*pcVar2)(piVar1);" (assignment_expression "cVar3 = (*pcVar2)(piVar1)" (identifier "cVar3") (= "=") (call_expression "(*pcVar2)(piVar1)" (parenthesized_expression "(*pcVar2)" (( "(") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (} "}")))) (if_statement "if (cVar3 != '\0') {\n    FUN_0005d520();\n    return;\n  }" (if "if") (parenthesized_expression "(cVar3 != '\0')" (( "(") (binary_expression "cVar3 != '\0'" (identifier "cVar3") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    FUN_0005d520();\n    return;\n  }" ({ "{") (expression_statement "FUN_0005d520();" (call_expression "FUN_0005d520()" (identifier "FUN_0005d520") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_0005dd30();" (call_expression "FUN_0005dd30()" (identifier "FUN_0005dd30") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* DWARF original prototype: void parse(Dwarf_info_reader * this) */

void __thiscall gold::type_1::function_1(type_1 *this)

{
  type_2 *pRVar1;
  type_3 **pp_Var2;
  type_3 *var_1;
  char var_2;
  int iVar5;
  
  pRVar1 = this->object_;
  pp_Var2 = (pRVar1->super_Object)._vptr_Object;
  var_1 = pp_Var2[3];
  if (var_1 == type_2::is_big_endian) {
    iVar5 = (*pp_Var2[0x3a])(pRVar1);
    var_2 = (char)iVar5;
  }
  else {
    iVar5 = (*var_1)(pRVar1);
    var_2 = (char)iVar5;
  }
  if (var_2 != '\0') {
    var_3<true>(this);
    return;
  }
  var_3<false>(this);
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void MASKED(int param_1)

{
  int *piVar1;
  code *pcVar2;
  char cVar3;
  
  piVar1 = *(int **)(param_1 + 8);
  pcVar2 = *(code **)(*piVar1 + 0xc);
  if (pcVar2 == FUN_0003a350) {
    cVar3 = (**(code **)(*piVar1 + 0xe8))(piVar1);
  }
  else {
    cVar3 = (*pcVar2)(piVar1);
  }
  if (cVar3 != '\0') {
    FUN_0005d520();
    return;
  }
  FUN_0005dd30();
  return;
}

