
/* DWARF original prototype: void do_get_global_symbol_counts(Sized_relobj_incr<32,_false> * this,
   Symbol_table * param_1, size_t * defined, size_t * used) */

void __thiscall
gold::Sized_relobj_incr<32,_false>::do_get_global_symbol_counts
          (Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)

{
  Symbol *pSVar1;
  pointer ppSVar2;
  size_t sVar3;
  bool bVar4;
  
  ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
            _M_impl._M_start;
  *defined = this->defined_count_;
  if (ppSVar2 ==
      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl.
      _M_finish) {
    sVar3 = 0;
  }
  else {
    sVar3 = 0;
    do {
      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&
             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {
        if ((pSVar1->field_0x3b & 0x20) == 0) {
          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);
          bVar4 = !bVar4;
        }
        else {
          bVar4 = (pSVar1->u2_).shndx != 0;
        }
        sVar3 = (sVar3 + 1) - (ulong)!bVar4;
        ppSVar2 = ppSVar2 + 1;
        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;
      }
      ppSVar2 = ppSVar2 + 1;
    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
             _M_impl._M_finish != ppSVar2);
  }
LAB_00188fd2:
  *used = sVar3;
  return;
}



void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)

{
  long lVar1;
  long *plVar2;
  long lVar3;
  byte bVar4;
  
  plVar2 = *(long **)(param_1 + 0x138);
  *param_3 = *(undefined8 *)(param_1 + 0x150);
  if (plVar2 == *(long **)(param_1 + 0x140)) {
    lVar3 = 0;
  }
  else {
    lVar3 = 0;
    do {
      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&
             (param_1 == *(long *)(lVar1 + 0x10)))) {
        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {
          bVar4 = FUN_00270ff0();
          bVar4 = bVar4 ^ 1;
        }
        else {
          bVar4 = *(int *)(lVar1 + 0x18) != 0;
        }
        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);
        plVar2 = plVar2 + 1;
        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;
      }
      plVar2 = plVar2 + 1;
    } while (*(long **)(param_1 + 0x140) != plVar2);
  }
LAB_00188fd2:
  *param_4 = lVar3;
  return;
}


PUSH R13
MOV R13,RCX
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RAX,qword ptr [RDI + 0x150]
MOV RBX,qword ptr [RDI + 0x138]
MOV qword ptr [RDX],RAX
CMP RBX,qword ptr [RDI + 0x140]
JZ 0x00188ff2
MOV RBP,RDI
XOR R12D,R12D
JMP 0x00188f9d
ADD RBX,0x8
CMP qword ptr [RBP + 0x140],RBX
JZ 0x00188fd2
MOV RAX,qword ptr [RBX]
TEST RAX,RAX
JZ 0x00188f90
TEST byte ptr [RAX + 0x3a],0x7
JNZ 0x00188f90
CMP RBP,qword ptr [RAX + 0x10]
JNZ 0x00188f90
MOV EDI,dword ptr [RAX + 0x18]
TEST byte ptr [RAX + 0x3b],0x20
JZ 0x00188fe8
TEST EDI,EDI
SETNZ AL
CMP AL,0x1
SBB R12,-0x1
ADD RBX,0x8
CMP qword ptr [RBP + 0x140],RBX
JNZ 0x00188f9d
MOV qword ptr [R13],R12
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
CALL 0x00270ff0
XOR EAX,0x1
JMP 0x00188fbf
XOR R12D,R12D
JMP 0x00188fd2
(translation_unit "void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}\n\n" (function_definition "void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" primitive_type (function_declarator "FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (expression_statement "plVar2 = *(long **)(param_1 + 0x138);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x138)" identifier = (pointer_expression "*(long **)(param_1 + 0x138)" * (cast_expression "(long **)(param_1 + 0x138)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x138)" ( (binary_expression "param_1 + 0x138" identifier + number_literal) ))))) ;) (expression_statement "*param_3 = *(undefined8 *)(param_1 + 0x150);" (assignment_expression "*param_3 = *(undefined8 *)(param_1 + 0x150)" (pointer_expression "*param_3" * identifier) = (pointer_expression "*(undefined8 *)(param_1 + 0x150)" * (cast_expression "(undefined8 *)(param_1 + 0x150)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x150)" ( (binary_expression "param_1 + 0x150" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" if (parenthesized_expression "(plVar2 == *(long **)(param_1 + 0x140))" ( (binary_expression "plVar2 == *(long **)(param_1 + 0x140)" identifier == (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) ))))) )) (compound_statement "{\n    lVar3 = 0;\n  }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" else (compound_statement "{\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);" do (compound_statement "{\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    }" { (while_statement "while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" while (parenthesized_expression "(((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))))" ( (parenthesized_expression "((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))" ( (binary_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0))" ( (comma_expression "lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (assignment_expression "lVar1 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) , (binary_expression "lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (binary_expression "lVar1 != 0" identifier != number_literal) && (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" * (cast_expression "(byte *)(lVar1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3a)" ( (binary_expression "lVar1 + 0x3a" identifier + number_literal) )))) & number_literal) )) == number_literal) )))) )) && (parenthesized_expression "(param_1 == *(long *)(lVar1 + 0x10))" ( (binary_expression "param_1 == *(long *)(lVar1 + 0x10)" identifier == (pointer_expression "*(long *)(lVar1 + 0x10)" * (cast_expression "(long *)(lVar1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x10)" ( (binary_expression "lVar1 + 0x10" identifier + number_literal) ))))) ))) )) )) (compound_statement "{\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" { (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" * (cast_expression "(byte *)(lVar1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3b)" ( (binary_expression "lVar1 + 0x3b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }" { (expression_statement "bVar4 = FUN_00270ff0();" (assignment_expression "bVar4 = FUN_00270ff0()" identifier = (call_expression "FUN_00270ff0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar4 = bVar4 ^ 1;" (assignment_expression "bVar4 = bVar4 ^ 1" identifier = (binary_expression "bVar4 ^ 1" identifier ^ number_literal)) ;) }) (else_clause "else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" else (compound_statement "{\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" { (expression_statement "bVar4 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar4 = *(int *)(lVar1 + 0x18) != 0" identifier = (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" * (cast_expression "(int *)(lVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x18)" ( (binary_expression "lVar1 + 0x18" identifier + number_literal) )))) != number_literal)) ;) }))) (expression_statement "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);" (assignment_expression "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0)" identifier = (binary_expression "(lVar3 + 1) - (ulong)(bVar4 == 0)" (parenthesized_expression "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )) - (call_expression "(ulong)(bVar4 == 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar4 == 0)" ( (binary_expression "bVar4 == 0" identifier == number_literal) ))))) ;) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" identifier = (binary_expression "plVar2 + 1" identifier + number_literal)) ;) (if_statement "if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;" if (parenthesized_expression "(*(long **)(param_1 + 0x140) == plVar2)" ( (binary_expression "*(long **)(param_1 + 0x140) == plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00188fd2;" goto statement_identifier ;)) })) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" identifier = (binary_expression "plVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*(long **)(param_1 + 0x140) != plVar2)" ( (binary_expression "*(long **)(param_1 + 0x140) != plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) )))) != identifier) )) ;) }))) (labeled_statement "LAB_00188fd2:\n  *param_4 = lVar3;" statement_identifier : (expression_statement "*param_4 = lVar3;" (assignment_expression "*param_4 = lVar3" (pointer_expression "*param_4" * identifier) = identifier) ;)) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void do_get_global_symbol_counts(Sized_relobj_incr<32,_false> * this,\n   Symbol_table * param_1, size_t * defined, size_t * used) */\n\nvoid __thiscall\ngold::Sized_relobj_incr<32,_false>::do_get_global_symbol_counts\n          (Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)\n\n{\n  Symbol *pSVar1;\n  pointer ppSVar2;\n  size_t sVar3;\n  bool bVar4;\n  \n  ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_start;\n  *defined = this->defined_count_;\n  if (ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl.\n      _M_finish) {\n    sVar3 = 0;\n  }\n  else {\n    sVar3 = 0;\n    do {\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2);\n  }\nLAB_00188fd2:\n  *used = sVar3;\n  return;\n}\n\n" comment (declaration "void __thiscall\ngold::Sized_relobj_incr<32,_false>::do_get_global_symbol_counts\n          (Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)\n\n{\n  Symbol *pSVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_false>::do_get_global_symbol_counts\n          (Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)\n\n{\n  Symbol" identifier > : : (function_declarator "do_get_global_symbol_counts\n          (Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)" identifier (parameter_list "(Sized_relobj_incr<32,_false> *this,Symbol_table *param_1,size_t *defined,size_t *used)" ( (parameter_declaration "Sized_relobj_incr" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol_table *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "size_t *defined" primitive_type (pointer_declarator "*defined" * identifier)) , (parameter_declaration "size_t *used" primitive_type (pointer_declarator "*used" * identifier)) ))) { identifier) (pointer_declarator "*pSVar1" * identifier) ;) (declaration "pointer ppSVar2;" type_identifier identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (expression_statement "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_start;" (field_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_start" (field_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl" (binary_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold::Symbol*,_std" (assignment_expression "ppSVar2 = (this->symbols_).super__Vector_base<gold" identifier = (binary_expression "(this->symbols_).super__Vector_base<gold" (field_expression "(this->symbols_).super__Vector_base" (parenthesized_expression "(this->symbols_)" ( (field_expression "this->symbols_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "*defined = this->defined_count_;" (assignment_expression "*defined = this->defined_count_" (pointer_expression "*defined" * identifier) = (field_expression "this->defined_count_" identifier -> field_identifier)) ;) (if_statement "if (ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl.\n      _M_finish) {\n    sVar3 = 0;\n  }\n  else {\n    sVar3 = 0;\n    do {\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2);\n  }" if (parenthesized_expression "(ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl.\n      _M_finish)" ( (field_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl.\n      _M_finish" (field_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl" (binary_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold::Symbol*,_std" (binary_expression "ppSVar2 ==\n      (this->symbols_).super__Vector_base<gold" identifier == (binary_expression "(this->symbols_).super__Vector_base<gold" (field_expression "(this->symbols_).super__Vector_base" (parenthesized_expression "(this->symbols_)" ( (field_expression "this->symbols_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n    sVar3 = 0;\n  }" { (expression_statement "sVar3 = 0;" (assignment_expression "sVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    sVar3 = 0;\n    do {\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2);\n  }" else (compound_statement "{\n    sVar3 = 0;\n    do {\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2);\n  }" { (expression_statement "sVar3 = 0;" (assignment_expression "sVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    } while ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2);" do (compound_statement "{\n      while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }\n      ppSVar2 = ppSVar2 + 1;\n    }" { (while_statement "while (((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))) {\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }" while (parenthesized_expression "(((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object)))" ( (parenthesized_expression "((pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object))" ( (binary_expression "(pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)) &&\n             (this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object)" (parenthesized_expression "(pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0))" ( (comma_expression "pSVar1 = *ppSVar2, pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)" (assignment_expression "pSVar1 = *ppSVar2" identifier = (pointer_expression "*ppSVar2" * identifier)) , (binary_expression "pSVar1 != (Symbol *)0x0 && ((pSVar1->field_0x3a & 7) == 0)" (binary_expression "pSVar1 != (Symbol *)0x0" identifier != (cast_expression "(Symbol *)0x0" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "((pSVar1->field_0x3a & 7) == 0)" ( (binary_expression "(pSVar1->field_0x3a & 7) == 0" (parenthesized_expression "(pSVar1->field_0x3a & 7)" ( (binary_expression "pSVar1->field_0x3a & 7" (field_expression "pSVar1->field_0x3a" identifier -> field_identifier) & number_literal) )) == number_literal) )))) )) && (parenthesized_expression "(this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object)" ( (binary_expression "this == (Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object" identifier == (field_expression "(Sized_relobj_incr<32,_false> *)(pSVar1->u1_).object" (call_expression "(Sized_relobj_incr<32,_false> *)(pSVar1->u1_)" (parenthesized_expression "(Sized_relobj_incr<32,_false> *)" ( (comma_expression "Sized_relobj_incr<32,_false> *" (binary_expression "Sized_relobj_incr<32" identifier < number_literal) , (binary_expression "_false> *" identifier > (pointer_expression "*" * identifier))) )) (argument_list "(pSVar1->u1_)" ( (field_expression "pSVar1->u1_" identifier -> field_identifier) ))) . field_identifier)) ))) )) )) (compound_statement "{\n        if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }\n        sVar3 = (sVar3 + 1) - (ulong)!bVar4;\n        ppSVar2 = ppSVar2 + 1;\n        if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;\n      }" { (if_statement "if ((pSVar1->field_0x3b & 0x20) == 0) {\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }\n        else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }" if (parenthesized_expression "((pSVar1->field_0x3b & 0x20) == 0)" ( (binary_expression "(pSVar1->field_0x3b & 0x20) == 0" (parenthesized_expression "(pSVar1->field_0x3b & 0x20)" ( (binary_expression "pSVar1->field_0x3b & 0x20" (field_expression "pSVar1->field_0x3b" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar4 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n          bVar4 = !bVar4;\n        }" { (ERROR "bVar4 = Symbol::" (assignment_expression "bVar4 = Symbol" identifier = identifier) : :) (expression_statement "is_common_shndx((pSVar1->u2_).shndx);" (call_expression "is_common_shndx((pSVar1->u2_).shndx)" identifier (argument_list "((pSVar1->u2_).shndx)" ( (field_expression "(pSVar1->u2_).shndx" (parenthesized_expression "(pSVar1->u2_)" ( (field_expression "pSVar1->u2_" identifier -> field_identifier) )) . field_identifier) ))) ;) (expression_statement "bVar4 = !bVar4;" (assignment_expression "bVar4 = !bVar4" identifier = (unary_expression "!bVar4" ! identifier)) ;) }) (else_clause "else {\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }" else (compound_statement "{\n          bVar4 = (pSVar1->u2_).shndx != 0;\n        }" { (expression_statement "bVar4 = (pSVar1->u2_).shndx != 0;" (assignment_expression "bVar4 = (pSVar1->u2_).shndx != 0" identifier = (binary_expression "(pSVar1->u2_).shndx != 0" (field_expression "(pSVar1->u2_).shndx" (parenthesized_expression "(pSVar1->u2_)" ( (field_expression "pSVar1->u2_" identifier -> field_identifier) )) . field_identifier) != number_literal)) ;) }))) (expression_statement "sVar3 = (sVar3 + 1) - (ulong)!bVar4;" (assignment_expression "sVar3 = (sVar3 + 1) - (ulong)!bVar4" identifier = (binary_expression "(sVar3 + 1) - (ulong)!bVar4" (parenthesized_expression "(sVar3 + 1)" ( (binary_expression "sVar3 + 1" identifier + number_literal) )) - (cast_expression "(ulong)!bVar4" ( (type_descriptor "ulong" type_identifier) ) (unary_expression "!bVar4" ! identifier)))) ;) (expression_statement "ppSVar2 = ppSVar2 + 1;" (assignment_expression "ppSVar2 = ppSVar2 + 1" identifier = (binary_expression "ppSVar2 + 1" identifier + number_literal)) ;) (if_statement "if ((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2) goto LAB_00188fd2;" if (parenthesized_expression "((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2)" ( (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish == ppSVar2" (field_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl._M_finish" (field_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n            _M_impl" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std" (binary_expression "(this->symbols_).super__Vector_base<gold" (field_expression "(this->symbols_).super__Vector_base" (parenthesized_expression "(this->symbols_)" ( (field_expression "this->symbols_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) == identifier) )) (goto_statement "goto LAB_00188fd2;" goto statement_identifier ;)) })) (expression_statement "ppSVar2 = ppSVar2 + 1;" (assignment_expression "ppSVar2 = ppSVar2 + 1" identifier = (binary_expression "ppSVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2)" ( (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish != ppSVar2" (field_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl._M_finish" (field_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n             _M_impl" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "(this->symbols_).super__Vector_base<gold::Symbol*,_std" (binary_expression "(this->symbols_).super__Vector_base<gold" (field_expression "(this->symbols_).super__Vector_base" (parenthesized_expression "(this->symbols_)" ( (field_expression "this->symbols_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) != identifier) )) ;) }))) (labeled_statement "LAB_00188fd2:\n  *used = sVar3;" statement_identifier : (expression_statement "*used = sVar3;" (assignment_expression "*used = sVar3" (pointer_expression "*used" * identifier) = identifier) ;)) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}\n\n" (function_definition "void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" primitive_type (function_declarator "FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (expression_statement "plVar2 = *(long **)(param_1 + 0x138);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x138)" identifier = (pointer_expression "*(long **)(param_1 + 0x138)" * (cast_expression "(long **)(param_1 + 0x138)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x138)" ( (binary_expression "param_1 + 0x138" identifier + number_literal) ))))) ;) (expression_statement "*param_3 = *(undefined8 *)(param_1 + 0x150);" (assignment_expression "*param_3 = *(undefined8 *)(param_1 + 0x150)" (pointer_expression "*param_3" * identifier) = (pointer_expression "*(undefined8 *)(param_1 + 0x150)" * (cast_expression "(undefined8 *)(param_1 + 0x150)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x150)" ( (binary_expression "param_1 + 0x150" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" if (parenthesized_expression "(plVar2 == *(long **)(param_1 + 0x140))" ( (binary_expression "plVar2 == *(long **)(param_1 + 0x140)" identifier == (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) ))))) )) (compound_statement "{\n    lVar3 = 0;\n  }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" else (compound_statement "{\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" { (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);" do (compound_statement "{\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    }" { (while_statement "while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" while (parenthesized_expression "(((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))))" ( (parenthesized_expression "((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))" ( (binary_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0))" ( (comma_expression "lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (assignment_expression "lVar1 = *plVar2" identifier = (pointer_expression "*plVar2" * identifier)) , (binary_expression "lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (binary_expression "lVar1 != 0" identifier != number_literal) && (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" * (cast_expression "(byte *)(lVar1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3a)" ( (binary_expression "lVar1 + 0x3a" identifier + number_literal) )))) & number_literal) )) == number_literal) )))) )) && (parenthesized_expression "(param_1 == *(long *)(lVar1 + 0x10))" ( (binary_expression "param_1 == *(long *)(lVar1 + 0x10)" identifier == (pointer_expression "*(long *)(lVar1 + 0x10)" * (cast_expression "(long *)(lVar1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x10)" ( (binary_expression "lVar1 + 0x10" identifier + number_literal) ))))) ))) )) )) (compound_statement "{\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" { (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" * (cast_expression "(byte *)(lVar1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3b)" ( (binary_expression "lVar1 + 0x3b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }" { (expression_statement "bVar4 = FUN_00270ff0();" (assignment_expression "bVar4 = FUN_00270ff0()" identifier = (call_expression "FUN_00270ff0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar4 = bVar4 ^ 1;" (assignment_expression "bVar4 = bVar4 ^ 1" identifier = (binary_expression "bVar4 ^ 1" identifier ^ number_literal)) ;) }) (else_clause "else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" else (compound_statement "{\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" { (expression_statement "bVar4 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar4 = *(int *)(lVar1 + 0x18) != 0" identifier = (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" * (cast_expression "(int *)(lVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x18)" ( (binary_expression "lVar1 + 0x18" identifier + number_literal) )))) != number_literal)) ;) }))) (expression_statement "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);" (assignment_expression "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0)" identifier = (binary_expression "(lVar3 + 1) - (ulong)(bVar4 == 0)" (parenthesized_expression "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )) - (call_expression "(ulong)(bVar4 == 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar4 == 0)" ( (binary_expression "bVar4 == 0" identifier == number_literal) ))))) ;) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" identifier = (binary_expression "plVar2 + 1" identifier + number_literal)) ;) (if_statement "if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;" if (parenthesized_expression "(*(long **)(param_1 + 0x140) == plVar2)" ( (binary_expression "*(long **)(param_1 + 0x140) == plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00188fd2;" goto statement_identifier ;)) })) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" identifier = (binary_expression "plVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*(long **)(param_1 + 0x140) != plVar2)" ( (binary_expression "*(long **)(param_1 + 0x140) != plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" * (cast_expression "(long **)(param_1 + 0x140)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x140)" ( (binary_expression "param_1 + 0x140" identifier + number_literal) )))) != identifier) )) ;) }))) (labeled_statement "LAB_00188fd2:\n  *param_4 = lVar3;" statement_identifier : (expression_statement "*param_4 = lVar3;" (assignment_expression "*param_4 = lVar3" (pointer_expression "*param_4" * identifier) = identifier) ;)) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * IDENT)) , (binary_expression (binary_expression IDENT != LIT) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )))) )) && (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != IDENT) )) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (return_statement return ;) })))
(function_definition "void FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)\n\n{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00188f60(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" (identifier "FUN_00188f60") (parameter_list "(long param_1,undefined8 param_2,undefined8 *param_3,long *param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  long lVar1;\n  long *plVar2;\n  long lVar3;\n  byte bVar4;\n  \n  plVar2 = *(long **)(param_1 + 0x138);\n  *param_3 = *(undefined8 *)(param_1 + 0x150);\n  if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }\nLAB_00188fd2:\n  *param_4 = lVar3;\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (expression_statement "plVar2 = *(long **)(param_1 + 0x138);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x138)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(param_1 + 0x138)" (* "*") (cast_expression "(long **)(param_1 + 0x138)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x138)" (( "(") (binary_expression "param_1 + 0x138" (identifier "param_1") (+ "+") (number_literal "0x138")) () ")"))))) (; ";")) (expression_statement "*param_3 = *(undefined8 *)(param_1 + 0x150);" (assignment_expression "*param_3 = *(undefined8 *)(param_1 + 0x150)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (pointer_expression "*(undefined8 *)(param_1 + 0x150)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x150)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x150)" (( "(") (binary_expression "param_1 + 0x150" (identifier "param_1") (+ "+") (number_literal "0x150")) () ")"))))) (; ";")) (if_statement "if (plVar2 == *(long **)(param_1 + 0x140)) {\n    lVar3 = 0;\n  }\n  else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" (if "if") (parenthesized_expression "(plVar2 == *(long **)(param_1 + 0x140))" (( "(") (binary_expression "plVar2 == *(long **)(param_1 + 0x140)" (identifier "plVar2") (== "==") (pointer_expression "*(long **)(param_1 + 0x140)" (* "*") (cast_expression "(long **)(param_1 + 0x140)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x140)" (( "(") (binary_expression "param_1 + 0x140" (identifier "param_1") (+ "+") (number_literal "0x140")) () ")"))))) () ")")) (compound_statement "{\n    lVar3 = 0;\n  }" ({ "{") (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" (else "else") (compound_statement "{\n    lVar3 = 0;\n    do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);\n  }" ({ "{") (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    } while (*(long **)(param_1 + 0x140) != plVar2);" (do "do") (compound_statement "{\n      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }\n      plVar2 = plVar2 + 1;\n    }" ({ "{") (while_statement "while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))) {\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" (while "while") (parenthesized_expression "(((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))))" (( "(") (parenthesized_expression "((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10)))" (( "(") (binary_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&\n             (param_1 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "(lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0))" (( "(") (comma_expression "lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (assignment_expression "lVar1 = *plVar2" (identifier "lVar1") (= "=") (pointer_expression "*plVar2" (* "*") (identifier "plVar2"))) (, ",") (binary_expression "lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (( "(") (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" (* "*") (cast_expression "(byte *)(lVar1 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x3a)" (( "(") (binary_expression "lVar1 + 0x3a" (identifier "lVar1") (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")))) () ")")) (&& "&&") (parenthesized_expression "(param_1 == *(long *)(lVar1 + 0x10))" (( "(") (binary_expression "param_1 == *(long *)(lVar1 + 0x10)" (identifier "param_1") (== "==") (pointer_expression "*(long *)(lVar1 + 0x10)" (* "*") (cast_expression "(long *)(lVar1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x10)" (( "(") (binary_expression "lVar1 + 0x10" (identifier "lVar1") (+ "+") (number_literal "0x10")) () ")"))))) () ")"))) () ")")) () ")")) (compound_statement "{\n        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }\n        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);\n        plVar2 = plVar2 + 1;\n        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;\n      }" ({ "{") (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }\n        else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" (if "if") (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" (( "(") (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" (( "(") (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" (* "*") (cast_expression "(byte *)(lVar1 + 0x3b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x3b)" (( "(") (binary_expression "lVar1 + 0x3b" (identifier "lVar1") (+ "+") (number_literal "0x3b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          bVar4 = FUN_00270ff0();\n          bVar4 = bVar4 ^ 1;\n        }" ({ "{") (expression_statement "bVar4 = FUN_00270ff0();" (assignment_expression "bVar4 = FUN_00270ff0()" (identifier "bVar4") (= "=") (call_expression "FUN_00270ff0()" (identifier "FUN_00270ff0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar4 = bVar4 ^ 1;" (assignment_expression "bVar4 = bVar4 ^ 1" (identifier "bVar4") (= "=") (binary_expression "bVar4 ^ 1" (identifier "bVar4") (^ "^") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" (else "else") (compound_statement "{\n          bVar4 = *(int *)(lVar1 + 0x18) != 0;\n        }" ({ "{") (expression_statement "bVar4 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar4 = *(int *)(lVar1 + 0x18) != 0" (identifier "bVar4") (= "=") (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" (* "*") (cast_expression "(int *)(lVar1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x18)" (( "(") (binary_expression "lVar1 + 0x18" (identifier "lVar1") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0"))) (; ";")) (} "}")))) (expression_statement "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);" (assignment_expression "lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0)" (identifier "lVar3") (= "=") (binary_expression "(lVar3 + 1) - (ulong)(bVar4 == 0)" (parenthesized_expression "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")) (- "-") (call_expression "(ulong)(bVar4 == 0)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar4 == 0)" (( "(") (binary_expression "bVar4 == 0" (identifier "bVar4") (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" (identifier "plVar2") (= "=") (binary_expression "plVar2 + 1" (identifier "plVar2") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;" (if "if") (parenthesized_expression "(*(long **)(param_1 + 0x140) == plVar2)" (( "(") (binary_expression "*(long **)(param_1 + 0x140) == plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" (* "*") (cast_expression "(long **)(param_1 + 0x140)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x140)" (( "(") (binary_expression "param_1 + 0x140" (identifier "param_1") (+ "+") (number_literal "0x140")) () ")")))) (== "==") (identifier "plVar2")) () ")")) (goto_statement "goto LAB_00188fd2;" (goto "goto") (statement_identifier "LAB_00188fd2") (; ";"))) (} "}"))) (expression_statement "plVar2 = plVar2 + 1;" (assignment_expression "plVar2 = plVar2 + 1" (identifier "plVar2") (= "=") (binary_expression "plVar2 + 1" (identifier "plVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(long **)(param_1 + 0x140) != plVar2)" (( "(") (binary_expression "*(long **)(param_1 + 0x140) != plVar2" (pointer_expression "*(long **)(param_1 + 0x140)" (* "*") (cast_expression "(long **)(param_1 + 0x140)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x140)" (( "(") (binary_expression "param_1 + 0x140" (identifier "param_1") (+ "+") (number_literal "0x140")) () ")")))) (!= "!=") (identifier "plVar2")) () ")")) (; ";")) (} "}")))) (labeled_statement "LAB_00188fd2:\n  *param_4 = lVar3;" (statement_identifier "LAB_00188fd2") (: ":") (expression_statement "*param_4 = lVar3;" (assignment_expression "*param_4 = lVar3" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "lVar3")) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void do_get_global_symbol_counts(Sized_relobj_incr<32,_false> * this,
   Symbol_table * param_1, size_t * defined, size_t * used) */

void __thiscall
var_1::var_7<32,var_8>::do_get_global_symbol_counts
          (var_7<32,var_8> *var_6,Symbol_table *param_1,size_t *defined,size_t *used)

{
  type_2 *var_5;
  type_1 var_4;
  size_t var_10;
  bool bVar4;
  
  var_4 = (var_6->symbols_).super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>.
            _M_impl._M_start;
  *defined = var_6->defined_count_;
  if (var_4 ==
      (var_6->symbols_).super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>._M_impl.
      _M_finish) {
    var_10 = 0;
  }
  else {
    var_10 = 0;
    do {
      while (((var_5 = *var_4, var_5 != (type_2 *)0x0 && ((var_5->field_0x3a & 7) == 0)) &&
             (var_6 == (var_7<32,var_8> *)(var_5->u1_).object))) {
        if ((var_5->field_0x3b & 0x20) == 0) {
          bVar4 = type_2::var_9((var_5->u2_).shndx);
          bVar4 = !bVar4;
        }
        else {
          bVar4 = (var_5->u2_).shndx != 0;
        }
        var_10 = (var_10 + 1) - (type_3)!bVar4;
        var_4 = var_4 + 1;
        if ((var_6->symbols_).super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>.
            _M_impl._M_finish == var_4) goto LAB_00188fd2;
      }
      var_4 = var_4 + 1;
    } while ((var_6->symbols_).super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>.
             _M_impl._M_finish != var_4);
  }
LAB_00188fd2:
  *used = var_10;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator 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: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (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: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (return_statement))))

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

{
  long lVar1;
  long *plVar2;
  long lVar3;
  byte bVar4;
  
  plVar2 = *(long **)(param_1 + 0x138);
  *param_3 = *(undefined8 *)(param_1 + 0x150);
  if (plVar2 == *(long **)(param_1 + 0x140)) {
    lVar3 = 0;
  }
  else {
    lVar3 = 0;
    do {
      while (((lVar1 = *plVar2, lVar1 != 0 && ((*(byte *)(lVar1 + 0x3a) & 7) == 0)) &&
             (param_1 == *(long *)(lVar1 + 0x10)))) {
        if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {
          bVar4 = FUN_00270ff0();
          bVar4 = bVar4 ^ 1;
        }
        else {
          bVar4 = *(int *)(lVar1 + 0x18) != 0;
        }
        lVar3 = (lVar3 + 1) - (ulong)(bVar4 == 0);
        plVar2 = plVar2 + 1;
        if (*(long **)(param_1 + 0x140) == plVar2) goto LAB_00188fd2;
      }
      plVar2 = plVar2 + 1;
    } while (*(long **)(param_1 + 0x140) != plVar2);
  }
LAB_00188fd2:
  *param_4 = lVar3;
  return;
}

