
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void include_member(Lib_group * this, Symbol_table * symtab, Layout *
   layout, Input_objects * input_objects, Archive_member * member) */

void __thiscall
gold::Lib_group::include_member
          (Lib_group *this,Symbol_table *symtab,Layout *layout,Input_objects *input_objects,
          Archive_member *member)

{
  Object *obj;
  Read_symbols_data *this_00;
  bool bVar1;
  int iVar2;
  undefined4 extraout_var;
  Object *pOVar4;
  long *plVar3;
  
  obj = member->obj_;
  total_members_loaded = total_members_loaded + 1;
  if (obj == (Object *)0x0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");
  }
  iVar2 = (*obj->_vptr_Object[5])(obj);
  plVar3 = (long *)CONCAT44(extraout_var,iVar2);
  if (plVar3 != (long *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));
    return;
  }
  this_00 = member->sd_;
  if (this_00 == (Read_symbols_data *)0x0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");
  }
  if (obj->input_file_ != (Input_file *)0x0) {
    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);
  }
  pOVar4 = obj;
  bVar1 = Input_objects::add_object(input_objects,obj);
  iVar2 = (int)pOVar4;
  if (bVar1) {
    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {
      Incremental_inputs::report_object
                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,
                 (Script_info *)0x0);
    }
    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);
    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);
    iVar2 = (int)symtab;
  }
  Read_symbols_data::~Read_symbols_data(this_00,iVar2);
  operator_delete(this_00,0x80);
  if (obj->input_file_ != (Input_file *)0x0) {
    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);
    return;
  }
  return;
}



void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)

{
  long *plVar1;
  long lVar2;
  char cVar3;
  long *plVar4;
  
  plVar1 = (long *)*param_5;
  DAT_0045c978 = DAT_0045c978 + 1;
  if (plVar1 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");
  }
  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);
  if (plVar4 != (long *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));
    return;
  }
  lVar2 = param_5[1];
  if (lVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");
  }
  if (plVar1[5] != 0) {
    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));
  }
  cVar3 = FUN_001d2ce0(param_4,plVar1);
  if (cVar3 != '\0') {
    if (*(long *)(param_3 + 0x378) != 0) {
      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);
    }
    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);
    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);
  }
  FUN_001d18f0(lVar2);
  thunk_FUN_002f1e60(lVar2,0x80);
  if (plVar1[5] != 0) {
    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));
    return;
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV R15,qword ptr [R8]
ADD dword ptr [0x0045c978],0x1
MOV qword ptr [RSP + 0x8],RCX
TEST R15,R15
JZ 0x0017a5bf
MOV RAX,qword ptr [R15]
MOV R14,RDI
MOV R13,RSI
MOV R12,RDX
MOV RBX,R8
MOV RDI,R15
CALL qword ptr [RAX + 0x28]
TEST RAX,RAX
JZ 0x0017a4f8
MOV RDX,qword ptr [RAX]
MOV RCX,R12
MOV RSI,R13
MOV RDI,RAX
MOV R8,qword ptr [RDX + 0x50]
ADD RSP,0x18
XOR EDX,EDX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP R8
MOV RBP,qword ptr [RBX + 0x8]
TEST RBP,RBP
JZ 0x0017a5d7
MOV RDI,qword ptr [R15 + 0x28]
TEST RDI,RDI
JZ 0x0017a51b
MOV RSI,qword ptr [R14 + 0x8]
ADD RDI,0x28
CALL 0x00189060
MOV RDI,qword ptr [RSP + 0x8]
MOV RSI,R15
CALL 0x001d2ce0
TEST AL,AL
JZ 0x0017a56e
MOV RDI,qword ptr [R12 + 0x378]
TEST RDI,RDI
JZ 0x0017a54a
MOV EDX,dword ptr [RBX + 0x10]
XOR R8D,R8D
MOV RCX,R14
MOV RSI,R15
CALL 0x00197190
MOV RAX,qword ptr [R15]
MOV RCX,RBP
MOV RDX,R12
MOV RSI,R13
MOV RDI,R15
CALL qword ptr [RAX + 0x48]
MOV RAX,qword ptr [R15]
MOV RCX,R12
MOV RDX,RBP
MOV RSI,R13
MOV RDI,R15
CALL qword ptr [RAX + 0x50]
MOV RDI,RBP
CALL 0x001d18f0
MOV RDI,RBP
MOV ESI,0x80
CALL 0x002f1e50
MOV RDI,qword ptr [R15 + 0x28]
TEST RDI,RDI
JZ 0x0017a5b0
MOV RSI,qword ptr [R14 + 0x8]
ADD RSP,0x18
ADD RDI,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP 0x00189c20
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RDX,[0x38bd60]
MOV ESI,0x4f8
LEA RDI,[0x38ba31]
CALL 0x0018ff20
LEA RDX,[0x38bd60]
MOV ESI,0x502
LEA RDI,[0x38ba31]
CALL 0x0018ff20
(translation_unit "void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)\n\n{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)\n\n{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" identifier (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "plVar1 = (long *)*param_5;" (assignment_expression "plVar1 = (long *)*param_5" identifier = (cast_expression "(long *)*param_5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_5" * identifier))) ;) (expression_statement "DAT_0045c978 = DAT_0045c978 + 1;" (assignment_expression "DAT_0045c978 = DAT_0045c978 + 1" identifier = (binary_expression "DAT_0045c978 + 1" identifier + number_literal)) ;) (if_statement "if (plVar1 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" { comment (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x4f8,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (expression_statement "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);" (assignment_expression "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1)" identifier = (cast_expression "(long *)(**(code **)(*plVar1 + 0x28))(plVar1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar1 + 0x28))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x28))" ( (pointer_expression "**(code **)(*plVar1 + 0x28)" * (pointer_expression "*(code **)(*plVar1 + 0x28)" * (cast_expression "(code **)(*plVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x28)" ( (binary_expression "*plVar1 + 0x28" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier ))))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" { comment comment (expression_statement "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));" (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" ( (pointer_expression "**(code **)(*plVar4 + 0x50)" * (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" ( identifier , identifier , number_literal , identifier , (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) )))) ))) ;) (return_statement "return;" return ;) })) (expression_statement "lVar2 = param_5[1];" (assignment_expression "lVar2 = param_5[1]" identifier = (subscript_expression "param_5[1]" identifier [ number_literal ])) ;) (if_statement "if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" { comment (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x502,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" if (parenthesized_expression "(plVar1[5] != 0)" ( (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" { (expression_statement "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" identifier [ number_literal ]) + number_literal) , (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) })) (expression_statement "cVar3 = FUN_001d2ce0(param_4,plVar1);" (assignment_expression "cVar3 = FUN_001d2ce0(param_4,plVar1)" identifier = (call_expression "FUN_001d2ce0(param_4,plVar1)" identifier (argument_list "(param_4,plVar1)" ( identifier , identifier )))) ;) (if_statement "if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" { (if_statement "if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" if (parenthesized_expression "(*(long *)(param_3 + 0x378) != 0)" ( (binary_expression "*(long *)(param_3 + 0x378) != 0" (pointer_expression "*(long *)(param_3 + 0x378)" * (cast_expression "(long *)(param_3 + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x378)" ( (binary_expression "param_3 + 0x378" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" { (expression_statement "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);" (call_expression "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" identifier (argument_list "(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" ( (pointer_expression "*(long *)(param_3 + 0x378)" * (cast_expression "(long *)(param_3 + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x378)" ( (binary_expression "param_3 + 0x378" identifier + number_literal) )))) , identifier , (cast_expression "(int)param_5[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_5[2]" identifier [ number_literal ])) , identifier , number_literal ))) ;) })) (expression_statement "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);" (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_2,param_3,lVar2)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);" (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_2,lVar2,param_3)" ( identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "FUN_001d18f0(lVar2);" (call_expression "FUN_001d18f0(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) (expression_statement "thunk_FUN_002f1e60(lVar2,0x80);" (call_expression "thunk_FUN_002f1e60(lVar2,0x80)" identifier (argument_list "(lVar2,0x80)" ( identifier , number_literal ))) ;) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" if (parenthesized_expression "(plVar1[5] != 0)" ( (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" { (expression_statement "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" identifier [ number_literal ]) + number_literal) , (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void include_member(Lib_group * this, Symbol_table * symtab, Layout *\n   layout, Input_objects * input_objects, Archive_member * member) */\n\nvoid __thiscall\ngold::Lib_group::include_member\n          (Lib_group *this,Symbol_table *symtab,Layout *layout,Input_objects *input_objects,\n          Archive_member *member)\n\n{\n  Object *obj;\n  Read_symbols_data *this_00;\n  bool bVar1;\n  int iVar2;\n  undefined4 extraout_var;\n  Object *pOVar4;\n  long *plVar3;\n  \n  obj = member->obj_;\n  total_members_loaded = total_members_loaded + 1;\n  if (obj == (Object *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  iVar2 = (*obj->_vptr_Object[5])(obj);\n  plVar3 = (long *)CONCAT44(extraout_var,iVar2);\n  if (plVar3 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));\n    return;\n  }\n  this_00 = member->sd_;\n  if (this_00 == (Read_symbols_data *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);\n  }\n  pOVar4 = obj;\n  bVar1 = Input_objects::add_object(input_objects,obj);\n  iVar2 = (int)pOVar4;\n  if (bVar1) {\n    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }\n    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);\n    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);\n    iVar2 = (int)symtab;\n  }\n  Read_symbols_data::~Read_symbols_data(this_00,iVar2);\n  operator_delete(this_00,0x80);\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);\n    return;\n  }\n  return;\n}\n\n" comment comment (function_definition "void __thiscall\ngold::Lib_group::include_member\n          (Lib_group *this,Symbol_table *symtab,Layout *layout,Input_objects *input_objects,\n          Archive_member *member)\n\n{\n  Object *obj;\n  Read_symbols_data *this_00;\n  bool bVar1;\n  int iVar2;\n  undefined4 extraout_var;\n  Object *pOVar4;\n  long *plVar3;\n  \n  obj = member->obj_;\n  total_members_loaded = total_members_loaded + 1;\n  if (obj == (Object *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  iVar2 = (*obj->_vptr_Object[5])(obj);\n  plVar3 = (long *)CONCAT44(extraout_var,iVar2);\n  if (plVar3 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));\n    return;\n  }\n  this_00 = member->sd_;\n  if (this_00 == (Read_symbols_data *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);\n  }\n  pOVar4 = obj;\n  bVar1 = Input_objects::add_object(input_objects,obj);\n  iVar2 = (int)pOVar4;\n  if (bVar1) {\n    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }\n    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);\n    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);\n    iVar2 = (int)symtab;\n  }\n  Read_symbols_data::~Read_symbols_data(this_00,iVar2);\n  operator_delete(this_00,0x80);\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);\n    return;\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Lib_group::" identifier : : identifier : :) (function_declarator "include_member\n          (Lib_group *this,Symbol_table *symtab,Layout *layout,Input_objects *input_objects,\n          Archive_member *member)" identifier (parameter_list "(Lib_group *this,Symbol_table *symtab,Layout *layout,Input_objects *input_objects,\n          Archive_member *member)" ( (parameter_declaration "Lib_group *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol_table *symtab" type_identifier (pointer_declarator "*symtab" * identifier)) , (parameter_declaration "Layout *layout" type_identifier (pointer_declarator "*layout" * identifier)) , (parameter_declaration "Input_objects *input_objects" type_identifier (pointer_declarator "*input_objects" * identifier)) , (parameter_declaration "Archive_member *member" type_identifier (pointer_declarator "*member" * identifier)) ))) (compound_statement "{\n  Object *obj;\n  Read_symbols_data *this_00;\n  bool bVar1;\n  int iVar2;\n  undefined4 extraout_var;\n  Object *pOVar4;\n  long *plVar3;\n  \n  obj = member->obj_;\n  total_members_loaded = total_members_loaded + 1;\n  if (obj == (Object *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  iVar2 = (*obj->_vptr_Object[5])(obj);\n  plVar3 = (long *)CONCAT44(extraout_var,iVar2);\n  if (plVar3 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));\n    return;\n  }\n  this_00 = member->sd_;\n  if (this_00 == (Read_symbols_data *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);\n  }\n  pOVar4 = obj;\n  bVar1 = Input_objects::add_object(input_objects,obj);\n  iVar2 = (int)pOVar4;\n  if (bVar1) {\n    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }\n    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);\n    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);\n    iVar2 = (int)symtab;\n  }\n  Read_symbols_data::~Read_symbols_data(this_00,iVar2);\n  operator_delete(this_00,0x80);\n  if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);\n    return;\n  }\n  return;\n}" { (declaration "Object *obj;" type_identifier (pointer_declarator "*obj" * identifier) ;) (declaration "Read_symbols_data *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "bool bVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "Object *pOVar4;" type_identifier (pointer_declarator "*pOVar4" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (expression_statement "obj = member->obj_;" (assignment_expression "obj = member->obj_" identifier = (field_expression "member->obj_" identifier -> field_identifier)) ;) (expression_statement "total_members_loaded = total_members_loaded + 1;" (assignment_expression "total_members_loaded = total_members_loaded + 1" identifier = (binary_expression "total_members_loaded + 1" identifier + number_literal)) ;) (if_statement "if (obj == (Object *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");\n  }" if (parenthesized_expression "(obj == (Object *)0x0)" ( (binary_expression "obj == (Object *)0x0" identifier == (cast_expression "(Object *)0x0" ( (type_descriptor "Object *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member");" (call_expression "do_gold_unreachable("../../gold/archive.cc",0x4f8,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x4f8,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (expression_statement "iVar2 = (*obj->_vptr_Object[5])(obj);" (assignment_expression "iVar2 = (*obj->_vptr_Object[5])(obj)" identifier = (call_expression "(*obj->_vptr_Object[5])(obj)" (parenthesized_expression "(*obj->_vptr_Object[5])" ( (pointer_expression "*obj->_vptr_Object[5]" * (subscript_expression "obj->_vptr_Object[5]" (field_expression "obj->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(obj)" ( identifier )))) ;) (expression_statement "plVar3 = (long *)CONCAT44(extraout_var,iVar2);" (assignment_expression "plVar3 = (long *)CONCAT44(extraout_var,iVar2)" identifier = (cast_expression "(long *)CONCAT44(extraout_var,iVar2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(extraout_var,iVar2)" identifier (argument_list "(extraout_var,iVar2)" ( identifier , identifier ))))) ;) (if_statement "if (plVar3 != (long *)0x0) {\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));\n    return;\n  }" if (parenthesized_expression "(plVar3 != (long *)0x0)" ( (binary_expression "plVar3 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    (**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));\n    return;\n  }" { comment comment (expression_statement "(**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50));" (call_expression "(**(code **)(*plVar3 + 0x50))(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50))" (parenthesized_expression "(**(code **)(*plVar3 + 0x50))" ( (pointer_expression "**(code **)(*plVar3 + 0x50)" * (pointer_expression "*(code **)(*plVar3 + 0x50)" * (cast_expression "(code **)(*plVar3 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar3 + 0x50)" ( (binary_expression "*plVar3 + 0x50" (pointer_expression "*plVar3" * identifier) + number_literal) ))))) )) (argument_list "(plVar3,symtab,0,layout,*(code **)(*plVar3 + 0x50))" ( identifier , identifier , number_literal , identifier , (pointer_expression "*(code **)(*plVar3 + 0x50)" * (cast_expression "(code **)(*plVar3 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar3 + 0x50)" ( (binary_expression "*plVar3 + 0x50" (pointer_expression "*plVar3" * identifier) + number_literal) )))) ))) ;) (return_statement "return;" return ;) })) (expression_statement "this_00 = member->sd_;" (assignment_expression "this_00 = member->sd_" identifier = (field_expression "member->sd_" identifier -> field_identifier)) ;) (if_statement "if (this_00 == (Read_symbols_data *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");\n  }" if (parenthesized_expression "(this_00 == (Read_symbols_data *)0x0)" ( (binary_expression "this_00 == (Read_symbols_data *)0x0" identifier == (cast_expression "(Read_symbols_data *)0x0" ( (type_descriptor "Read_symbols_data *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/archive.cc",0x502,"include_member");" (call_expression "do_gold_unreachable("../../gold/archive.cc",0x502,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x502,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (if_statement "if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);\n  }" if (parenthesized_expression "(obj->input_file_ != (Input_file *)0x0)" ( (binary_expression "obj->input_file_ != (Input_file *)0x0" (field_expression "obj->input_file_" identifier -> field_identifier) != (cast_expression "(Input_file *)0x0" ( (type_descriptor "Input_file *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);\n  }" { (labeled_statement "File_read::lock(&obj->input_file_->file_,(this->super_Library_base).task_);" statement_identifier : (ERROR ":" :) (expression_statement "lock(&obj->input_file_->file_,(this->super_Library_base).task_);" (call_expression "lock(&obj->input_file_->file_,(this->super_Library_base).task_)" identifier (argument_list "(&obj->input_file_->file_,(this->super_Library_base).task_)" ( (pointer_expression "&obj->input_file_->file_" & (field_expression "obj->input_file_->file_" (field_expression "obj->input_file_" identifier -> field_identifier) -> field_identifier)) , (field_expression "(this->super_Library_base).task_" (parenthesized_expression "(this->super_Library_base)" ( (field_expression "this->super_Library_base" identifier -> field_identifier) )) . field_identifier) ))) ;)) })) (expression_statement "pOVar4 = obj;" (assignment_expression "pOVar4 = obj" identifier = identifier) ;) (ERROR "bVar1 = Input_objects::" (assignment_expression "bVar1 = Input_objects" identifier = identifier) : :) (expression_statement "add_object(input_objects,obj);" (call_expression "add_object(input_objects,obj)" identifier (argument_list "(input_objects,obj)" ( identifier , identifier ))) ;) (expression_statement "iVar2 = (int)pOVar4;" (assignment_expression "iVar2 = (int)pOVar4" identifier = (cast_expression "(int)pOVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (bVar1) {\n    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }\n    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);\n    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);\n    iVar2 = (int)symtab;\n  }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n    if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }\n    (*obj->_vptr_Object[9])(obj,symtab,layout,this_00);\n    (*obj->_vptr_Object[10])(obj,symtab,this_00,layout);\n    iVar2 = (int)symtab;\n  }" { (if_statement "if (layout->incremental_inputs_ != (Incremental_inputs *)0x0) {\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }" if (parenthesized_expression "(layout->incremental_inputs_ != (Incremental_inputs *)0x0)" ( (binary_expression "layout->incremental_inputs_ != (Incremental_inputs *)0x0" (field_expression "layout->incremental_inputs_" identifier -> field_identifier) != (cast_expression "(Incremental_inputs *)0x0" ( (type_descriptor "Incremental_inputs *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);\n    }" { (labeled_statement "Incremental_inputs::report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);" statement_identifier : (ERROR ":" :) (expression_statement "report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0);" (call_expression "report_object\n                (layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0)" identifier (argument_list "(layout->incremental_inputs_,obj,member->arg_serial_,&this->super_Library_base,\n                 (Script_info *)0x0)" ( (field_expression "layout->incremental_inputs_" identifier -> field_identifier) , identifier , (field_expression "member->arg_serial_" identifier -> field_identifier) , (pointer_expression "&this->super_Library_base" & (field_expression "this->super_Library_base" identifier -> field_identifier)) , (cast_expression "(Script_info *)0x0" ( (type_descriptor "Script_info *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;)) })) (expression_statement "(*obj->_vptr_Object[9])(obj,symtab,layout,this_00);" (call_expression "(*obj->_vptr_Object[9])(obj,symtab,layout,this_00)" (parenthesized_expression "(*obj->_vptr_Object[9])" ( (pointer_expression "*obj->_vptr_Object[9]" * (subscript_expression "obj->_vptr_Object[9]" (field_expression "obj->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(obj,symtab,layout,this_00)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*obj->_vptr_Object[10])(obj,symtab,this_00,layout);" (call_expression "(*obj->_vptr_Object[10])(obj,symtab,this_00,layout)" (parenthesized_expression "(*obj->_vptr_Object[10])" ( (pointer_expression "*obj->_vptr_Object[10]" * (subscript_expression "obj->_vptr_Object[10]" (field_expression "obj->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(obj,symtab,this_00,layout)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = (int)symtab;" (assignment_expression "iVar2 = (int)symtab" identifier = (cast_expression "(int)symtab" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (labeled_statement "Read_symbols_data::~Read_symbols_data(this_00,iVar2);" statement_identifier : (ERROR ":" :) (expression_statement "~Read_symbols_data(this_00,iVar2);" (unary_expression "~Read_symbols_data(this_00,iVar2)" ~ (call_expression "Read_symbols_data(this_00,iVar2)" identifier (argument_list "(this_00,iVar2)" ( identifier , identifier )))) ;)) (expression_statement "operator_delete(this_00,0x80);" (call_expression "operator_delete(this_00,0x80)" identifier (argument_list "(this_00,0x80)" ( identifier , number_literal ))) ;) (if_statement "if (obj->input_file_ != (Input_file *)0x0) {\n    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);\n    return;\n  }" if (parenthesized_expression "(obj->input_file_ != (Input_file *)0x0)" ( (binary_expression "obj->input_file_ != (Input_file *)0x0" (field_expression "obj->input_file_" identifier -> field_identifier) != (cast_expression "(Input_file *)0x0" ( (type_descriptor "Input_file *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);\n    return;\n  }" { (labeled_statement "File_read::unlock(&obj->input_file_->file_,(this->super_Library_base).task_);" statement_identifier : (ERROR ":" :) (expression_statement "unlock(&obj->input_file_->file_,(this->super_Library_base).task_);" (call_expression "unlock(&obj->input_file_->file_,(this->super_Library_base).task_)" identifier (argument_list "(&obj->input_file_->file_,(this->super_Library_base).task_)" ( (pointer_expression "&obj->input_file_->file_" & (field_expression "obj->input_file_->file_" (field_expression "obj->input_file_" identifier -> field_identifier) -> field_identifier)) , (field_expression "(this->super_Library_base).task_" (parenthesized_expression "(this->super_Library_base)" ( (field_expression "this->super_Library_base" identifier -> field_identifier) )) . field_identifier) ))) ;)) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)\n\n{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)\n\n{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" identifier (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "plVar1 = (long *)*param_5;" (assignment_expression "plVar1 = (long *)*param_5" identifier = (cast_expression "(long *)*param_5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_5" * identifier))) ;) (expression_statement "DAT_0045c978 = DAT_0045c978 + 1;" (assignment_expression "DAT_0045c978 = DAT_0045c978 + 1" identifier = (binary_expression "DAT_0045c978 + 1" identifier + number_literal)) ;) (if_statement "if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" { (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x4f8,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (expression_statement "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);" (assignment_expression "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1)" identifier = (cast_expression "(long *)(**(code **)(*plVar1 + 0x28))(plVar1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar1 + 0x28))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x28))" ( (pointer_expression "**(code **)(*plVar1 + 0x28)" * (pointer_expression "*(code **)(*plVar1 + 0x28)" * (cast_expression "(code **)(*plVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x28)" ( (binary_expression "*plVar1 + 0x28" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier ))))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" { (expression_statement "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));" (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" ( (pointer_expression "**(code **)(*plVar4 + 0x50)" * (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" ( identifier , identifier , number_literal , identifier , (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) )))) ))) ;) (return_statement "return;" return ;) })) (expression_statement "lVar2 = param_5[1];" (assignment_expression "lVar2 = param_5[1]" identifier = (subscript_expression "param_5[1]" identifier [ number_literal ])) ;) (if_statement "if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" { (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member")" identifier (argument_list "("../../gold/archive.cc",0x502,"include_member")" ( (string_literal ""../../gold/archive.cc"" " string_content ") , number_literal , (string_literal ""include_member"" " string_content ") ))) ;) })) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" if (parenthesized_expression "(plVar1[5] != 0)" ( (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" { (expression_statement "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" identifier [ number_literal ]) + number_literal) , (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) })) (expression_statement "cVar3 = FUN_001d2ce0(param_4,plVar1);" (assignment_expression "cVar3 = FUN_001d2ce0(param_4,plVar1)" identifier = (call_expression "FUN_001d2ce0(param_4,plVar1)" identifier (argument_list "(param_4,plVar1)" ( identifier , identifier )))) ;) (if_statement "if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" { (if_statement "if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" if (parenthesized_expression "(*(long *)(param_3 + 0x378) != 0)" ( (binary_expression "*(long *)(param_3 + 0x378) != 0" (pointer_expression "*(long *)(param_3 + 0x378)" * (cast_expression "(long *)(param_3 + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x378)" ( (binary_expression "param_3 + 0x378" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" { (expression_statement "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);" (call_expression "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" identifier (argument_list "(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" ( (pointer_expression "*(long *)(param_3 + 0x378)" * (cast_expression "(long *)(param_3 + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x378)" ( (binary_expression "param_3 + 0x378" identifier + number_literal) )))) , identifier , (cast_expression "(int)param_5[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_5[2]" identifier [ number_literal ])) , identifier , number_literal ))) ;) })) (expression_statement "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);" (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_2,param_3,lVar2)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);" (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_2,lVar2,param_3)" ( identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "FUN_001d18f0(lVar2);" (call_expression "FUN_001d18f0(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) (expression_statement "thunk_FUN_002f1e60(lVar2,0x80);" (call_expression "thunk_FUN_002f1e60(lVar2,0x80)" identifier (argument_list "(lVar2,0x80)" ( identifier , number_literal ))) ;) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" if (parenthesized_expression "(plVar1[5] != 0)" ( (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" { (expression_statement "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" identifier [ number_literal ]) + number_literal) , (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) ))) ;) (return_statement "return;" return ;) })) (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 (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (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 ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (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 , IDENT , LIT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) , IDENT , LIT ))) ;) })) (expression_statement (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 , IDENT , IDENT , IDENT ))) ;) (expression_statement (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 , IDENT , IDENT , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)\n\n{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0017a490(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" (identifier "FUN_0017a490") (parameter_list "(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "long *param_5" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char cVar3;\n  long *plVar4;\n  \n  plVar1 = (long *)*param_5;\n  DAT_0045c978 = DAT_0045c978 + 1;\n  if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }\n  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);\n  if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }\n  lVar2 = param_5[1];\n  if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }\n  if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  cVar3 = FUN_001d2ce0(param_4,plVar1);\n  if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }\n  FUN_001d18f0(lVar2);\n  thunk_FUN_002f1e60(lVar2,0x80);\n  if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }\n  return;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (expression_statement "plVar1 = (long *)*param_5;" (assignment_expression "plVar1 = (long *)*param_5" (identifier "plVar1") (= "=") (cast_expression "(long *)*param_5" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_5" (* "*") (identifier "param_5")))) (; ";")) (expression_statement "DAT_0045c978 = DAT_0045c978 + 1;" (assignment_expression "DAT_0045c978 = DAT_0045c978 + 1" (identifier "DAT_0045c978") (= "=") (binary_expression "DAT_0045c978 + 1" (identifier "DAT_0045c978") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (plVar1 == (long *)0x0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" (if "if") (parenthesized_expression "(plVar1 == (long *)0x0)" (( "(") (binary_expression "plVar1 == (long *)0x0" (identifier "plVar1") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");\n  }" ({ "{") (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member")" (identifier "FUN_0018ff20") (argument_list "("../../gold/archive.cc",0x4f8,"include_member")" (( "(") (string_literal ""../../gold/archive.cc"" (" """) (string_content "../../gold/archive.cc") (" """)) (, ",") (number_literal "0x4f8") (, ",") (string_literal ""include_member"" (" """) (string_content "include_member") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);" (assignment_expression "plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1)" (identifier "plVar4") (= "=") (cast_expression "(long *)(**(code **)(*plVar1 + 0x28))(plVar1)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(*plVar1 + 0x28))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x28)" (* "*") (cast_expression "(code **)(*plVar1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x28)" (( "(") (binary_expression "*plVar1 + 0x28" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")"))))) (; ";")) (if_statement "if (plVar4 != (long *)0x0) {\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" (if "if") (parenthesized_expression "(plVar4 != (long *)0x0)" (( "(") (binary_expression "plVar4 != (long *)0x0" (identifier "plVar4") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n                    \n    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));\n    return;\n  }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));" (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x50)" (* "*") (cast_expression "(code **)(*plVar4 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x50)" (( "(") (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50))" (( "(") (identifier "plVar4") (, ",") (identifier "param_2") (, ",") (number_literal "0") (, ",") (identifier "param_3") (, ",") (pointer_expression "*(code **)(*plVar4 + 0x50)" (* "*") (cast_expression "(code **)(*plVar4 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x50)" (( "(") (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x50")) () ")")))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "lVar2 = param_5[1];" (assignment_expression "lVar2 = param_5[1]" (identifier "lVar2") (= "=") (subscript_expression "param_5[1]" (identifier "param_5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (lVar2 == 0) {\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");\n  }" ({ "{") (expression_statement "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");" (call_expression "FUN_0018ff20("../../gold/archive.cc",0x502,"include_member")" (identifier "FUN_0018ff20") (argument_list "("../../gold/archive.cc",0x502,"include_member")" (( "(") (string_literal ""../../gold/archive.cc"" (" """) (string_content "../../gold/archive.cc") (" """)) (, ",") (number_literal "0x502") (, ",") (string_literal ""include_member"" (" """) (string_content "include_member") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" (if "if") (parenthesized_expression "(plVar1[5] != 0)" (( "(") (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" (identifier "plVar1") ([ "[") (number_literal "5") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n  }" ({ "{") (expression_statement "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" (identifier "FUN_00189060") (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" (( "(") (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" (identifier "plVar1") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "0x28")) (, ",") (pointer_expression "*(undefined8 *)(param_1 + 8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "cVar3 = FUN_001d2ce0(param_4,plVar1);" (assignment_expression "cVar3 = FUN_001d2ce0(param_4,plVar1)" (identifier "cVar3") (= "=") (call_expression "FUN_001d2ce0(param_4,plVar1)" (identifier "FUN_001d2ce0") (argument_list "(param_4,plVar1)" (( "(") (identifier "param_4") (, ",") (identifier "plVar1") () ")")))) (; ";")) (if_statement "if (cVar3 != '\0') {\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" (if "if") (parenthesized_expression "(cVar3 != '\0')" (( "(") (binary_expression "cVar3 != '\0'" (identifier "cVar3") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }\n    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);\n    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);\n  }" ({ "{") (if_statement "if (*(long *)(param_3 + 0x378) != 0) {\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" (if "if") (parenthesized_expression "(*(long *)(param_3 + 0x378) != 0)" (( "(") (binary_expression "*(long *)(param_3 + 0x378) != 0" (pointer_expression "*(long *)(param_3 + 0x378)" (* "*") (cast_expression "(long *)(param_3 + 0x378)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x378)" (( "(") (binary_expression "param_3 + 0x378" (identifier "param_3") (+ "+") (number_literal "0x378")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);\n    }" ({ "{") (expression_statement "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);" (call_expression "FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" (identifier "FUN_00197190") (argument_list "(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0)" (( "(") (pointer_expression "*(long *)(param_3 + 0x378)" (* "*") (cast_expression "(long *)(param_3 + 0x378)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x378)" (( "(") (binary_expression "param_3 + 0x378" (identifier "param_3") (+ "+") (number_literal "0x378")) () ")")))) (, ",") (identifier "plVar1") (, ",") (cast_expression "(int)param_5[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_5[2]" (identifier "param_5") ([ "[") (number_literal "2") (] "]"))) (, ",") (identifier "param_1") (, ",") (number_literal "0") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);" (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x48)" (* "*") (cast_expression "(code **)(*plVar1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x48)" (( "(") (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar1,param_2,param_3,lVar2)" (( "(") (identifier "plVar1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "lVar2") () ")"))) (; ";")) (expression_statement "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);" (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x50)" (* "*") (cast_expression "(code **)(*plVar1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x50)" (( "(") (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar1,param_2,lVar2,param_3)" (( "(") (identifier "plVar1") (, ",") (identifier "param_2") (, ",") (identifier "lVar2") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001d18f0(lVar2);" (call_expression "FUN_001d18f0(lVar2)" (identifier "FUN_001d18f0") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")"))) (; ";")) (expression_statement "thunk_FUN_002f1e60(lVar2,0x80);" (call_expression "thunk_FUN_002f1e60(lVar2,0x80)" (identifier "thunk_FUN_002f1e60") (argument_list "(lVar2,0x80)" (( "(") (identifier "lVar2") (, ",") (number_literal "0x80") () ")"))) (; ";")) (if_statement "if (plVar1[5] != 0) {\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" (if "if") (parenthesized_expression "(plVar1[5] != 0)" (( "(") (binary_expression "plVar1[5] != 0" (subscript_expression "plVar1[5]" (identifier "plVar1") ([ "[") (number_literal "5") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));\n    return;\n  }" ({ "{") (expression_statement "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" (identifier "FUN_00189c20") (argument_list "(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8))" (( "(") (binary_expression "plVar1[5] + 0x28" (subscript_expression "plVar1[5]" (identifier "plVar1") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "0x28")) (, ",") (pointer_expression "*(undefined8 *)(param_1 + 8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void include_member(Lib_group * this, Symbol_table * symtab, Layout *
   layout, Input_objects * input_objects, Archive_member * member) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *symtab,type_3 *layout,type_4 *input_objects,
          type_5 *member)

{
  type_6 *var_2;
  type_7 *var_6;
  bool bVar1;
  int iVar2;
  type_8 extraout_var;
  type_6 *pOVar4;
  long *var_5;
  
  var_2 = member->obj_;
  var_1 = var_1 + 1;
  if (var_2 == (type_6 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/archive.cc",0x4f8,"include_member");
  }
  iVar2 = (*var_2->_vptr_Object[5])(var_2);
  var_5 = (long *)var_4(extraout_var,iVar2);
  if (var_5 != (long *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(type_9 **)(*var_5 + 0x50))(var_5,symtab,0,layout,*(type_9 **)(*var_5 + 0x50));
    return;
  }
  var_6 = member->sd_;
  if (var_6 == (type_7 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/archive.cc",0x502,"include_member");
  }
  if (var_2->input_file_ != (type_10 *)0x0) {
    File_read::var_7(&var_2->input_file_->file_,(this->super_Library_base).task_);
  }
  pOVar4 = var_2;
  bVar1 = type_4::var_8(input_objects,var_2);
  iVar2 = (int)pOVar4;
  if (bVar1) {
    if (layout->incremental_inputs_ != (type_11 *)0x0) {
      Incremental_inputs::var_9
                (layout->incremental_inputs_,var_2,member->arg_serial_,&this->super_Library_base,
                 (type_12 *)0x0);
    }
    (*var_2->_vptr_Object[9])(var_2,symtab,layout,var_6);
    (*var_2->_vptr_Object[10])(var_2,symtab,var_6,layout);
    iVar2 = (int)symtab;
  }
  Read_symbols_data::~type_7(var_6,iVar2);
  var_10(var_6,0x80);
  if (var_2->input_file_ != (type_10 *)0x0) {
    File_read::var_11(&var_2->input_file_->file_,(this->super_Library_base).task_);
    return;
  }
  return;
}


(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: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (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)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (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) (identifier) (number_literal) (identifier) (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)))))))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) (identifier) (number_literal)))))) (expression_statement (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) (identifier) (identifier) (identifier)))) (expression_statement (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) (identifier) (identifier) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (return_statement))) (return_statement))))

void MASKED(long param_1,undefined8 param_2,long param_3,undefined8 param_4,long *param_5)

{
  long *plVar1;
  long lVar2;
  char cVar3;
  long *plVar4;
  
  plVar1 = (long *)*param_5;
  DAT_0045c978 = DAT_0045c978 + 1;
  if (plVar1 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018ff20("../../gold/archive.cc",0x4f8,"include_member");
  }
  plVar4 = (long *)(**(code **)(*plVar1 + 0x28))(plVar1);
  if (plVar4 != (long *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0017a4f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(code **)(*plVar4 + 0x50))(plVar4,param_2,0,param_3,*(code **)(*plVar4 + 0x50));
    return;
  }
  lVar2 = param_5[1];
  if (lVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018ff20("../../gold/archive.cc",0x502,"include_member");
  }
  if (plVar1[5] != 0) {
    FUN_00189060(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));
  }
  cVar3 = FUN_001d2ce0(param_4,plVar1);
  if (cVar3 != '\0') {
    if (*(long *)(param_3 + 0x378) != 0) {
      FUN_00197190(*(long *)(param_3 + 0x378),plVar1,(int)param_5[2],param_1,0);
    }
    (**(code **)(*plVar1 + 0x48))(plVar1,param_2,param_3,lVar2);
    (**(code **)(*plVar1 + 0x50))(plVar1,param_2,lVar2,param_3);
  }
  FUN_001d18f0(lVar2);
  thunk_FUN_002f1e60(lVar2,0x80);
  if (plVar1[5] != 0) {
    FUN_00189c20(plVar1[5] + 0x28,*(undefined8 *)(param_1 + 8));
    return;
  }
  return;
}

