
/* DWARF original prototype: void do_for_all_unused_symbols(Incremental_library * this,
   Symbol_visitor_base * v) */

void __thiscall
gold::Incremental_library::do_for_all_unused_symbols
          (Incremental_library *this,Symbol_visitor_base *v)

{
  _func_int_varargs **pp_Var1;
  iterator __position;
  pointer pbVar2;
  Key symbol_key;
  Key local_40 [2];
  
  pbVar2 = (this->unused_symbols_).
           super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
           ._M_impl._M_start;
  if (pbVar2 != (this->unused_symbols_).
                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
                ._M_impl._M_finish) {
    do {
      while( true ) {
        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;
        pbVar2 = pbVar2 + 1;
        (*v->_vptr_Symbol_visitor_base[2])(v);
        if ((this->unused_symbols_).
            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
            ._M_impl._M_finish == pbVar2) {
          return;
        }
      }
      Stringpool_template<char>::add
                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,
                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);
      pp_Var1 = v[1]._vptr_Symbol_visitor_base;
      __position._M_current = (ulong *)pp_Var1[0xb];
      local_40[0] = symbol_key;
      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {
        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::
        _M_realloc_insert<long_unsigned_int_const&>
                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),
                   __position,local_40);
      }
      else {
        *__position._M_current = symbol_key;
        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);
      }
      pbVar2 = pbVar2 + 1;
    } while ((this->unused_symbols_).
             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
             ._M_impl._M_finish != pbVar2);
  }
  return;
}



void FUN_001839a0(long param_1,long *param_2)

{
  long lVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 local_48;
  undefined8 local_40 [2];
  
  puVar3 = *(undefined8 **)(param_1 + 0x48);
  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {
    do {
      while( true ) {
        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;
        puVar3 = puVar3 + 4;
        (**(code **)(*param_2 + 0x10))(param_2);
        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {
          return;
        }
      }
      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);
      lVar1 = param_2[1];
      puVar2 = *(undefined8 **)(lVar1 + 0x58);
      local_40[0] = local_48;
      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {
        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);
      }
      else {
        *puVar2 = local_48;
        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;
      }
      puVar3 = puVar3 + 4;
    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV RBX,qword ptr [RDI + 0x48]
CMP RBX,qword ptr [RDI + 0x50]
JZ 0x00183a2b
MOV R15,RSI
MOV RBP,RDI
LEA R12,[0x18ed20]
MOV R13,RSP
LEA R14,[RSP + 0x8]
JMP 0x00183a0d
MOV RDI,qword ptr [R15 + 0x10]
MOV RCX,R13
MOV EDX,0x1
CALL 0x0026e6a0
MOV RDI,qword ptr [R15 + 0x8]
MOV RAX,qword ptr [RSP]
MOV RSI,qword ptr [RDI + 0x58]
MOV qword ptr [RSP + 0x8],RAX
CMP RSI,qword ptr [RDI + 0x60]
JZ 0x00183a40
MOV qword ptr [RSI],RAX
ADD RSI,0x8
MOV qword ptr [RDI + 0x58],RSI
ADD RBX,0x20
CMP qword ptr [RBP + 0x50],RBX
JZ 0x00183a2b
MOV RAX,qword ptr [R15]
MOV RSI,qword ptr [RBX]
MOV RAX,qword ptr [RAX + 0x10]
CMP RAX,R12
JZ 0x001839d0
MOV RDI,R15
ADD RBX,0x20
CALL RAX
CMP qword ptr [RBP + 0x50],RBX
JNZ 0x00183a0d
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
ADD RDI,0x50
MOV RDX,R14
CALL 0x0018ebd0
JMP 0x00183a03
(translation_unit "void FUN_001839a0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001839a0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001839a0(long param_1,long *param_2)" identifier (parameter_list "(long param_1,long *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "puVar3 = *(undefined8 **)(param_1 + 0x48);" (assignment_expression "puVar3 = *(undefined8 **)(param_1 + 0x48)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x48)" * (cast_expression "(undefined8 **)(param_1 + 0x48)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" if (parenthesized_expression "(puVar3 != *(undefined8 **)(param_1 + 0x50))" ( (binary_expression "puVar3 != *(undefined8 **)(param_1 + 0x50)" identifier != (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" { (do_statement "do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);" do (compound_statement "{\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    }" { (while_statement "while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" { (if_statement "if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;" if (parenthesized_expression "(*(code **)(*param_2 + 0x10) == FUN_0018ed20)" ( (binary_expression "*(code **)(*param_2 + 0x10) == FUN_0018ed20" (pointer_expression "*(code **)(*param_2 + 0x10)" * (cast_expression "(code **)(*param_2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) )))) == identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) (expression_statement "(**(code **)(*param_2 + 0x10))(param_2);" (call_expression "(**(code **)(*param_2 + 0x10))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x10))" ( (pointer_expression "**(code **)(*param_2 + 0x10)" * (pointer_expression "*(code **)(*param_2 + 0x10)" * (cast_expression "(code **)(*param_2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier ))) ;) (if_statement "if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) == puVar3)" ( (binary_expression "*(undefined8 **)(param_1 + 0x50) == puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);" (call_expression "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48)" identifier (argument_list "(param_2[2],*puVar3,1,&local_48)" ( (subscript_expression "param_2[2]" identifier [ number_literal ]) , (pointer_expression "*puVar3" * identifier) , number_literal , (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar1 = param_2[1];" (assignment_expression "lVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "puVar2 = *(undefined8 **)(lVar1 + 0x58);" (assignment_expression "puVar2 = *(undefined8 **)(lVar1 + 0x58)" identifier = (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" * (cast_expression "(undefined8 **)(lVar1 + 0x58)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x58)" ( (binary_expression "lVar1 + 0x58" identifier + number_literal) ))))) ;) (expression_statement "local_40[0] = local_48;" (assignment_expression "local_40[0] = local_48" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" if (parenthesized_expression "(puVar2 == *(undefined8 **)(lVar1 + 0x60))" ( (binary_expression "puVar2 == *(undefined8 **)(lVar1 + 0x60)" identifier == (pointer_expression "*(undefined8 **)(lVar1 + 0x60)" * (cast_expression "(undefined8 **)(lVar1 + 0x60)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x60)" ( (binary_expression "lVar1 + 0x60" identifier + number_literal) ))))) )) (compound_statement "{\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }" { (expression_statement "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);" (call_expression "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40)" identifier (argument_list "(lVar1 + 0x50,puVar2,local_40)" ( (binary_expression "lVar1 + 0x50" identifier + number_literal) , identifier , identifier ))) ;) }) (else_clause "else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" else (compound_statement "{\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" { (expression_statement "*puVar2 = local_48;" (assignment_expression "*puVar2 = local_48" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;" (assignment_expression "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1" (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" * (cast_expression "(undefined8 **)(lVar1 + 0x58)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x58)" ( (binary_expression "lVar1 + 0x58" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }))) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) != puVar3)" ( (binary_expression "*(undefined8 **)(param_1 + 0x50) != puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void do_for_all_unused_symbols(Incremental_library * this,\n   Symbol_visitor_base * v) */\n\nvoid __thiscall\ngold::Incremental_library::do_for_all_unused_symbols\n          (Incremental_library *this,Symbol_visitor_base *v)\n\n{\n  _func_int_varargs **pp_Var1;\n  iterator __position;\n  pointer pbVar2;\n  Key symbol_key;\n  Key local_40 [2];\n  \n  pbVar2 = (this->unused_symbols_).\n           super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n           ._M_impl._M_start;\n  if (pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                ._M_impl._M_finish) {\n    do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall\ngold::Incremental_library::do_for_all_unused_symbols\n          (Incremental_library *this,Symbol_visitor_base *v)\n\n{\n  _func_int_varargs **pp_Var1;\n  iterator __position;\n  pointer pbVar2;\n  Key symbol_key;\n  Key local_40 [2];\n  \n  pbVar2 = (this->unused_symbols_).\n           super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n           ._M_impl._M_start;\n  if (pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                ._M_impl._M_finish) {\n    do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Incremental_library::" identifier : : identifier : :) (function_declarator "do_for_all_unused_symbols\n          (Incremental_library *this,Symbol_visitor_base *v)" identifier (parameter_list "(Incremental_library *this,Symbol_visitor_base *v)" ( (parameter_declaration "Incremental_library *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol_visitor_base *v" type_identifier (pointer_declarator "*v" * identifier)) ))) (compound_statement "{\n  _func_int_varargs **pp_Var1;\n  iterator __position;\n  pointer pbVar2;\n  Key symbol_key;\n  Key local_40 [2];\n  \n  pbVar2 = (this->unused_symbols_).\n           super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n           ._M_impl._M_start;\n  if (pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                ._M_impl._M_finish) {\n    do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);\n  }\n  return;\n}" { (declaration "_func_int_varargs **pp_Var1;" type_identifier (pointer_declarator "**pp_Var1" * (pointer_declarator "*pp_Var1" * identifier)) ;) (declaration "iterator __position;" type_identifier identifier ;) (declaration "pointer pbVar2;" type_identifier identifier ;) (declaration "Key symbol_key;" type_identifier identifier ;) (declaration "Key local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (ERROR "pbVar2 = (this->unused_symbols_).\n           super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (assignment_expression "pbVar2 = (this->unused_symbols_).\n           super__Vector_base<std" identifier = (binary_expression "(this->unused_symbols_).\n           super__Vector_base<std" (field_expression "(this->unused_symbols_).\n           super__Vector_base" (parenthesized_expression "(this->unused_symbols_)" ( (field_expression "this->unused_symbols_" identifier -> field_identifier) )) . field_identifier) < identifier)) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>_>_>\n           ._M_impl._M_start;" (field_expression "allocator<char>_>_>_>\n           ._M_impl._M_start" (field_expression "allocator<char>_>_>_>\n           ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                ._M_impl._M_finish) {\n    do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);\n  }" if (parenthesized_expression "(pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                ._M_impl._M_finish)" ( (ERROR "pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char,_std" (binary_expression "pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std::__cxx11::basic_string<char" (binary_expression "pbVar2 != (this->unused_symbols_).\n                super__Vector_base<std" identifier != (binary_expression "(this->unused_symbols_).\n                super__Vector_base<std" (field_expression "(this->unused_symbols_).\n                super__Vector_base" (parenthesized_expression "(this->unused_symbols_)" ( (field_expression "this->unused_symbols_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::__cxx11::basic_string" : : identifier : : identifier) < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : identifier : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (field_expression "allocator<char>_>_>_>\n                ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>\n                ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n    do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);\n  }" { (do_statement "do {\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    } while ((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2);" do (compound_statement "{\n      while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }\n      Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);\n      pp_Var1 = v[1]._vptr_Symbol_visitor_base;\n      __position._M_current = (ulong *)pp_Var1[0xb];\n      local_40[0] = symbol_key;\n      if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }\n      pbVar2 = pbVar2 + 1;\n    }" { (while_statement "while( true ) {\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;\n        pbVar2 = pbVar2 + 1;\n        (*v->_vptr_Symbol_visitor_base[2])(v);\n        if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }\n      }" { (if_statement "if (v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit) break;" if (parenthesized_expression "(v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor::visit)" ( (binary_expression "v->_vptr_Symbol_visitor_base[2] == Unused_symbol_visitor" (subscript_expression "v->_vptr_Symbol_visitor_base[2]" (field_expression "v->_vptr_Symbol_visitor_base" identifier -> field_identifier) [ number_literal ]) == identifier) (ERROR "::visit" : : identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) (expression_statement "(*v->_vptr_Symbol_visitor_base[2])(v);" (call_expression "(*v->_vptr_Symbol_visitor_base[2])(v)" (parenthesized_expression "(*v->_vptr_Symbol_visitor_base[2])" ( (pointer_expression "*v->_vptr_Symbol_visitor_base[2]" * (subscript_expression "v->_vptr_Symbol_visitor_base[2]" (field_expression "v->_vptr_Symbol_visitor_base" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(v)" ( identifier ))) ;) (if_statement "if ((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2) {\n          return;\n        }" if (parenthesized_expression "((this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2)" ( (ERROR "(this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "(this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char,_std" (binary_expression "(this->unused_symbols_).\n            super__Vector_base<std::__cxx11::basic_string<char" (binary_expression "(this->unused_symbols_).\n            super__Vector_base<std" (field_expression "(this->unused_symbols_).\n            super__Vector_base" (parenthesized_expression "(this->unused_symbols_)" ( (field_expression "this->unused_symbols_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::__cxx11::basic_string" : : identifier : : identifier) < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : identifier : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_>_>\n            ._M_impl._M_finish == pbVar2" (field_expression "allocator<char>_>_>_>\n            ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>\n            ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key);" (binary_expression "Stringpool_template<char>::add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key)" (binary_expression "Stringpool_template<char" identifier < identifier) > (ERROR "::" : :) (call_expression "add\n                ((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key)" identifier (argument_list "((Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key)" ( (parenthesized_expression "(Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key)" ( (comma_expression "Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base,\n                 (pbVar2->_M_dataplus)._M_p,true,&symbol_key" (binary_expression "Stringpool_template<char> *)v[2]._vptr_Symbol_visitor_base" (binary_expression "Stringpool_template<char" identifier < identifier) > (pointer_expression "*)v[2]._vptr_Symbol_visitor_base" * (ERROR ")" )) (field_expression "v[2]._vptr_Symbol_visitor_base" (subscript_expression "v[2]" identifier [ number_literal ]) . field_identifier))) , (comma_expression "(pbVar2->_M_dataplus)._M_p,true,&symbol_key" (field_expression "(pbVar2->_M_dataplus)._M_p" (parenthesized_expression "(pbVar2->_M_dataplus)" ( (field_expression "pbVar2->_M_dataplus" identifier -> field_identifier) )) . field_identifier) , (comma_expression "true,&symbol_key" true , (pointer_expression "&symbol_key" & identifier)))) )) )))) ;) (expression_statement "pp_Var1 = v[1]._vptr_Symbol_visitor_base;" (assignment_expression "pp_Var1 = v[1]._vptr_Symbol_visitor_base" identifier = (field_expression "v[1]._vptr_Symbol_visitor_base" (subscript_expression "v[1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "__position._M_current = (ulong *)pp_Var1[0xb];" (assignment_expression "__position._M_current = (ulong *)pp_Var1[0xb]" (field_expression "__position._M_current" identifier . field_identifier) = (cast_expression "(ulong *)pp_Var1[0xb]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "pp_Var1[0xb]" identifier [ number_literal ]))) ;) (expression_statement "local_40[0] = symbol_key;" (assignment_expression "local_40[0] = symbol_key" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((_func_int_varargs *)__position._M_current == pp_Var1[0xc]) {\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }\n      else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }" if (parenthesized_expression "((_func_int_varargs *)__position._M_current == pp_Var1[0xc])" ( (binary_expression "(_func_int_varargs *)__position._M_current == pp_Var1[0xc]" (cast_expression "(_func_int_varargs *)__position._M_current" ( (type_descriptor "_func_int_varargs *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__position._M_current" identifier . field_identifier)) == (subscript_expression "pp_Var1[0xc]" identifier [ number_literal ])) )) (compound_statement "{\n        std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);\n      }" { (labeled_statement "std::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>::\n        _M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);" statement_identifier (ERROR "::vector<long_unsigned_int,_std::allocator<long_unsigned_int>_>:" : : (comma_expression "vector<long_unsigned_int,_std" (binary_expression "vector<long_unsigned_int" identifier < identifier) , identifier) : : (binary_expression "allocator<long_unsigned_int>_" (binary_expression "allocator<long_unsigned_int" identifier < identifier) > identifier) > :) : (expression_statement "_M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40);" (binary_expression "_M_realloc_insert<long_unsigned_int_const&>\n                  ((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40)" (binary_expression "_M_realloc_insert<long_unsigned_int_const" identifier < identifier) (ERROR "&" &) > (parenthesized_expression "((vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40)" ( (comma_expression "(vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10),\n                   __position,local_40" (call_expression "(vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)(pp_Var1 + 10)" (parenthesized_expression "(vector<long_unsigned_int,_std::allocator<long_unsigned_int>_> *)" ( (ERROR "vector<long_unsigned_int,_std::" (comma_expression "vector<long_unsigned_int,_std" (binary_expression "vector<long_unsigned_int" identifier < identifier) , identifier) : :) (binary_expression "allocator<long_unsigned_int>_> *" (binary_expression "allocator<long_unsigned_int>_" (binary_expression "allocator<long_unsigned_int" identifier < identifier) > identifier) > (pointer_expression "*" * identifier)) )) (argument_list "(pp_Var1 + 10)" ( (binary_expression "pp_Var1 + 10" identifier + number_literal) ))) , (comma_expression "__position,local_40" identifier , identifier)) ))) ;)) }) (else_clause "else {\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }" else (compound_statement "{\n        *__position._M_current = symbol_key;\n        pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);\n      }" { (expression_statement "*__position._M_current = symbol_key;" (assignment_expression "*__position._M_current = symbol_key" (pointer_expression "*__position._M_current" * (field_expression "__position._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1);" (assignment_expression "pp_Var1[0xb] = (_func_int_varargs *)(__position._M_current + 1)" (subscript_expression "pp_Var1[0xb]" identifier [ number_literal ]) = (cast_expression "(_func_int_varargs *)(__position._M_current + 1)" ( (type_descriptor "_func_int_varargs *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__position._M_current + 1)" ( (binary_expression "__position._M_current + 1" (field_expression "__position._M_current" identifier . field_identifier) + number_literal) )))) ;) }))) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2)" ( (ERROR "(this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "(this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char,_std" (binary_expression "(this->unused_symbols_).\n             super__Vector_base<std::__cxx11::basic_string<char" (binary_expression "(this->unused_symbols_).\n             super__Vector_base<std" (field_expression "(this->unused_symbols_).\n             super__Vector_base" (parenthesized_expression "(this->unused_symbols_)" ( (field_expression "this->unused_symbols_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::__cxx11::basic_string" : : identifier : : identifier) < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : identifier : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_>_>\n             ._M_impl._M_finish != pbVar2" (field_expression "allocator<char>_>_>_>\n             ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>\n             ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001839a0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001839a0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001839a0(long param_1,long *param_2)" identifier (parameter_list "(long param_1,long *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "puVar3 = *(undefined8 **)(param_1 + 0x48);" (assignment_expression "puVar3 = *(undefined8 **)(param_1 + 0x48)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x48)" * (cast_expression "(undefined8 **)(param_1 + 0x48)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" if (parenthesized_expression "(puVar3 != *(undefined8 **)(param_1 + 0x50))" ( (binary_expression "puVar3 != *(undefined8 **)(param_1 + 0x50)" identifier != (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" { (do_statement "do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);" do (compound_statement "{\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    }" { (while_statement "while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" { (if_statement "if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;" if (parenthesized_expression "(*(code **)(*param_2 + 0x10) == FUN_0018ed20)" ( (binary_expression "*(code **)(*param_2 + 0x10) == FUN_0018ed20" (pointer_expression "*(code **)(*param_2 + 0x10)" * (cast_expression "(code **)(*param_2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) )))) == identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) (expression_statement "(**(code **)(*param_2 + 0x10))(param_2);" (call_expression "(**(code **)(*param_2 + 0x10))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x10))" ( (pointer_expression "**(code **)(*param_2 + 0x10)" * (pointer_expression "*(code **)(*param_2 + 0x10)" * (cast_expression "(code **)(*param_2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier ))) ;) (if_statement "if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) == puVar3)" ( (binary_expression "*(undefined8 **)(param_1 + 0x50) == puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);" (call_expression "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48)" identifier (argument_list "(param_2[2],*puVar3,1,&local_48)" ( (subscript_expression "param_2[2]" identifier [ number_literal ]) , (pointer_expression "*puVar3" * identifier) , number_literal , (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar1 = param_2[1];" (assignment_expression "lVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "puVar2 = *(undefined8 **)(lVar1 + 0x58);" (assignment_expression "puVar2 = *(undefined8 **)(lVar1 + 0x58)" identifier = (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" * (cast_expression "(undefined8 **)(lVar1 + 0x58)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x58)" ( (binary_expression "lVar1 + 0x58" identifier + number_literal) ))))) ;) (expression_statement "local_40[0] = local_48;" (assignment_expression "local_40[0] = local_48" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" if (parenthesized_expression "(puVar2 == *(undefined8 **)(lVar1 + 0x60))" ( (binary_expression "puVar2 == *(undefined8 **)(lVar1 + 0x60)" identifier == (pointer_expression "*(undefined8 **)(lVar1 + 0x60)" * (cast_expression "(undefined8 **)(lVar1 + 0x60)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x60)" ( (binary_expression "lVar1 + 0x60" identifier + number_literal) ))))) )) (compound_statement "{\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }" { (expression_statement "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);" (call_expression "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40)" identifier (argument_list "(lVar1 + 0x50,puVar2,local_40)" ( (binary_expression "lVar1 + 0x50" identifier + number_literal) , identifier , identifier ))) ;) }) (else_clause "else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" else (compound_statement "{\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" { (expression_statement "*puVar2 = local_48;" (assignment_expression "*puVar2 = local_48" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;" (assignment_expression "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1" (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" * (cast_expression "(undefined8 **)(lVar1 + 0x58)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar1 + 0x58)" ( (binary_expression "lVar1 + 0x58" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }))) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) != puVar3)" ( (binary_expression "*(undefined8 **)(param_1 + 0x50) != puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" * (cast_expression "(undefined8 **)(param_1 + 0x50)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression 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 ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (pointer_expression * IDENT) , LIT , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != IDENT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_001839a0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001839a0(long param_1,long *param_2)" (identifier "FUN_001839a0") (parameter_list "(long param_1,long *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  undefined8 *puVar3;\n  undefined8 local_48;\n  undefined8 local_40 [2];\n  \n  puVar3 = *(undefined8 **)(param_1 + 0x48);\n  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 local_48;" (type_identifier "undefined8") (identifier "local_48") (; ";")) (declaration "undefined8 local_40 [2];" (type_identifier "undefined8") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "puVar3 = *(undefined8 **)(param_1 + 0x48);" (assignment_expression "puVar3 = *(undefined8 **)(param_1 + 0x48)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined8 **)(param_1 + 0x48)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x48)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (if_statement "if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" (if "if") (parenthesized_expression "(puVar3 != *(undefined8 **)(param_1 + 0x50))" (( "(") (binary_expression "puVar3 != *(undefined8 **)(param_1 + 0x50)" (identifier "puVar3") (!= "!=") (pointer_expression "*(undefined8 **)(param_1 + 0x50)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x50)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (compound_statement "{\n    do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);\n  }" ({ "{") (do_statement "do {\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);" (do "do") (compound_statement "{\n      while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }\n      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);\n      lVar1 = param_2[1];\n      puVar2 = *(undefined8 **)(lVar1 + 0x58);\n      local_40[0] = local_48;\n      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }\n      puVar3 = puVar3 + 4;\n    }" ({ "{") (while_statement "while( true ) {\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;\n        puVar3 = puVar3 + 4;\n        (**(code **)(*param_2 + 0x10))(param_2);\n        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }\n      }" ({ "{") (if_statement "if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;" (if "if") (parenthesized_expression "(*(code **)(*param_2 + 0x10) == FUN_0018ed20)" (( "(") (binary_expression "*(code **)(*param_2 + 0x10) == FUN_0018ed20" (pointer_expression "*(code **)(*param_2 + 0x10)" (* "*") (cast_expression "(code **)(*param_2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x10)" (( "(") (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (identifier "FUN_0018ed20")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 4" (identifier "puVar3") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "(**(code **)(*param_2 + 0x10))(param_2);" (call_expression "(**(code **)(*param_2 + 0x10))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x10)" (* "*") (cast_expression "(code **)(*param_2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x10)" (( "(") (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))) (; ";")) (if_statement "if (*(undefined8 **)(param_1 + 0x50) == puVar3) {\n          return;\n        }" (if "if") (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) == puVar3)" (( "(") (binary_expression "*(undefined8 **)(param_1 + 0x50) == puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x50)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (== "==") (identifier "puVar3")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);" (call_expression "FUN_0026e6a0(param_2[2],*puVar3,1,&local_48)" (identifier "FUN_0026e6a0") (argument_list "(param_2[2],*puVar3,1,&local_48)" (( "(") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (, ",") (number_literal "1") (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (expression_statement "lVar1 = param_2[1];" (assignment_expression "lVar1 = param_2[1]" (identifier "lVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar2 = *(undefined8 **)(lVar1 + 0x58);" (assignment_expression "puVar2 = *(undefined8 **)(lVar1 + 0x58)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" (* "*") (cast_expression "(undefined8 **)(lVar1 + 0x58)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar1 + 0x58)" (( "(") (binary_expression "lVar1 + 0x58" (identifier "lVar1") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (expression_statement "local_40[0] = local_48;" (assignment_expression "local_40[0] = local_48" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "local_48")) (; ";")) (if_statement "if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }\n      else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" (if "if") (parenthesized_expression "(puVar2 == *(undefined8 **)(lVar1 + 0x60))" (( "(") (binary_expression "puVar2 == *(undefined8 **)(lVar1 + 0x60)" (identifier "puVar2") (== "==") (pointer_expression "*(undefined8 **)(lVar1 + 0x60)" (* "*") (cast_expression "(undefined8 **)(lVar1 + 0x60)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar1 + 0x60)" (( "(") (binary_expression "lVar1 + 0x60" (identifier "lVar1") (+ "+") (number_literal "0x60")) () ")"))))) () ")")) (compound_statement "{\n        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);\n      }" ({ "{") (expression_statement "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);" (call_expression "FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40)" (identifier "FUN_0018ebd0") (argument_list "(lVar1 + 0x50,puVar2,local_40)" (( "(") (binary_expression "lVar1 + 0x50" (identifier "lVar1") (+ "+") (number_literal "0x50")) (, ",") (identifier "puVar2") (, ",") (identifier "local_40") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" (else "else") (compound_statement "{\n        *puVar2 = local_48;\n        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;\n      }" ({ "{") (expression_statement "*puVar2 = local_48;" (assignment_expression "*puVar2 = local_48" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (identifier "local_48")) (; ";")) (expression_statement "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;" (assignment_expression "*(undefined8 **)(lVar1 + 0x58) = puVar2 + 1" (pointer_expression "*(undefined8 **)(lVar1 + 0x58)" (* "*") (cast_expression "(undefined8 **)(lVar1 + 0x58)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar1 + 0x58)" (( "(") (binary_expression "lVar1 + 0x58" (identifier "lVar1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 4" (identifier "puVar3") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(undefined8 **)(param_1 + 0x50) != puVar3)" (( "(") (binary_expression "*(undefined8 **)(param_1 + 0x50) != puVar3" (pointer_expression "*(undefined8 **)(param_1 + 0x50)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x50)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (!= "!=") (identifier "puVar3")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void do_for_all_unused_symbols(Incremental_library * this,
   Symbol_visitor_base * v) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *v)

{
  type_3 **var_11;
  type_4 __position;
  type_5 var_5;
  type_6 symbol_key;
  type_6 local_40 [2];
  
  var_5 = (this->unused_symbols_).
           super__Vector_base<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>,_std::var_1<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
           ._M_impl._M_start;
  if (var_5 != (this->unused_symbols_).
                super__Vector_base<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>,_std::var_1<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
                ._M_impl._M_finish) {
    do {
      while( true ) {
        if (v->_vptr_Symbol_visitor_base[2] == var_4::visit) break;
        var_5 = var_5 + 1;
        (*v->_vptr_Symbol_visitor_base[2])(v);
        if ((this->unused_symbols_).
            super__Vector_base<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>,_std::var_1<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
            ._M_impl._M_finish == var_5) {
          return;
        }
      }
      var_6<var_2>::var_7
                ((var_6<var_2> *)v[2]._vptr_Symbol_visitor_base,
                 (var_5->_M_dataplus)._M_p,true,&symbol_key);
      var_11 = v[1]._vptr_Symbol_visitor_base;
      __position._M_current = (type_7 *)var_11[0xb];
      local_40[0] = symbol_key;
      if ((type_3 *)__position._M_current == var_11[0xc]) {
        std::vector<var_10,_std::var_1<var_10>var_3>::
        var_8<var_9&>
                  ((vector<var_10,_std::var_1<var_10>var_3> *)(var_11 + 10),
                   __position,local_40);
      }
      else {
        *__position._M_current = symbol_key;
        var_11[0xb] = (type_3 *)(__position._M_current + 1);
      }
      var_5 = var_5 + 1;
    } while ((this->unused_symbols_).
             super__Vector_base<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>,_std::var_1<std::__cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
             ._M_impl._M_finish != var_5);
  }
  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: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_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))))))) consequence: (compound_statement (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (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))))) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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)))) (if_statement condition: (parenthesized_expression (binary_expression left: (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))))) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (identifier)) (number_literal) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_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))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (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))))) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (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))))) right: (identifier)))))) (return_statement))))

void MASKED(long param_1,long *param_2)

{
  long lVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 local_48;
  undefined8 local_40 [2];
  
  puVar3 = *(undefined8 **)(param_1 + 0x48);
  if (puVar3 != *(undefined8 **)(param_1 + 0x50)) {
    do {
      while( true ) {
        if (*(code **)(*param_2 + 0x10) == FUN_0018ed20) break;
        puVar3 = puVar3 + 4;
        (**(code **)(*param_2 + 0x10))(param_2);
        if (*(undefined8 **)(param_1 + 0x50) == puVar3) {
          return;
        }
      }
      FUN_0026e6a0(param_2[2],*puVar3,1,&local_48);
      lVar1 = param_2[1];
      puVar2 = *(undefined8 **)(lVar1 + 0x58);
      local_40[0] = local_48;
      if (puVar2 == *(undefined8 **)(lVar1 + 0x60)) {
        FUN_0018ebd0(lVar1 + 0x50,puVar2,local_40);
      }
      else {
        *puVar2 = local_48;
        *(undefined8 **)(lVar1 + 0x58) = puVar2 + 1;
      }
      puVar3 = puVar3 + 4;
    } while (*(undefined8 **)(param_1 + 0x50) != puVar3);
  }
  return;
}

