
/* DWARF original prototype: bool verify_dwo_list(Dwo_file * this, uint shndx, File_list * files) */

bool __thiscall gold::Dwo_file::verify_dwo_list(Dwo_file *this,uint shndx,File_list *files)

{
  _func_int_varargs **pp_Var1;
  _func_int_varargs *p_Var2;
  char cVar3;
  bool bVar4;
  int iVar5;
  
  pp_Var1 = (this->obj_->super_Object)._vptr_Object;
  p_Var2 = pp_Var1[3];
  if (p_Var2 == Relobj::is_big_endian) {
    iVar5 = (*pp_Var1[0x3a])();
    cVar3 = (char)iVar5;
  }
  else {
    iVar5 = (*p_Var2)();
    cVar3 = (char)iVar5;
  }
  if (cVar3 != '\0') {
    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);
    return bVar4;
  }
  bVar4 = sized_verify_dwo_list<false>(this,shndx,files);
  return bVar4;
}



void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)

{
  code *pcVar1;
  char cVar2;
  
  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);
  if (pcVar1 == FUN_00155110) {
    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();
  }
  else {
    cVar2 = (*pcVar1)();
  }
  if (cVar2 != '\0') {
    FUN_0015ffb0();
    return;
  }
  FUN_00160240(param_1,param_2,param_3);
  return;
}


PUSH R12
MOV R12,RDX
LEA RDX,[0x155110]
PUSH RBP
MOV EBP,ESI
PUSH RBX
MOV RBX,RDI
MOV RDI,qword ptr [RDI + 0x8]
MOV RAX,qword ptr [RDI]
MOV RCX,qword ptr [RAX + 0x18]
CMP RCX,RDX
JNZ 0x00152140
CALL qword ptr [RAX + 0x1d0]
MOV RDX,R12
MOV ESI,EBP
MOV RDI,RBX
TEST AL,AL
JZ 0x00152130
POP RBX
POP RBP
POP R12
JMP 0x0015ffb0
POP RBX
POP RBP
POP R12
JMP 0x00160240
CALL RCX
JMP 0x00152119
(translation_unit "void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)\n\n{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}\n\n" (function_definition "void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)\n\n{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" primitive_type (function_declarator "FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)" identifier (parameter_list "(long param_1,undefined4 param_2,undefined8 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (expression_statement "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);" (assignment_expression "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18)" identifier = (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x18)" * (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 8) + 0x18)" ( (binary_expression "**(long **)(param_1 + 8) + 0x18" (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }" if (parenthesized_expression "(pcVar1 == FUN_00155110)" ( (binary_expression "pcVar1 == FUN_00155110" identifier == identifier) )) (compound_statement "{\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }" { (expression_statement "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();" (assignment_expression "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 8) + 0x1d0)" * (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x1d0)" * (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x1d0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 8) + 0x1d0)" ( (binary_expression "**(long **)(param_1 + 8) + 0x1d0" (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) }) (else_clause "else {\n    cVar2 = (*pcVar1)();\n  }" else (compound_statement "{\n    cVar2 = (*pcVar1)();\n  }" { (expression_statement "cVar2 = (*pcVar1)();" (assignment_expression "cVar2 = (*pcVar1)()" identifier = (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "()" ( )))) ;) }))) (if_statement "if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_0015ffb0();\n    return;\n  }" { (expression_statement "FUN_0015ffb0();" (call_expression "FUN_0015ffb0()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_00160240(param_1,param_2,param_3);" (call_expression "FUN_00160240(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: bool verify_dwo_list(Dwo_file * this, uint shndx, File_list * files) */\n\nbool __thiscall gold::Dwo_file::verify_dwo_list(Dwo_file *this,uint shndx,File_list *files)\n\n{\n  _func_int_varargs **pp_Var1;\n  _func_int_varargs *p_Var2;\n  char cVar3;\n  bool bVar4;\n  int iVar5;\n  \n  pp_Var1 = (this->obj_->super_Object)._vptr_Object;\n  p_Var2 = pp_Var1[3];\n  if (p_Var2 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var1[0x3a])();\n    cVar3 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }\n  if (cVar3 != '\0') {\n    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);\n    return bVar4;\n  }\n  bVar4 = sized_verify_dwo_list<false>(this,shndx,files);\n  return bVar4;\n}\n\n" comment (function_definition "bool __thiscall gold::Dwo_file::verify_dwo_list(Dwo_file *this,uint shndx,File_list *files)\n\n{\n  _func_int_varargs **pp_Var1;\n  _func_int_varargs *p_Var2;\n  char cVar3;\n  bool bVar4;\n  int iVar5;\n  \n  pp_Var1 = (this->obj_->super_Object)._vptr_Object;\n  p_Var2 = pp_Var1[3];\n  if (p_Var2 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var1[0x3a])();\n    cVar3 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }\n  if (cVar3 != '\0') {\n    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);\n    return bVar4;\n  }\n  bVar4 = sized_verify_dwo_list<false>(this,shndx,files);\n  return bVar4;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwo_file::" identifier : : identifier : :) (function_declarator "verify_dwo_list(Dwo_file *this,uint shndx,File_list *files)" identifier (parameter_list "(Dwo_file *this,uint shndx,File_list *files)" ( (parameter_declaration "Dwo_file *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint shndx" type_identifier identifier) , (parameter_declaration "File_list *files" type_identifier (pointer_declarator "*files" * identifier)) ))) (compound_statement "{\n  _func_int_varargs **pp_Var1;\n  _func_int_varargs *p_Var2;\n  char cVar3;\n  bool bVar4;\n  int iVar5;\n  \n  pp_Var1 = (this->obj_->super_Object)._vptr_Object;\n  p_Var2 = pp_Var1[3];\n  if (p_Var2 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var1[0x3a])();\n    cVar3 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }\n  if (cVar3 != '\0') {\n    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);\n    return bVar4;\n  }\n  bVar4 = sized_verify_dwo_list<false>(this,shndx,files);\n  return bVar4;\n}" { (declaration "_func_int_varargs **pp_Var1;" type_identifier (pointer_declarator "**pp_Var1" * (pointer_declarator "*pp_Var1" * identifier)) ;) (declaration "_func_int_varargs *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "pp_Var1 = (this->obj_->super_Object)._vptr_Object;" (assignment_expression "pp_Var1 = (this->obj_->super_Object)._vptr_Object" identifier = (field_expression "(this->obj_->super_Object)._vptr_Object" (parenthesized_expression "(this->obj_->super_Object)" ( (field_expression "this->obj_->super_Object" (field_expression "this->obj_" identifier -> field_identifier) -> field_identifier) )) . field_identifier)) ;) (expression_statement "p_Var2 = pp_Var1[3];" (assignment_expression "p_Var2 = pp_Var1[3]" identifier = (subscript_expression "pp_Var1[3]" identifier [ number_literal ])) ;) (if_statement "if (p_Var2 == Relobj::is_big_endian) {\n    iVar5 = (*pp_Var1[0x3a])();\n    cVar3 = (char)iVar5;\n  }\n  else {\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }" if (parenthesized_expression "(p_Var2 == Relobj::is_big_endian)" ( (binary_expression "p_Var2 == Relobj" identifier == identifier) (ERROR "::is_big_endian" : : identifier) )) (compound_statement "{\n    iVar5 = (*pp_Var1[0x3a])();\n    cVar3 = (char)iVar5;\n  }" { (expression_statement "iVar5 = (*pp_Var1[0x3a])();" (assignment_expression "iVar5 = (*pp_Var1[0x3a])()" identifier = (call_expression "(*pp_Var1[0x3a])()" (parenthesized_expression "(*pp_Var1[0x3a])" ( (pointer_expression "*pp_Var1[0x3a]" * (subscript_expression "pp_Var1[0x3a]" identifier [ number_literal ])) )) (argument_list "()" ( )))) ;) (expression_statement "cVar3 = (char)iVar5;" (assignment_expression "cVar3 = (char)iVar5" identifier = (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) }) (else_clause "else {\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }" else (compound_statement "{\n    iVar5 = (*p_Var2)();\n    cVar3 = (char)iVar5;\n  }" { (expression_statement "iVar5 = (*p_Var2)();" (assignment_expression "iVar5 = (*p_Var2)()" identifier = (call_expression "(*p_Var2)()" (parenthesized_expression "(*p_Var2)" ( (pointer_expression "*p_Var2" * identifier) )) (argument_list "()" ( )))) ;) (expression_statement "cVar3 = (char)iVar5;" (assignment_expression "cVar3 = (char)iVar5" identifier = (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) }))) (if_statement "if (cVar3 != '\0') {\n    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);\n    return bVar4;\n  }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    bVar4 = sized_verify_dwo_list<true>(this,shndx,files);\n    return bVar4;\n  }" { (expression_statement "bVar4 = sized_verify_dwo_list<true>(this,shndx,files);" (assignment_expression "bVar4 = sized_verify_dwo_list<true>(this,shndx,files)" identifier = (binary_expression "sized_verify_dwo_list<true>(this,shndx,files)" (binary_expression "sized_verify_dwo_list<true" identifier < true) > (parenthesized_expression "(this,shndx,files)" ( (comma_expression "this,shndx,files" identifier , (comma_expression "shndx,files" identifier , identifier)) )))) ;) (return_statement "return bVar4;" return identifier ;) })) (expression_statement "bVar4 = sized_verify_dwo_list<false>(this,shndx,files);" (assignment_expression "bVar4 = sized_verify_dwo_list<false>(this,shndx,files)" identifier = (binary_expression "sized_verify_dwo_list<false>(this,shndx,files)" (binary_expression "sized_verify_dwo_list<false" identifier < false) > (parenthesized_expression "(this,shndx,files)" ( (comma_expression "this,shndx,files" identifier , (comma_expression "shndx,files" identifier , identifier)) )))) ;) (return_statement "return bVar4;" return identifier ;) })))
(translation_unit "void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)\n\n{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}\n\n" (function_definition "void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)\n\n{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" primitive_type (function_declarator "FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)" identifier (parameter_list "(long param_1,undefined4 param_2,undefined8 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (expression_statement "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);" (assignment_expression "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18)" identifier = (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x18)" * (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 8) + 0x18)" ( (binary_expression "**(long **)(param_1 + 8) + 0x18" (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }" if (parenthesized_expression "(pcVar1 == FUN_00155110)" ( (binary_expression "pcVar1 == FUN_00155110" identifier == identifier) )) (compound_statement "{\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }" { (expression_statement "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();" (assignment_expression "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 8) + 0x1d0)" * (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x1d0)" * (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x1d0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 8) + 0x1d0)" ( (binary_expression "**(long **)(param_1 + 8) + 0x1d0" (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) }) (else_clause "else {\n    cVar2 = (*pcVar1)();\n  }" else (compound_statement "{\n    cVar2 = (*pcVar1)();\n  }" { (expression_statement "cVar2 = (*pcVar1)();" (assignment_expression "cVar2 = (*pcVar1)()" identifier = (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "()" ( )))) ;) }))) (if_statement "if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    FUN_0015ffb0();\n    return;\n  }" { (expression_statement "FUN_0015ffb0();" (call_expression "FUN_0015ffb0()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_00160240(param_1,param_2,param_3);" (call_expression "FUN_00160240(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (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 (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + 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 * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( )))) ;) }))) (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 ( IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)\n\n{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001520f0(long param_1,undefined4 param_2,undefined8 param_3)" (identifier "FUN_001520f0") (parameter_list "(long param_1,undefined4 param_2,undefined8 param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  code *pcVar1;\n  char cVar2;\n  \n  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);\n  if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }\n  if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }\n  FUN_00160240(param_1,param_2,param_3);\n  return;\n}" ({ "{") (declaration "code *pcVar1;" (type_identifier "code") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (expression_statement "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);" (assignment_expression "pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18)" (identifier "pcVar1") (= "=") (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x18)" (* "*") (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(param_1 + 8) + 0x18)" (( "(") (binary_expression "**(long **)(param_1 + 8) + 0x18" (pointer_expression "**(long **)(param_1 + 8)" (* "*") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (pcVar1 == FUN_00155110) {\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }\n  else {\n    cVar2 = (*pcVar1)();\n  }" (if "if") (parenthesized_expression "(pcVar1 == FUN_00155110)" (( "(") (binary_expression "pcVar1 == FUN_00155110" (identifier "pcVar1") (== "==") (identifier "FUN_00155110")) () ")")) (compound_statement "{\n    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();\n  }" ({ "{") (expression_statement "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();" (assignment_expression "cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" (identifier "cVar2") (= "=") (call_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 8) + 0x1d0))" (( "(") (pointer_expression "**(code **)(**(long **)(param_1 + 8) + 0x1d0)" (* "*") (pointer_expression "*(code **)(**(long **)(param_1 + 8) + 0x1d0)" (* "*") (cast_expression "(code **)(**(long **)(param_1 + 8) + 0x1d0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(param_1 + 8) + 0x1d0)" (( "(") (binary_expression "**(long **)(param_1 + 8) + 0x1d0" (pointer_expression "**(long **)(param_1 + 8)" (* "*") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (+ "+") (number_literal "0x1d0")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    cVar2 = (*pcVar1)();\n  }" (else "else") (compound_statement "{\n    cVar2 = (*pcVar1)();\n  }" ({ "{") (expression_statement "cVar2 = (*pcVar1)();" (assignment_expression "cVar2 = (*pcVar1)()" (identifier "cVar2") (= "=") (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" (( "(") (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")))) (if_statement "if (cVar2 != '\0') {\n    FUN_0015ffb0();\n    return;\n  }" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    FUN_0015ffb0();\n    return;\n  }" ({ "{") (expression_statement "FUN_0015ffb0();" (call_expression "FUN_0015ffb0()" (identifier "FUN_0015ffb0") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_00160240(param_1,param_2,param_3);" (call_expression "FUN_00160240(param_1,param_2,param_3)" (identifier "FUN_00160240") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: bool verify_dwo_list(Dwo_file * this, uint shndx, File_list * files) */

bool __thiscall gold::type_1::function_1(type_1 *this,type_2 shndx,type_3 *files)

{
  type_4 **pp_Var1;
  type_4 *var_1;
  char var_3;
  bool bVar4;
  int iVar5;
  
  pp_Var1 = (this->obj_->super_Object)._vptr_Object;
  var_1 = pp_Var1[3];
  if (var_1 == var_2::is_big_endian) {
    iVar5 = (*pp_Var1[0x3a])();
    var_3 = (char)iVar5;
  }
  else {
    iVar5 = (*var_1)();
    var_3 = (char)iVar5;
  }
  if (var_3 != '\0') {
    bVar4 = var_4<true>(this,shndx,files);
    return bVar4;
  }
  bVar4 = var_4<false>(this,shndx,files);
  return bVar4;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (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: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) 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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))))))) arguments: (argument_list))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list))))))) (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 (identifier) (identifier) (identifier)))) (return_statement))))

void MASKED(long param_1,undefined4 param_2,undefined8 param_3)

{
  code *pcVar1;
  char cVar2;
  
  pcVar1 = *(code **)(**(long **)(param_1 + 8) + 0x18);
  if (pcVar1 == FUN_00155110) {
    cVar2 = (**(code **)(**(long **)(param_1 + 8) + 0x1d0))();
  }
  else {
    cVar2 = (*pcVar1)();
  }
  if (cVar2 != '\0') {
    FUN_0015ffb0();
    return;
  }
  FUN_00160240(param_1,param_2,param_3);
  return;
}

