
/* DWARF original prototype: void unlock_nested_archives(Archive * this) */

void __thiscall gold::Archive::unlock_nested_archives(Archive *this)

{
  _Hash_node_base *p_Var1;
  
  for (p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;
      p_Var1 != (_Hash_node_base *)0x0; p_Var1 = p_Var1->_M_nxt) {
    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_
                     );
  }
  return;
}



void FUN_001778b0(long param_1)

{
  undefined8 *puVar1;
  
  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;
      puVar1 = (undefined8 *)*puVar1) {
    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));
  }
  return;
}


PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBX,qword ptr [RDI + 0x140]
TEST RBX,RBX
JZ 0x001778e5
MOV RBP,RDI
NOP dword ptr [RAX]
MOV RAX,qword ptr [RBX + 0x28]
MOV RSI,qword ptr [RBP + 0x8]
MOV RDI,qword ptr [RAX + 0x38]
ADD RDI,0x28
CALL 0x001879f0
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x001778c8
ADD RSP,0x8
POP RBX
POP RBP
RET
(translation_unit "void FUN_001778b0(long param_1)\n\n{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}\n\n" (function_definition "void FUN_001778b0(long param_1)\n\n{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001778b0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (for_statement "for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" for ( (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x140)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x140)" * (cast_expression "(undefined8 **)(param_1 + 0x140)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) ))))) ; (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar1 = (undefined8 *)*puVar1" identifier = (cast_expression "(undefined8 *)*puVar1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) ) (compound_statement "{\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" { (expression_statement "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "*(long *)(puVar1[5] + 0x38) + 0x28" (pointer_expression "*(long *)(puVar1[5] + 0x38)" * (cast_expression "(long *)(puVar1[5] + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1[5] + 0x38)" ( (binary_expression "puVar1[5] + 0x38" (subscript_expression "puVar1[5]" identifier [ number_literal ]) + 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 ;) })))
(translation_unit "/* DWARF original prototype: void unlock_nested_archives(Archive * this) */\n\nvoid __thiscall gold::Archive::unlock_nested_archives(Archive *this)\n\n{\n  _Hash_node_base *p_Var1;\n  \n  for (p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;\n      p_Var1 != (_Hash_node_base *)0x0; p_Var1 = p_Var1->_M_nxt) {\n    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Archive::unlock_nested_archives(Archive *this)\n\n{\n  _Hash_node_base *p_Var1;\n  \n  for (p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;\n      p_Var1 != (_Hash_node_base *)0x0; p_Var1 = p_Var1->_M_nxt) {\n    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Archive::" identifier : : identifier : :) (function_declarator "unlock_nested_archives(Archive *this)" identifier (parameter_list "(Archive *this)" ( (parameter_declaration "Archive *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  _Hash_node_base *p_Var1;\n  \n  for (p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;\n      p_Var1 != (_Hash_node_base *)0x0; p_Var1 = p_Var1->_M_nxt) {\n    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );\n  }\n  return;\n}" { (declaration "_Hash_node_base *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (for_statement "for (p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;\n      p_Var1 != (_Hash_node_base *)0x0; p_Var1 = p_Var1->_M_nxt) {\n    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );\n  }" for ( (assignment_expression "p_Var1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt" identifier = (field_expression "(this->nested_archives_)._M_h._M_before_begin._M_nxt" (field_expression "(this->nested_archives_)._M_h._M_before_begin" (field_expression "(this->nested_archives_)._M_h" (parenthesized_expression "(this->nested_archives_)" ( (field_expression "this->nested_archives_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ; (binary_expression "p_Var1 != (_Hash_node_base *)0x0" identifier != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "p_Var1 = p_Var1->_M_nxt" identifier = (field_expression "p_Var1->_M_nxt" identifier -> field_identifier)) ) (compound_statement "{\n    File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );\n  }" { (labeled_statement "File_read::unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );" statement_identifier : (ERROR ":" :) (expression_statement "unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     );" (call_expression "unlock((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     )" identifier (argument_list "((File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_\n                     )" ( (cast_expression "(File_read *)(p_Var1[5]._M_nxt[7]._M_nxt + 5)" ( (type_descriptor "File_read *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var1[5]._M_nxt[7]._M_nxt + 5)" ( (binary_expression "p_Var1[5]._M_nxt[7]._M_nxt + 5" (field_expression "p_Var1[5]._M_nxt[7]._M_nxt" (subscript_expression "p_Var1[5]._M_nxt[7]" (field_expression "p_Var1[5]._M_nxt" (subscript_expression "p_Var1[5]" identifier [ number_literal ]) . field_identifier) [ number_literal ]) . field_identifier) + number_literal) ))) , (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 ;) })))
(translation_unit "void FUN_001778b0(long param_1)\n\n{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}\n\n" (function_definition "void FUN_001778b0(long param_1)\n\n{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001778b0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (for_statement "for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" for ( (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x140)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x140)" * (cast_expression "(undefined8 **)(param_1 + 0x140)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) ))))) ; (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar1 = (undefined8 *)*puVar1" identifier = (cast_expression "(undefined8 *)*puVar1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) ) (compound_statement "{\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" { (expression_statement "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" identifier (argument_list "(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" ( (binary_expression "*(long *)(puVar1[5] + 0x38) + 0x28" (pointer_expression "*(long *)(puVar1[5] + 0x38)" * (cast_expression "(long *)(puVar1[5] + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1[5] + 0x38)" ( (binary_expression "puVar1[5] + 0x38" (subscript_expression "puVar1[5]" identifier [ number_literal ]) + 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 ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_001778b0(long param_1)\n\n{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001778b0(long param_1)" (identifier "FUN_001778b0") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  \n  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }\n  return;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (for_statement "for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;\n      puVar1 = (undefined8 *)*puVar1) {\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" (for "for") (( "(") (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 0x140)" (identifier "puVar1") (= "=") (pointer_expression "*(undefined8 **)(param_1 + 0x140)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x140)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x140)" (( "(") (binary_expression "param_1 + 0x140" (identifier "param_1") (+ "+") (number_literal "0x140")) () ")"))))) (; ";") (binary_expression "puVar1 != (undefined8 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar1 = (undefined8 *)*puVar1" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)*puVar1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) () ")") (compound_statement "{\n    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));\n  }" ({ "{") (expression_statement "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));" (call_expression "FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" (identifier "FUN_001879f0") (argument_list "(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8))" (( "(") (binary_expression "*(long *)(puVar1[5] + 0x38) + 0x28" (pointer_expression "*(long *)(puVar1[5] + 0x38)" (* "*") (cast_expression "(long *)(puVar1[5] + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar1[5] + 0x38)" (( "(") (binary_expression "puVar1[5] + 0x38" (subscript_expression "puVar1[5]" (identifier "puVar1") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "0x38")) () ")")))) (+ "+") (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") (; ";")) (} "}")))

/* DWARF original prototype: void unlock_nested_archives(Archive * this) */

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

{
  type_2 *var_1;
  
  for (var_1 = (this->nested_archives_)._M_h._M_before_begin._M_nxt;
      var_1 != (type_2 *)0x0; var_1 = var_1->_M_nxt) {
    File_read::var_2((type_3 *)(var_1[5]._M_nxt[7]._M_nxt + 5),(this->super_Library_base).task_
                     );
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (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))))

void MASKED(long param_1)

{
  undefined8 *puVar1;
  
  for (puVar1 = *(undefined8 **)(param_1 + 0x140); puVar1 != (undefined8 *)0x0;
      puVar1 = (undefined8 *)*puVar1) {
    FUN_001879f0(*(long *)(puVar1[5] + 0x38) + 0x28,*(undefined8 *)(param_1 + 8));
  }
  return;
}

