
/* DWARF original prototype: void force_local(Symbol_table * this, Symbol * sym) */

void __thiscall gold::Symbol_table::force_local(Symbol_table *this,Symbol *sym)

{
  iterator __position;
  bool bVar1;
  
  if ((sym->field_0x2a & 7) == 0) {
    if ((sym->field_0x2b & 0x20) == 0) {
      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);
      if (bVar1) {
        if ((sym->field_0x2a & 7) != 0) {
          return;
        }
        if ((sym->field_0x2b & 0x20) != 0) {
          return;
        }
        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);
        if (!bVar1) {
          return;
        }
      }
    }
    else if ((sym->u2_).shndx == 0) {
      return;
    }
  }
  else if ((sym->field_0x2a & 7) == 4) {
    return;
  }
  if ((sym->field_0x2b & 0x10) == 0) {
    sym->field_0x2b = sym->field_0x2b | 0x10;
    __position._M_current =
         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
         _M_impl._M_finish;
    if (__position._M_current ==
        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
        _M_impl._M_end_of_storage) {
      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::
      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);
    }
    else {
      *__position._M_current = sym;
      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.
      _M_impl._M_finish = __position._M_current + 1;
    }
  }
  return;
}



void FUN_0018b380(int param_1,int param_2)

{
  int *piVar1;
  char cVar2;
  
  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {
    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {
      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));
      if (cVar2 != '\0') {
        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {
          return;
        }
        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {
          return;
        }
        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));
        if (cVar2 == '\0') {
          return;
        }
      }
    }
    else if (*(int *)(param_2 + 0xc) == 0) {
      return;
    }
  }
  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {
    return;
  }
  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {
    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;
    piVar1 = *(int **)(param_1 + 0xf8);
    if (piVar1 == *(int **)(param_1 + 0xfc)) {
      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);
    }
    else {
      *piVar1 = param_2;
      *(int **)(param_1 + 0xf8) = piVar1 + 1;
    }
  }
  return;
}


PUSH EBX
SUB ESP,0x8
MOV EAX,dword ptr [ESP + 0x14]
MOV EBX,dword ptr [ESP + 0x10]
MOVZX EDX,byte ptr [EAX + 0x2a]
AND EDX,0x7
JNZ 0x0018b410
MOV EDX,dword ptr [EAX + 0xc]
TEST byte ptr [EAX + 0x2b],0x20
JZ 0x0018b3d0
TEST EDX,EDX
JZ 0x0018b3ca
MOVZX EDX,byte ptr [EAX + 0x2b]
TEST DL,0x10
JNZ 0x0018b3ca
OR EDX,0x10
MOV byte ptr [EAX + 0x2b],DL
MOV EDX,dword ptr [EBX + 0xf8]
CMP EDX,dword ptr [EBX + 0xfc]
JZ 0x0018b420
MOV dword ptr [EDX],EAX
ADD EDX,0x4
MOV dword ptr [EBX + 0xf8],EDX
ADD ESP,0x8
POP EBX
RET
SUB ESP,0xc
PUSH EDX
CALL 0x0018a8d0
ADD ESP,0x10
TEST AL,AL
MOV EAX,dword ptr [ESP + 0x14]
JZ 0x0018b3a2
TEST byte ptr [EAX + 0x2a],0x7
JNZ 0x0018b3ca
MOV EDX,dword ptr [EAX + 0xc]
TEST byte ptr [EAX + 0x2b],0x20
JNZ 0x0018b3ca
SUB ESP,0xc
PUSH EDX
CALL 0x0018a8d0
ADD ESP,0x10
TEST AL,AL
JZ 0x0018b3ca
MOV EAX,dword ptr [ESP + 0x14]
JMP 0x0018b3a2
CMP DL,0x4
JNZ 0x0018b3a2
ADD ESP,0x8
POP EBX
RET
SUB ESP,0x4
ADD EBX,0xf4
LEA EAX,[ESP + 0x18]
PUSH EAX
PUSH EDX
PUSH EBX
CALL 0x0005e8c0
ADD ESP,0x10
JMP 0x0018b3ca
(translation_unit "void FUN_0018b380(int param_1,int param_2)\n\n{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018b380(int param_1,int param_2)\n\n{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018b380(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }" { (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }" { (expression_statement "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc))" identifier = (call_expression "FUN_0018a8d0(*(int *)(param_2 + 0xc))" identifier (argument_list "(*(int *)(param_2 + 0xc))" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" { (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) != 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) != 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (expression_statement "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" identifier = (call_expression "FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" identifier (argument_list "(*(undefined4 *)(param_2 + 0xc))" ( (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 == '\0') {\n          return;\n        }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) }) (else_clause "else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" else (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" ( (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })))) }) (else_clause "else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" else (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 4)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 4" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })))) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" { (expression_statement "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;" (assignment_expression "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) | number_literal)) ;) (expression_statement "piVar1 = *(int **)(param_1 + 0xf8);" (assignment_expression "piVar1 = *(int **)(param_1 + 0xf8)" identifier = (pointer_expression "*(int **)(param_1 + 0xf8)" * (cast_expression "(int **)(param_1 + 0xf8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf8)" ( (binary_expression "param_1 + 0xf8" identifier + number_literal) ))))) ;) (if_statement "if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" if (parenthesized_expression "(piVar1 == *(int **)(param_1 + 0xfc))" ( (binary_expression "piVar1 == *(int **)(param_1 + 0xfc)" identifier == (pointer_expression "*(int **)(param_1 + 0xfc)" * (cast_expression "(int **)(param_1 + 0xfc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xfc)" ( (binary_expression "param_1 + 0xfc" identifier + number_literal) ))))) )) (compound_statement "{\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }" { (expression_statement "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);" (call_expression "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2)" identifier (argument_list "(param_1 + 0xf4,piVar1,&param_2)" ( (binary_expression "param_1 + 0xf4" identifier + number_literal) , identifier , (pointer_expression "&param_2" & identifier) ))) ;) }) (else_clause "else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" else (compound_statement "{\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" { (expression_statement "*piVar1 = param_2;" (assignment_expression "*piVar1 = param_2" (pointer_expression "*piVar1" * identifier) = identifier) ;) (expression_statement "*(int **)(param_1 + 0xf8) = piVar1 + 1;" (assignment_expression "*(int **)(param_1 + 0xf8) = piVar1 + 1" (pointer_expression "*(int **)(param_1 + 0xf8)" * (cast_expression "(int **)(param_1 + 0xf8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf8)" ( (binary_expression "param_1 + 0xf8" identifier + number_literal) )))) = (binary_expression "piVar1 + 1" identifier + number_literal)) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void force_local(Symbol_table * this, Symbol * sym) */\n\nvoid __thiscall gold::Symbol_table::force_local(Symbol_table *this,Symbol *sym)\n\n{\n  iterator __position;\n  bool bVar1;\n  \n  if ((sym->field_0x2a & 7) == 0) {\n    if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }\n  }\n  else if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }\n  if ((sym->field_0x2b & 0x10) == 0) {\n    sym->field_0x2b = sym->field_0x2b | 0x10;\n    __position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;\n    if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Symbol_table::force_local(Symbol_table *this,Symbol *sym)\n\n{\n  iterator __position;\n  bool bVar1;\n  \n  if ((sym->field_0x2a & 7) == 0) {\n    if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }\n  }\n  else if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }\n  if ((sym->field_0x2b & 0x10) == 0) {\n    sym->field_0x2b = sym->field_0x2b | 0x10;\n    __position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;\n    if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Symbol_table::" identifier : : identifier : :) (function_declarator "force_local(Symbol_table *this,Symbol *sym)" identifier (parameter_list "(Symbol_table *this,Symbol *sym)" ( (parameter_declaration "Symbol_table *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol *sym" type_identifier (pointer_declarator "*sym" * identifier)) ))) (compound_statement "{\n  iterator __position;\n  bool bVar1;\n  \n  if ((sym->field_0x2a & 7) == 0) {\n    if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }\n  }\n  else if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }\n  if ((sym->field_0x2b & 0x10) == 0) {\n    sym->field_0x2b = sym->field_0x2b | 0x10;\n    __position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;\n    if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }\n  }\n  return;\n}" { (declaration "iterator __position;" type_identifier identifier ;) (declaration "bool bVar1;" primitive_type identifier ;) (if_statement "if ((sym->field_0x2a & 7) == 0) {\n    if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }\n  }\n  else if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((sym->field_0x2a & 7) == 0)" ( (binary_expression "(sym->field_0x2a & 7) == 0" (parenthesized_expression "(sym->field_0x2a & 7)" ( (binary_expression "sym->field_0x2a & 7" (field_expression "sym->field_0x2a" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }\n  }" { (if_statement "if ((sym->field_0x2b & 0x20) == 0) {\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }\n    else if ((sym->u2_).shndx == 0) {\n      return;\n    }" if (parenthesized_expression "((sym->field_0x2b & 0x20) == 0)" ( (binary_expression "(sym->field_0x2b & 0x20) == 0" (parenthesized_expression "(sym->field_0x2b & 0x20)" ( (binary_expression "sym->field_0x2b & 0x20" (field_expression "sym->field_0x2b" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n      if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }\n    }" { (ERROR "bVar1 = Symbol::" (assignment_expression "bVar1 = Symbol" identifier = identifier) : :) (expression_statement "is_common_shndx((sym->u2_).shndx);" (call_expression "is_common_shndx((sym->u2_).shndx)" identifier (argument_list "((sym->u2_).shndx)" ( (field_expression "(sym->u2_).shndx" (parenthesized_expression "(sym->u2_)" ( (field_expression "sym->u2_" identifier -> field_identifier) )) . field_identifier) ))) ;) (if_statement "if (bVar1) {\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n        if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }\n        if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }\n        bVar1 = Symbol::is_common_shndx((sym->u2_).shndx);\n        if (!bVar1) {\n          return;\n        }\n      }" { (if_statement "if ((sym->field_0x2a & 7) != 0) {\n          return;\n        }" if (parenthesized_expression "((sym->field_0x2a & 7) != 0)" ( (binary_expression "(sym->field_0x2a & 7) != 0" (parenthesized_expression "(sym->field_0x2a & 7)" ( (binary_expression "sym->field_0x2a & 7" (field_expression "sym->field_0x2a" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (if_statement "if ((sym->field_0x2b & 0x20) != 0) {\n          return;\n        }" if (parenthesized_expression "((sym->field_0x2b & 0x20) != 0)" ( (binary_expression "(sym->field_0x2b & 0x20) != 0" (parenthesized_expression "(sym->field_0x2b & 0x20)" ( (binary_expression "sym->field_0x2b & 0x20" (field_expression "sym->field_0x2b" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (ERROR "bVar1 = Symbol::" (assignment_expression "bVar1 = Symbol" identifier = identifier) : :) (expression_statement "is_common_shndx((sym->u2_).shndx);" (call_expression "is_common_shndx((sym->u2_).shndx)" identifier (argument_list "((sym->u2_).shndx)" ( (field_expression "(sym->u2_).shndx" (parenthesized_expression "(sym->u2_)" ( (field_expression "sym->u2_" identifier -> field_identifier) )) . field_identifier) ))) ;) (if_statement "if (!bVar1) {\n          return;\n        }" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) }) (else_clause "else if ((sym->u2_).shndx == 0) {\n      return;\n    }" else (if_statement "if ((sym->u2_).shndx == 0) {\n      return;\n    }" if (parenthesized_expression "((sym->u2_).shndx == 0)" ( (binary_expression "(sym->u2_).shndx == 0" (field_expression "(sym->u2_).shndx" (parenthesized_expression "(sym->u2_)" ( (field_expression "sym->u2_" identifier -> field_identifier) )) . field_identifier) == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })))) }) (else_clause "else if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }" else (if_statement "if ((sym->field_0x2a & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((sym->field_0x2a & 7) == 4)" ( (binary_expression "(sym->field_0x2a & 7) == 4" (parenthesized_expression "(sym->field_0x2a & 7)" ( (binary_expression "sym->field_0x2a & 7" (field_expression "sym->field_0x2a" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })))) (if_statement "if ((sym->field_0x2b & 0x10) == 0) {\n    sym->field_0x2b = sym->field_0x2b | 0x10;\n    __position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;\n    if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }\n  }" if (parenthesized_expression "((sym->field_0x2b & 0x10) == 0)" ( (binary_expression "(sym->field_0x2b & 0x10) == 0" (parenthesized_expression "(sym->field_0x2b & 0x10)" ( (binary_expression "sym->field_0x2b & 0x10" (field_expression "sym->field_0x2b" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    sym->field_0x2b = sym->field_0x2b | 0x10;\n    __position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;\n    if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }\n  }" { (expression_statement "sym->field_0x2b = sym->field_0x2b | 0x10;" (assignment_expression "sym->field_0x2b = sym->field_0x2b | 0x10" (field_expression "sym->field_0x2b" identifier -> field_identifier) = (binary_expression "sym->field_0x2b | 0x10" (field_expression "sym->field_0x2b" identifier -> field_identifier) | number_literal)) ;) (expression_statement "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish;" (field_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl._M_finish" (field_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n         _M_impl" (binary_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold::Symbol*,_std" (assignment_expression "__position._M_current =\n         (this->forced_locals_).super__Vector_base<gold" (field_expression "__position._M_current" identifier . field_identifier) = (binary_expression "(this->forced_locals_).super__Vector_base<gold" (field_expression "(this->forced_locals_).super__Vector_base" (parenthesized_expression "(this->forced_locals_)" ( (field_expression "this->forced_locals_" 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) ;) (if_statement "if (__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage) {\n      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }\n    else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }" if (parenthesized_expression "(__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage)" ( (field_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl._M_end_of_storage" (field_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n        _M_impl" (binary_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold::Symbol*,_std" (binary_expression "__position._M_current ==\n        (this->forced_locals_).super__Vector_base<gold" (field_expression "__position._M_current" identifier . field_identifier) == (binary_expression "(this->forced_locals_).super__Vector_base<gold" (field_expression "(this->forced_locals_).super__Vector_base" (parenthesized_expression "(this->forced_locals_)" ( (field_expression "this->forced_locals_" 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      std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::Symbol*_const&>(&this->forced_locals_,__position,&sym);\n    }" { (ERROR "std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>::\n      _M_realloc_insert<gold::" (comma_expression "std::vector<gold::Symbol*,_std" identifier (ERROR "::vector<gold::Symbol*" : : (binary_expression "vector<gold" identifier < identifier) : : identifier *) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : (binary_expression "Symbol*>_>::\n      _M_realloc_insert<gold" (binary_expression "Symbol*>_>::\n      _M_realloc_insert" (binary_expression "Symbol*>_" identifier * (ERROR ">" >) identifier) > (ERROR "::" : :) identifier) < identifier) : :) (expression_statement "Symbol*_const&>(&this->forced_locals_,__position,&sym);" (binary_expression "Symbol*_const&>(&this->forced_locals_,__position,&sym)" (binary_expression "Symbol*_const" identifier * identifier) (ERROR "&" &) > (parenthesized_expression "(&this->forced_locals_,__position,&sym)" ( (comma_expression "&this->forced_locals_,__position,&sym" (pointer_expression "&this->forced_locals_" & (field_expression "this->forced_locals_" identifier -> field_identifier)) , (comma_expression "__position,&sym" identifier , (pointer_expression "&sym" & identifier))) ))) ;) }) (else_clause "else {\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }" else (compound_statement "{\n      *__position._M_current = sym;\n      (this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;\n    }" { (expression_statement "*__position._M_current = sym;" (assignment_expression "*__position._M_current = sym" (pointer_expression "*__position._M_current" * (field_expression "__position._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1;" (assignment_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish = __position._M_current + 1" (field_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl._M_finish" (field_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>.\n      _M_impl" (binary_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "(this->forced_locals_).super__Vector_base<gold::Symbol*,_std" (binary_expression "(this->forced_locals_).super__Vector_base<gold" (field_expression "(this->forced_locals_).super__Vector_base" (parenthesized_expression "(this->forced_locals_)" ( (field_expression "this->forced_locals_" 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) = (binary_expression "__position._M_current + 1" (field_expression "__position._M_current" identifier . field_identifier) + number_literal)) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0018b380(int param_1,int param_2)\n\n{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018b380(int param_1,int param_2)\n\n{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018b380(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }" { (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }" { (expression_statement "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc))" identifier = (call_expression "FUN_0018a8d0(*(int *)(param_2 + 0xc))" identifier (argument_list "(*(int *)(param_2 + 0xc))" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" { (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) != 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) != 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (expression_statement "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" identifier = (call_expression "FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" identifier (argument_list "(*(undefined4 *)(param_2 + 0xc))" ( (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 == '\0') {\n          return;\n        }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) }) (else_clause "else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" else (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" ( (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })))) }) (else_clause "else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" else (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 4)" ( (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 4" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" ( (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" * (cast_expression "(byte *)(param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2a)" ( (binary_expression "param_2 + 0x2a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })))) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x2b) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" { (expression_statement "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;" (assignment_expression "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" * (cast_expression "(byte *)(param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x2b)" ( (binary_expression "param_2 + 0x2b" identifier + number_literal) )))) | number_literal)) ;) (expression_statement "piVar1 = *(int **)(param_1 + 0xf8);" (assignment_expression "piVar1 = *(int **)(param_1 + 0xf8)" identifier = (pointer_expression "*(int **)(param_1 + 0xf8)" * (cast_expression "(int **)(param_1 + 0xf8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf8)" ( (binary_expression "param_1 + 0xf8" identifier + number_literal) ))))) ;) (if_statement "if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" if (parenthesized_expression "(piVar1 == *(int **)(param_1 + 0xfc))" ( (binary_expression "piVar1 == *(int **)(param_1 + 0xfc)" identifier == (pointer_expression "*(int **)(param_1 + 0xfc)" * (cast_expression "(int **)(param_1 + 0xfc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xfc)" ( (binary_expression "param_1 + 0xfc" identifier + number_literal) ))))) )) (compound_statement "{\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }" { (expression_statement "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);" (call_expression "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2)" identifier (argument_list "(param_1 + 0xf4,piVar1,&param_2)" ( (binary_expression "param_1 + 0xf4" identifier + number_literal) , identifier , (pointer_expression "&param_2" & identifier) ))) ;) }) (else_clause "else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" else (compound_statement "{\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" { (expression_statement "*piVar1 = param_2;" (assignment_expression "*piVar1 = param_2" (pointer_expression "*piVar1" * identifier) = identifier) ;) (expression_statement "*(int **)(param_1 + 0xf8) = piVar1 + 1;" (assignment_expression "*(int **)(param_1 + 0xf8) = piVar1 + 1" (pointer_expression "*(int **)(param_1 + 0xf8)" * (cast_expression "(int **)(param_1 + 0xf8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf8)" ( (binary_expression "param_1 + 0xf8" identifier + number_literal) )))) = (binary_expression "piVar1 + 1" identifier + number_literal)) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (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 { (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (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 { (return_statement return ;) })) (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 { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return ;) })) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return ;) })))) }) (else_clause else (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 { (return_statement return ;) })))) (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | 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 { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , (pointer_expression & 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)) ;) }))) })) (return_statement return ;) })))
(function_definition "void FUN_0018b380(int param_1,int param_2)\n\n{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0018b380(int param_1,int param_2)" (identifier "FUN_0018b380") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  \n  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }\n  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }\n  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" (* "*") (cast_expression "(byte *)(param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2a)" (( "(") (binary_expression "param_2 + 0x2a" (identifier "param_2") (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }\n  }" ({ "{") (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }\n    else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" (* "*") (cast_expression "(byte *)(param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2b)" (( "(") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));\n      if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }\n    }" ({ "{") (expression_statement "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc))" (identifier "cVar2") (= "=") (call_expression "FUN_0018a8d0(*(int *)(param_2 + 0xc))" (identifier "FUN_0018a8d0") (argument_list "(*(int *)(param_2 + 0xc))" (( "(") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) () ")")))) (; ";")) (if_statement "if (cVar2 != '\0') {\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }\n        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }\n        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));\n        if (cVar2 == '\0') {\n          return;\n        }\n      }" ({ "{") (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {\n          return;\n        }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) != 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" (* "*") (cast_expression "(byte *)(param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2a)" (( "(") (binary_expression "param_2 + 0x2a" (identifier "param_2") (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "7")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {\n          return;\n        }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x20) != 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x20)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2b) & 0x20" (pointer_expression "*(byte *)(param_2 + 0x2b)" (* "*") (cast_expression "(byte *)(param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2b)" (( "(") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));" (assignment_expression "cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" (identifier "cVar2") (= "=") (call_expression "FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc))" (identifier "FUN_0018a8d0") (argument_list "(*(undefined4 *)(param_2 + 0xc))" (( "(") (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n          return;\n        }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" (else "else") (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n      return;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))))) (} "}")) (else_clause "else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" (else "else") (if_statement "if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {\n    return;\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2a) & 7) == 4)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2a) & 7) == 4" (parenthesized_expression "(*(byte *)(param_2 + 0x2a) & 7)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2a) & 7" (pointer_expression "*(byte *)(param_2 + 0x2a)" (* "*") (cast_expression "(byte *)(param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2a)" (( "(") (binary_expression "param_2 + 0x2a" (identifier "param_2") (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "4")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))))) (if_statement "if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 0x2b) & 0x10) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x2b) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x2b) & 0x10)" (( "(") (binary_expression "*(byte *)(param_2 + 0x2b) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" (* "*") (cast_expression "(byte *)(param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2b)" (( "(") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;\n    piVar1 = *(int **)(param_1 + 0xf8);\n    if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }\n  }" ({ "{") (expression_statement "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;" (assignment_expression "*(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" (* "*") (cast_expression "(byte *)(param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2b)" (( "(") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) () ")")))) (= "=") (binary_expression "*(byte *)(param_2 + 0x2b) | 0x10" (pointer_expression "*(byte *)(param_2 + 0x2b)" (* "*") (cast_expression "(byte *)(param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x2b)" (( "(") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) () ")")))) (| "|") (number_literal "0x10"))) (; ";")) (expression_statement "piVar1 = *(int **)(param_1 + 0xf8);" (assignment_expression "piVar1 = *(int **)(param_1 + 0xf8)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(param_1 + 0xf8)" (* "*") (cast_expression "(int **)(param_1 + 0xf8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xf8)" (( "(") (binary_expression "param_1 + 0xf8" (identifier "param_1") (+ "+") (number_literal "0xf8")) () ")"))))) (; ";")) (if_statement "if (piVar1 == *(int **)(param_1 + 0xfc)) {\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }\n    else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" (if "if") (parenthesized_expression "(piVar1 == *(int **)(param_1 + 0xfc))" (( "(") (binary_expression "piVar1 == *(int **)(param_1 + 0xfc)" (identifier "piVar1") (== "==") (pointer_expression "*(int **)(param_1 + 0xfc)" (* "*") (cast_expression "(int **)(param_1 + 0xfc)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xfc)" (( "(") (binary_expression "param_1 + 0xfc" (identifier "param_1") (+ "+") (number_literal "0xfc")) () ")"))))) () ")")) (compound_statement "{\n      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);\n    }" ({ "{") (expression_statement "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);" (call_expression "FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2)" (identifier "FUN_0005e8c0") (argument_list "(param_1 + 0xf4,piVar1,&param_2)" (( "(") (binary_expression "param_1 + 0xf4" (identifier "param_1") (+ "+") (number_literal "0xf4")) (, ",") (identifier "piVar1") (, ",") (pointer_expression "&param_2" (& "&") (identifier "param_2")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" (else "else") (compound_statement "{\n      *piVar1 = param_2;\n      *(int **)(param_1 + 0xf8) = piVar1 + 1;\n    }" ({ "{") (expression_statement "*piVar1 = param_2;" (assignment_expression "*piVar1 = param_2" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*(int **)(param_1 + 0xf8) = piVar1 + 1;" (assignment_expression "*(int **)(param_1 + 0xf8) = piVar1 + 1" (pointer_expression "*(int **)(param_1 + 0xf8)" (* "*") (cast_expression "(int **)(param_1 + 0xf8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xf8)" (( "(") (binary_expression "param_1 + 0xf8" (identifier "param_1") (+ "+") (number_literal "0xf8")) () ")")))) (= "=") (binary_expression "piVar1 + 1" (identifier "piVar1") (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void force_local(Symbol_table * this, Symbol * sym) */

void __thiscall var_2::type_1::function_1(type_1 *this,type_2 *sym)

{
  type_3 __position;
  bool bVar1;
  
  if ((sym->field_0x2a & 7) == 0) {
    if ((sym->field_0x2b & 0x20) == 0) {
      bVar1 = type_2::var_1((sym->u2_).shndx);
      if (bVar1) {
        if ((sym->field_0x2a & 7) != 0) {
          return;
        }
        if ((sym->field_0x2b & 0x20) != 0) {
          return;
        }
        bVar1 = type_2::var_1((sym->u2_).shndx);
        if (!bVar1) {
          return;
        }
      }
    }
    else if ((sym->u2_).shndx == 0) {
      return;
    }
  }
  else if ((sym->field_0x2a & 7) == 4) {
    return;
  }
  if ((sym->field_0x2b & 0x10) == 0) {
    sym->field_0x2b = sym->field_0x2b | 0x10;
    __position._M_current =
         (this->forced_locals_).super__Vector_base<var_2::type_2*,var_3::allocator<var_2::type_2*>var_4>.
         _M_impl._M_finish;
    if (__position._M_current ==
        (this->forced_locals_).super__Vector_base<var_2::type_2*,var_3::allocator<var_2::type_2*>var_4>.
        _M_impl._M_end_of_storage) {
      std::vector<var_2::type_2*,var_3::allocator<var_2::type_2*>var_4>::
      _M_realloc_insert<var_2::type_2*var_5&>(&this->forced_locals_,__position,&sym);
    }
    else {
      *__position._M_current = sym;
      (this->forced_locals_).super__Vector_base<var_2::type_2*,var_3::allocator<var_2::type_2*>var_4>.
      _M_impl._M_finish = __position._M_current + 1;
    }
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (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 (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 (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))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (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 (return_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 (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (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))) consequence: (compound_statement (return_statement)))))) alternative: (else_clause (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 (return_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: (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: (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)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (primitive_type) 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) (pointer_expression argument: (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: (primitive_type) 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))))))))) (return_statement))))

void MASKED(int param_1,int param_2)

{
  int *piVar1;
  char cVar2;
  
  if ((*(byte *)(param_2 + 0x2a) & 7) == 0) {
    if ((*(byte *)(param_2 + 0x2b) & 0x20) == 0) {
      cVar2 = FUN_0018a8d0(*(int *)(param_2 + 0xc));
      if (cVar2 != '\0') {
        if ((*(byte *)(param_2 + 0x2a) & 7) != 0) {
          return;
        }
        if ((*(byte *)(param_2 + 0x2b) & 0x20) != 0) {
          return;
        }
        cVar2 = FUN_0018a8d0(*(undefined4 *)(param_2 + 0xc));
        if (cVar2 == '\0') {
          return;
        }
      }
    }
    else if (*(int *)(param_2 + 0xc) == 0) {
      return;
    }
  }
  else if ((*(byte *)(param_2 + 0x2a) & 7) == 4) {
    return;
  }
  if ((*(byte *)(param_2 + 0x2b) & 0x10) == 0) {
    *(byte *)(param_2 + 0x2b) = *(byte *)(param_2 + 0x2b) | 0x10;
    piVar1 = *(int **)(param_1 + 0xf8);
    if (piVar1 == *(int **)(param_1 + 0xfc)) {
      FUN_0005e8c0(param_1 + 0xf4,piVar1,&param_2);
    }
    else {
      *piVar1 = param_2;
      *(int **)(param_1 + 0xf8) = piVar1 + 1;
    }
  }
  return;
}

