
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void clear_views(File_read * this, Clear_views_mode mode) */

void __thiscall gold::File_read::clear_views(File_read *this,Clear_views_mode mode)

{
  _Rb_tree_header *p_Var1;
  size_t *psVar2;
  char cVar3;
  View *pVVar4;
  _List_node_base *p_Var5;
  _List_node_base *this_00;
  _Rb_tree_node_base *p_Var6;
  _Rb_tree_node_base *p_Var7;
  void *pvVar8;
  _Rb_tree_header *in_stack_ffffffc8;
  
  cVar3 = '\0';
  if (parameters->options_ != (General_options *)0x0) {
    cVar3 = (parameters->options_->keep_files_mapped_).value;
  }
  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;
  p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;
  do {
    while( true ) {
      if ((_Rb_tree_header *)p_Var6 == p_Var1) {
        this_00 = (this->saved_views_).
                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.
                  _M_impl._M_node.super__List_node_base._M_next;
        while( true ) {
          while( true ) {
            if (this_00 == (_List_node_base *)&this->saved_views_) {
              return;
            }
            pVVar4 = (View *)this_00[1]._M_next;
            if (0 < pVVar4->lock_count_) break;
            View::~View(pVVar4,(int)in_stack_ffffffc8);
            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;
            operator_delete(pVVar4,0x24);
            p_Var5 = this_00->_M_next;
            psVar2 = &(this->saved_views_).
                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>
                      ._M_impl._M_node._M_size;
            *psVar2 = *psVar2 - 1;
            std::__detail::_List_node_base::_M_unhook(this_00);
            operator_delete(this_00);
            this_00 = p_Var5;
          }
          if (mode == CLEAR_VIEWS_ALL) break;
          this_00 = this_00->_M_next;
        }
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");
      }
      pVVar4 = (View *)p_Var6[1]._M_right;
      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))
      goto LAB_0005ca5d;
      if (mode != CLEAR_VIEWS_ALL) break;
LAB_0005cba8:
      if (pVVar4 == this->whole_file_view_) {
        this->whole_file_view_ = (View *)0x0;
      }
LAB_0005cb30:
      View::~View(pVVar4,(int)in_stack_ffffffc8);
      operator_delete(pVVar4,0x24);
      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);
      in_stack_ffffffc8 = p_Var1;
      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);
      operator_delete(pvVar8);
      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;
      *psVar2 = *psVar2 - 1;
      p_Var6 = p_Var7;
    }
    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {
      if ((cVar3 != '\0') ||
         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&
          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;
      goto LAB_0005cba8;
    }
    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)
       ) goto LAB_0005cb30;
LAB_0005ca5d:
    pVVar4->accessed_ = false;
    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);
  } while( true );
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_0005ca10(int param_1,int param_2)

{
  char cVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  
  cVar1 = '\0';
  if (*(int *)(DAT_00302378 + 8) != 0) {
    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);
  }
  iVar4 = *(int *)(param_1 + 0x4c);
  do {
    while( true ) {
      if (iVar4 == param_1 + 0x44) {
        puVar3 = *(undefined4 **)(param_1 + 0x58);
        while( true ) {
          while( true ) {
            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {
              return;
            }
            iVar4 = puVar3[2];
            if (0 < *(int *)(iVar4 + 0x10)) break;
            FUN_0005b9b0(iVar4);
            FUN_00180780(iVar4,0x24);
            puVar2 = (undefined4 *)*puVar3;
            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;
            FUN_00183980(puVar3);
            FUN_001807a0(puVar3);
            puVar3 = puVar2;
          }
          if (param_2 == 2) break;
          puVar3 = (undefined4 *)*puVar3;
        }
                    /* WARNING: Subroutine does not return */
        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");
      }
      iVar5 = *(int *)(iVar4 + 0x1c);
      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;
      if (param_2 != 2) break;
LAB_0005cba8:
      if (iVar5 == *(int *)(param_1 + 0x6c)) {
        *(undefined4 *)(param_1 + 0x6c) = 0;
      }
LAB_0005cb30:
      FUN_0005b9b0(iVar5);
      FUN_00180780(iVar5,0x24);
      iVar5 = FUN_00181d80(iVar4);
      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);
      FUN_001807a0(uVar6);
      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;
      iVar4 = iVar5;
    }
    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {
      if ((cVar1 != '\0') ||
         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))
      goto LAB_0005ca5d;
      goto LAB_0005cba8;
    }
    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))
    goto LAB_0005cb30;
LAB_0005ca5d:
    *(undefined1 *)(iVar5 + 0x20) = 0;
    iVar4 = FUN_00181d80(iVar4);
  } while( true );
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00032730
ADD EBX,0x2a55e7
SUB ESP,0x1c
MOV ESI,dword ptr [ESP + 0x30]
MOV byte ptr [ESP + 0x8],0x0
LEA EAX,[EBX + 0x378]
MOV EAX,dword ptr [EAX]
MOV EAX,dword ptr [EAX + 0x8]
TEST EAX,EAX
JZ 0x0005ca45
MOVZX EAX,byte ptr [EAX + 0x1fe9]
MOV byte ptr [ESP + 0x8],AL
MOV EDI,dword ptr [ESI + 0x4c]
LEA EBP,[ESI + 0x44]
CMP EDI,EBP
JZ 0x0005ca73
MOV EAX,dword ptr [EDI + 0x1c]
MOV EDX,dword ptr [EAX + 0x10]
TEST EDX,EDX
JLE 0x0005caf0
SUB ESP,0xc
MOV byte ptr [EAX + 0x20],0x0
PUSH EDI
CALL 0x00181d80
ADD ESP,0x10
MOV EDI,EAX
CMP EDI,EBP
JNZ 0x0005ca4f
MOV EDI,dword ptr [ESI + 0x58]
LEA EDX,[ESI + 0x58]
LEA ESI,[ESI]
CMP EDI,EDX
JZ 0x0005ca9f
MOV EBP,dword ptr [EDI + 0x8]
MOV ECX,dword ptr [EBP + 0x10]
TEST ECX,ECX
JLE 0x0005cab0
CMP dword ptr [ESP + 0x34],0x2
JZ 0x0005cbb9
MOV EDI,dword ptr [EDI]
CMP EDI,EDX
JNZ 0x0005ca84
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [ESP + 0x8],EDX
SUB ESP,0xc
PUSH EBP
CALL 0x0005b9b0
POP EAX
POP EDX
PUSH 0x24
PUSH EBP
CALL 0x00180780
MOV EBP,dword ptr [EDI]
SUB dword ptr [ESI + 0x60],0x1
MOV dword ptr [ESP],EDI
CALL 0x00183980
MOV dword ptr [ESP],EDI
MOV EDI,EBP
CALL 0x001807a0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x8]
JMP 0x0005ca80
MOV ECX,dword ptr [EAX + 0x1c]
TEST ECX,ECX
JZ 0x0005ca5d
CMP dword ptr [ESP + 0x34],0x2
JZ 0x0005cba8
CMP byte ptr [EAX + 0x18],0x0
JNZ 0x0005cb80
CMP EAX,dword ptr [ESI + 0x6c]
JZ 0x0005cb80
CMP dword ptr [ESI + 0x20],0x1
JLE 0x0005cb30
CMP byte ptr [EAX + 0x20],0x0
JZ 0x0005cb30
CMP dword ptr [ESP + 0x34],0x1
JNZ 0x0005ca5d
LEA ESI,[ESI]
NOP
SUB ESP,0xc
PUSH EAX
MOV dword ptr [ESP + 0x1c],EAX
CALL 0x0005b9b0
POP EAX
POP EDX
PUSH 0x24
MOV EAX,dword ptr [ESP + 0x18]
PUSH EAX
CALL 0x00180780
MOV dword ptr [ESP],EDI
CALL 0x00181d80
POP ECX
POP EDX
MOV dword ptr [ESP + 0x14],EAX
PUSH EBP
PUSH EDI
CALL 0x00182170
MOV dword ptr [ESP],EAX
CALL 0x001807a0
ADD ESP,0x10
SUB dword ptr [ESI + 0x54],0x1
MOV EDI,dword ptr [ESP + 0xc]
JMP 0x0005ca4b
CMP byte ptr [ESP + 0x8],0x0
JNZ 0x0005ca5d
CMP dword ptr [ESI + 0x20],0x1
JLE 0x0005cba8
CMP byte ptr [EAX + 0x20],0x0
JZ 0x0005cba8
CMP dword ptr [ESP + 0x34],0x1
JNZ 0x0005ca5d
LEA ESI,[ESI]
CMP EAX,dword ptr [ESI + 0x6c]
JNZ 0x0005cb30
MOV dword ptr [ESI + 0x6c],0x0
JMP 0x0005cb30
SUB ESP,0x4
LEA EAX,[EBX + 0xfff1ed40]
PUSH EAX
LEA EAX,[EBX + 0xfff1eab4]
PUSH 0x34c
PUSH EAX
CALL 0x0005f0b0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_0005ca10(int param_1,int param_2)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}\n\n" comment (function_definition "void FUN_0005ca10(int param_1,int param_2)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" primitive_type (function_declarator "FUN_0005ca10(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  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (expression_statement "cVar1 = '\0';" (assignment_expression "cVar1 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" if (parenthesized_expression "(*(int *)(DAT_00302378 + 8) != 0)" ( (binary_expression "*(int *)(DAT_00302378 + 8) != 0" (pointer_expression "*(int *)(DAT_00302378 + 8)" * (cast_expression "(int *)(DAT_00302378 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 8)" ( (binary_expression "DAT_00302378 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" { (expression_statement "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);" (assignment_expression "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" identifier = (pointer_expression "*(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" * (cast_expression "(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(DAT_00302378 + 8) + 0x1fe9)" ( (binary_expression "*(int *)(DAT_00302378 + 8) + 0x1fe9" (pointer_expression "*(int *)(DAT_00302378 + 8)" * (cast_expression "(int *)(DAT_00302378 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 8)" ( (binary_expression "DAT_00302378 + 8" identifier + number_literal) )))) + number_literal) ))))) ;) })) (expression_statement "iVar4 = *(int *)(param_1 + 0x4c);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x4c)" identifier = (pointer_expression "*(int *)(param_1 + 0x4c)" * (cast_expression "(int *)(param_1 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) (do_statement "do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  }" { (while_statement "while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" { (if_statement "if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" if (parenthesized_expression "(iVar4 == param_1 + 0x44)" ( (binary_expression "iVar4 == param_1 + 0x44" identifier == (binary_expression "param_1 + 0x44" identifier + number_literal)) )) (compound_statement "{\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" { (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x58);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x58)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x58)" * (cast_expression "(undefined4 **)(param_1 + 0x58)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (while_statement "while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" { (while_statement "while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" { (if_statement "if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }" if (parenthesized_expression "(puVar3 == (undefined4 *)(param_1 + 0x58))" ( (binary_expression "puVar3 == (undefined4 *)(param_1 + 0x58)" identifier == (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "iVar4 = puVar3[2];" (assignment_expression "iVar4 = puVar3[2]" identifier = (subscript_expression "puVar3[2]" identifier [ number_literal ])) ;) (if_statement "if (0 < *(int *)(iVar4 + 0x10)) break;" if (parenthesized_expression "(0 < *(int *)(iVar4 + 0x10))" ( (binary_expression "0 < *(int *)(iVar4 + 0x10)" number_literal < (pointer_expression "*(int *)(iVar4 + 0x10)" * (cast_expression "(int *)(iVar4 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) (expression_statement "FUN_0005b9b0(iVar4);" (call_expression "FUN_0005b9b0(iVar4)" identifier (argument_list "(iVar4)" ( identifier ))) ;) (expression_statement "FUN_00180780(iVar4,0x24);" (call_expression "FUN_00180780(iVar4,0x24)" identifier (argument_list "(iVar4,0x24)" ( identifier , number_literal ))) ;) (expression_statement "puVar2 = (undefined4 *)*puVar3;" (assignment_expression "puVar2 = (undefined4 *)*puVar3" identifier = (cast_expression "(undefined4 *)*puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;" (assignment_expression "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "FUN_00183980(puVar3);" (call_expression "FUN_00183980(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "FUN_001807a0(puVar3);" (call_expression "FUN_001807a0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "puVar3 = puVar2;" (assignment_expression "puVar3 = puVar2" identifier = identifier) ;) })) (if_statement "if (param_2 == 2) break;" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = (undefined4 *)*puVar3;" (assignment_expression "puVar3 = (undefined4 *)*puVar3" identifier = (cast_expression "(undefined4 *)*puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) })) comment (expression_statement "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");" (call_expression "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views")" identifier (argument_list "("../../gold/fileread.cc",0x34c,"clear_views")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""clear_views"" " string_content ") ))) ;) })) (expression_statement "iVar5 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar5 = *(int *)(iVar4 + 0x1c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;" if (parenthesized_expression "((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0))" ( (binary_expression "(0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)" (parenthesized_expression "(0 < *(int *)(iVar5 + 0x10))" ( (binary_expression "0 < *(int *)(iVar5 + 0x10)" number_literal < (pointer_expression "*(int *)(iVar5 + 0x10)" * (cast_expression "(int *)(iVar5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x10)" ( (binary_expression "iVar5 + 0x10" identifier + number_literal) ))))) )) || (parenthesized_expression "(*(int *)(iVar5 + 0x1c) == 0)" ( (binary_expression "*(int *)(iVar5 + 0x1c) == 0" (pointer_expression "*(int *)(iVar5 + 0x1c)" * (cast_expression "(int *)(iVar5 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x1c)" ( (binary_expression "iVar5 + 0x1c" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (if_statement "if (param_2 != 2) break;" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" statement_identifier : (if_statement "if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" if (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" ( (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" identifier == (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) )) (compound_statement "{\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" { (expression_statement "*(undefined4 *)(param_1 + 0x6c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x6c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x6c)" * (cast_expression "(undefined4 *)(param_1 + 0x6c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) = number_literal) ;) }))) (labeled_statement "LAB_0005cb30:\n      FUN_0005b9b0(iVar5);" statement_identifier : (expression_statement "FUN_0005b9b0(iVar5);" (call_expression "FUN_0005b9b0(iVar5)" identifier (argument_list "(iVar5)" ( identifier ))) ;)) (expression_statement "FUN_00180780(iVar5,0x24);" (call_expression "FUN_00180780(iVar5,0x24)" identifier (argument_list "(iVar5,0x24)" ( identifier , number_literal ))) ;) (expression_statement "iVar5 = FUN_00181d80(iVar4);" (assignment_expression "iVar5 = FUN_00181d80(iVar4)" identifier = (call_expression "FUN_00181d80(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "uVar6 = FUN_00182170(iVar4,param_1 + 0x44);" (assignment_expression "uVar6 = FUN_00182170(iVar4,param_1 + 0x44)" identifier = (call_expression "FUN_00182170(iVar4,param_1 + 0x44)" identifier (argument_list "(iVar4,param_1 + 0x44)" ( identifier , (binary_expression "param_1 + 0x44" identifier + number_literal) )))) ;) (expression_statement "FUN_001807a0(uVar6);" (call_expression "FUN_001807a0(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))) ;) (expression_statement "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;" (assignment_expression "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) })) (if_statement "if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" if (parenthesized_expression "((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c)))" ( (binary_expression "(*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))" (parenthesized_expression "(*(char *)(iVar5 + 0x18) != '\0')" ( (binary_expression "*(char *)(iVar5 + 0x18) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x18)" * (cast_expression "(char *)(iVar5 + 0x18)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" ( (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" identifier == (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" { (if_statement "if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;" if (parenthesized_expression "((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))" ( (binary_expression "(cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" ( (parenthesized_expression "((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))" ( (binary_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)" (parenthesized_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0'))" ( (binary_expression "1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')" (binary_expression "1 < *(int *)(param_1 + 0x20)" number_literal < (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) && (parenthesized_expression "(*(char *)(iVar5 + 0x20) != '\0')" ( (binary_expression "*(char *)(iVar5 + 0x20) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" * (cast_expression "(char *)(iVar5 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(param_2 != 1)" ( (binary_expression "param_2 != 1" identifier != number_literal) ))) )) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (goto_statement "goto LAB_0005cba8;" goto statement_identifier ;) })) (if_statement "if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;" if (parenthesized_expression "(((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))" ( (binary_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1)" (parenthesized_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0'))" ( (binary_expression "(*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')" (parenthesized_expression "(*(int *)(param_1 + 0x20) < 2)" ( (binary_expression "*(int *)(param_1 + 0x20) < 2" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) < number_literal) )) || (parenthesized_expression "(*(char *)(iVar5 + 0x20) == '\0')" ( (binary_expression "*(char *)(iVar5 + 0x20) == '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" * (cast_expression "(char *)(iVar5 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) || (parenthesized_expression "(param_2 == 1)" ( (binary_expression "param_2 == 1" identifier == number_literal) ))) )) (goto_statement "goto LAB_0005cb30;" goto statement_identifier ;)) (labeled_statement "LAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;" statement_identifier : (expression_statement "*(undefined1 *)(iVar5 + 0x20) = 0;" (assignment_expression "*(undefined1 *)(iVar5 + 0x20) = 0" (pointer_expression "*(undefined1 *)(iVar5 + 0x20)" * (cast_expression "(undefined1 *)(iVar5 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "iVar4 = FUN_00181d80(iVar4);" (assignment_expression "iVar4 = FUN_00181d80(iVar4)" identifier = (call_expression "FUN_00181d80(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void clear_views(File_read * this, Clear_views_mode mode) */\n\nvoid __thiscall gold::File_read::clear_views(File_read *this,Clear_views_mode mode)\n\n{\n  _Rb_tree_header *p_Var1;\n  size_t *psVar2;\n  char cVar3;\n  View *pVVar4;\n  _List_node_base *p_Var5;\n  _List_node_base *this_00;\n  _Rb_tree_node_base *p_Var6;\n  _Rb_tree_node_base *p_Var7;\n  void *pvVar8;\n  _Rb_tree_header *in_stack_ffffffc8;\n  \n  cVar3 = '\0';\n  if (parameters->options_ != (General_options *)0x0) {\n    cVar3 = (parameters->options_->keep_files_mapped_).value;\n  }\n  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;\n  p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;\n  do {\n    while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }\n    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;\nLAB_0005ca5d:\n    pVVar4->accessed_ = false;\n    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n  } while( true );\n}\n\n" comment comment comment comment (function_definition "void __thiscall gold::File_read::clear_views(File_read *this,Clear_views_mode mode)\n\n{\n  _Rb_tree_header *p_Var1;\n  size_t *psVar2;\n  char cVar3;\n  View *pVVar4;\n  _List_node_base *p_Var5;\n  _List_node_base *this_00;\n  _Rb_tree_node_base *p_Var6;\n  _Rb_tree_node_base *p_Var7;\n  void *pvVar8;\n  _Rb_tree_header *in_stack_ffffffc8;\n  \n  cVar3 = '\0';\n  if (parameters->options_ != (General_options *)0x0) {\n    cVar3 = (parameters->options_->keep_files_mapped_).value;\n  }\n  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;\n  p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;\n  do {\n    while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }\n    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;\nLAB_0005ca5d:\n    pVVar4->accessed_ = false;\n    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n  } while( true );\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::File_read::" identifier : : identifier : :) (function_declarator "clear_views(File_read *this,Clear_views_mode mode)" identifier (parameter_list "(File_read *this,Clear_views_mode mode)" ( (parameter_declaration "File_read *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Clear_views_mode mode" type_identifier identifier) ))) (compound_statement "{\n  _Rb_tree_header *p_Var1;\n  size_t *psVar2;\n  char cVar3;\n  View *pVVar4;\n  _List_node_base *p_Var5;\n  _List_node_base *this_00;\n  _Rb_tree_node_base *p_Var6;\n  _Rb_tree_node_base *p_Var7;\n  void *pvVar8;\n  _Rb_tree_header *in_stack_ffffffc8;\n  \n  cVar3 = '\0';\n  if (parameters->options_ != (General_options *)0x0) {\n    cVar3 = (parameters->options_->keep_files_mapped_).value;\n  }\n  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;\n  p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;\n  do {\n    while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }\n    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;\nLAB_0005ca5d:\n    pVVar4->accessed_ = false;\n    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n  } while( true );\n}" { (declaration "_Rb_tree_header *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "size_t *psVar2;" primitive_type (pointer_declarator "*psVar2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "View *pVVar4;" type_identifier (pointer_declarator "*pVVar4" * identifier) ;) (declaration "_List_node_base *p_Var5;" type_identifier (pointer_declarator "*p_Var5" * identifier) ;) (declaration "_List_node_base *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "_Rb_tree_node_base *p_Var6;" type_identifier (pointer_declarator "*p_Var6" * identifier) ;) (declaration "_Rb_tree_node_base *p_Var7;" type_identifier (pointer_declarator "*p_Var7" * identifier) ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "_Rb_tree_header *in_stack_ffffffc8;" type_identifier (pointer_declarator "*in_stack_ffffffc8" * identifier) ;) (expression_statement "cVar3 = '\0';" (assignment_expression "cVar3 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (parameters->options_ != (General_options *)0x0) {\n    cVar3 = (parameters->options_->keep_files_mapped_).value;\n  }" if (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar3 = (parameters->options_->keep_files_mapped_).value;\n  }" { (expression_statement "cVar3 = (parameters->options_->keep_files_mapped_).value;" (assignment_expression "cVar3 = (parameters->options_->keep_files_mapped_).value" identifier = (field_expression "(parameters->options_->keep_files_mapped_).value" (parenthesized_expression "(parameters->options_->keep_files_mapped_)" ( (field_expression "parameters->options_->keep_files_mapped_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier) )) . field_identifier)) ;) })) (expression_statement "p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;" (assignment_expression "p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header" identifier = (pointer_expression "&(this->views_)._M_t._M_impl.super__Rb_tree_header" & (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->views_)._M_t._M_impl" (field_expression "(this->views_)._M_t" (parenthesized_expression "(this->views_)" ( (field_expression "this->views_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier))) ;) (expression_statement "p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;" (assignment_expression "p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left" identifier = (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left" (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header" (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->views_)._M_t._M_impl" (field_expression "(this->views_)._M_t" (parenthesized_expression "(this->views_)" ( (field_expression "this->views_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier) . field_identifier)) ;) (do_statement "do {\n    while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }\n    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;\nLAB_0005ca5d:\n    pVVar4->accessed_ = false;\n    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }\n    if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;\nLAB_0005ca5d:\n    pVVar4->accessed_ = false;\n    p_Var6 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n  }" { (while_statement "while( true ) {\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      pVVar4 = (View *)p_Var6[1]._M_right;\n      if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;\n      if (mode != CLEAR_VIEWS_ALL) break;\nLAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }\nLAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);\n      operator_delete(pVVar4,0x24);\n      p_Var7 = (_Rb_tree_node_base *)std::_Rb_tree_increment(p_Var6);\n      in_stack_ffffffc8 = p_Var1;\n      pvVar8 = (void *)std::_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);\n      operator_delete(pvVar8);\n      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;\n      *psVar2 = *psVar2 - 1;\n      p_Var6 = p_Var7;\n    }" { (if_statement "if ((_Rb_tree_header *)p_Var6 == p_Var1) {\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }" if (parenthesized_expression "((_Rb_tree_header *)p_Var6 == p_Var1)" ( (binary_expression "(_Rb_tree_header *)p_Var6 == p_Var1" (cast_expression "(_Rb_tree_header *)p_Var6" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) == identifier) )) (compound_statement "{\n        this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;\n        while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");\n      }" { (ERROR "this_00 = (this->saved_views_).\n                  super__List_base<gold::File_read::View*,_std::allocator<gold::" (assignment_expression "this_00 = (this->saved_views_).\n                  super__List_base<gold" identifier = (binary_expression "(this->saved_views_).\n                  super__List_base<gold" (field_expression "(this->saved_views_).\n                  super__List_base" (parenthesized_expression "(this->saved_views_)" ( (field_expression "this->saved_views_" identifier -> field_identifier) )) . field_identifier) < identifier)) : : (comma_expression "File_read::View*,_std" identifier (ERROR "::View*" : : identifier *) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (expression_statement "File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next;" (field_expression "File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base._M_next" (field_expression "File_read::View*>_>.\n                  _M_impl._M_node.super__List_node_base" (field_expression "File_read::View*>_>.\n                  _M_impl._M_node" (field_expression "File_read::View*>_>.\n                  _M_impl" (binary_expression "File_read::View*>_" identifier (ERROR "::View*" : : identifier *) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (while_statement "while( true ) {\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }\n          if (mode == CLEAR_VIEWS_ALL) break;\n          this_00 = this_00->_M_next;\n        }" { (while_statement "while( true ) {\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }\n            pVVar4 = (View *)this_00[1]._M_next;\n            if (0 < pVVar4->lock_count_) break;\n            View::~View(pVVar4,(int)in_stack_ffffffc8);\n            in_stack_ffffffc8 = (_Rb_tree_header *)0x24;\n            operator_delete(pVVar4,0x24);\n            p_Var5 = this_00->_M_next;\n            psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::File_read::View*>_>\n                      ._M_impl._M_node._M_size;\n            *psVar2 = *psVar2 - 1;\n            std::__detail::_List_node_base::_M_unhook(this_00);\n            operator_delete(this_00);\n            this_00 = p_Var5;\n          }" { (if_statement "if (this_00 == (_List_node_base *)&this->saved_views_) {\n              return;\n            }" if (parenthesized_expression "(this_00 == (_List_node_base *)&this->saved_views_)" ( (binary_expression "this_00 == (_List_node_base *)&this->saved_views_" identifier == (cast_expression "(_List_node_base *)&this->saved_views_" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->saved_views_" & (field_expression "this->saved_views_" identifier -> field_identifier)))) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "pVVar4 = (View *)this_00[1]._M_next;" (assignment_expression "pVVar4 = (View *)this_00[1]._M_next" identifier = (cast_expression "(View *)this_00[1]._M_next" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this_00[1]._M_next" (subscript_expression "this_00[1]" identifier [ number_literal ]) . field_identifier))) ;) (if_statement "if (0 < pVVar4->lock_count_) break;" if (parenthesized_expression "(0 < pVVar4->lock_count_)" ( (binary_expression "0 < pVVar4->lock_count_" number_literal < (field_expression "pVVar4->lock_count_" identifier -> field_identifier)) )) (break_statement "break;" break ;)) (labeled_statement "View::~View(pVVar4,(int)in_stack_ffffffc8);" statement_identifier : (ERROR ":" :) (expression_statement "~View(pVVar4,(int)in_stack_ffffffc8);" (unary_expression "~View(pVVar4,(int)in_stack_ffffffc8)" ~ (call_expression "View(pVVar4,(int)in_stack_ffffffc8)" identifier (argument_list "(pVVar4,(int)in_stack_ffffffc8)" ( identifier , (cast_expression "(int)in_stack_ffffffc8" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;)) (expression_statement "in_stack_ffffffc8 = (_Rb_tree_header *)0x24;" (assignment_expression "in_stack_ffffffc8 = (_Rb_tree_header *)0x24" identifier = (cast_expression "(_Rb_tree_header *)0x24" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "operator_delete(pVVar4,0x24);" (call_expression "operator_delete(pVVar4,0x24)" identifier (argument_list "(pVVar4,0x24)" ( identifier , number_literal ))) ;) (expression_statement "p_Var5 = this_00->_M_next;" (assignment_expression "p_Var5 = this_00->_M_next" identifier = (field_expression "this_00->_M_next" identifier -> field_identifier)) ;) (ERROR "psVar2 = &(this->saved_views_).\n                      super__List_base<gold::File_read::View*,_std::allocator<gold::" (assignment_expression "psVar2 = &(this->saved_views_).\n                      super__List_base<gold" identifier = (binary_expression "&(this->saved_views_).\n                      super__List_base<gold" (pointer_expression "&(this->saved_views_).\n                      super__List_base" & (field_expression "(this->saved_views_).\n                      super__List_base" (parenthesized_expression "(this->saved_views_)" ( (field_expression "this->saved_views_" identifier -> field_identifier) )) . field_identifier)) < identifier)) : : (comma_expression "File_read::View*,_std" identifier (ERROR "::View*" : : identifier *) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (expression_statement "File_read::View*>_>\n                      ._M_impl._M_node._M_size;" (field_expression "File_read::View*>_>\n                      ._M_impl._M_node._M_size" (field_expression "File_read::View*>_>\n                      ._M_impl._M_node" (field_expression "File_read::View*>_>\n                      ._M_impl" (binary_expression "File_read::View*>_" identifier (ERROR "::View*" : : identifier *) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) ;) (expression_statement "*psVar2 = *psVar2 - 1;" (assignment_expression "*psVar2 = *psVar2 - 1" (pointer_expression "*psVar2" * identifier) = (binary_expression "*psVar2 - 1" (pointer_expression "*psVar2" * identifier) - number_literal)) ;) (labeled_statement "std::__detail::_List_node_base::_M_unhook(this_00);" statement_identifier : (ERROR ":" :) (labeled_statement "__detail::_List_node_base::_M_unhook(this_00);" statement_identifier : (ERROR ":" :) (labeled_statement "_List_node_base::_M_unhook(this_00);" statement_identifier : (ERROR ":" :) (expression_statement "_M_unhook(this_00);" (call_expression "_M_unhook(this_00)" identifier (argument_list "(this_00)" ( identifier ))) ;)))) (expression_statement "operator_delete(this_00);" (call_expression "operator_delete(this_00)" identifier (argument_list "(this_00)" ( identifier ))) ;) (expression_statement "this_00 = p_Var5;" (assignment_expression "this_00 = p_Var5" identifier = identifier) ;) })) (if_statement "if (mode == CLEAR_VIEWS_ALL) break;" if (parenthesized_expression "(mode == CLEAR_VIEWS_ALL)" ( (binary_expression "mode == CLEAR_VIEWS_ALL" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "this_00 = this_00->_M_next;" (assignment_expression "this_00 = this_00->_M_next" identifier = (field_expression "this_00->_M_next" identifier -> field_identifier)) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views");" (call_expression "do_gold_unreachable("../../gold/fileread.cc",0x34c,"clear_views")" identifier (argument_list "("../../gold/fileread.cc",0x34c,"clear_views")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""clear_views"" " string_content ") ))) ;) })) (expression_statement "pVVar4 = (View *)p_Var6[1]._M_right;" (assignment_expression "pVVar4 = (View *)p_Var6[1]._M_right" identifier = (cast_expression "(View *)p_Var6[1]._M_right" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var6[1]._M_right" (subscript_expression "p_Var6[1]" identifier [ number_literal ]) . field_identifier))) ;) (if_statement "if ((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))\n      goto LAB_0005ca5d;" if (parenthesized_expression "((0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED))" ( (binary_expression "(0 < pVVar4->lock_count_) || (pVVar4->data_ownership_ == DATA_NOT_OWNED)" (parenthesized_expression "(0 < pVVar4->lock_count_)" ( (binary_expression "0 < pVVar4->lock_count_" number_literal < (field_expression "pVVar4->lock_count_" identifier -> field_identifier)) )) || (parenthesized_expression "(pVVar4->data_ownership_ == DATA_NOT_OWNED)" ( (binary_expression "pVVar4->data_ownership_ == DATA_NOT_OWNED" (field_expression "pVVar4->data_ownership_" identifier -> field_identifier) == identifier) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (if_statement "if (mode != CLEAR_VIEWS_ALL) break;" if (parenthesized_expression "(mode != CLEAR_VIEWS_ALL)" ( (binary_expression "mode != CLEAR_VIEWS_ALL" identifier != identifier) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0005cba8:\n      if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }" statement_identifier : (if_statement "if (pVVar4 == this->whole_file_view_) {\n        this->whole_file_view_ = (View *)0x0;\n      }" if (parenthesized_expression "(pVVar4 == this->whole_file_view_)" ( (binary_expression "pVVar4 == this->whole_file_view_" identifier == (field_expression "this->whole_file_view_" identifier -> field_identifier)) )) (compound_statement "{\n        this->whole_file_view_ = (View *)0x0;\n      }" { (expression_statement "this->whole_file_view_ = (View *)0x0;" (assignment_expression "this->whole_file_view_ = (View *)0x0" (field_expression "this->whole_file_view_" identifier -> field_identifier) = (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (labeled_statement "LAB_0005cb30:\n      View::~View(pVVar4,(int)in_stack_ffffffc8);" statement_identifier : (labeled_statement "View::~View(pVVar4,(int)in_stack_ffffffc8);" statement_identifier : (ERROR ":" :) (expression_statement "~View(pVVar4,(int)in_stack_ffffffc8);" (unary_expression "~View(pVVar4,(int)in_stack_ffffffc8)" ~ (call_expression "View(pVVar4,(int)in_stack_ffffffc8)" identifier (argument_list "(pVVar4,(int)in_stack_ffffffc8)" ( identifier , (cast_expression "(int)in_stack_ffffffc8" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;))) (expression_statement "operator_delete(pVVar4,0x24);" (call_expression "operator_delete(pVVar4,0x24)" identifier (argument_list "(pVVar4,0x24)" ( identifier , number_literal ))) ;) (ERROR "p_Var7 = (_Rb_tree_node_base *)std::" (assignment_expression "p_Var7 = (_Rb_tree_node_base *)std" identifier = (cast_expression "(_Rb_tree_node_base *)std" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "_Rb_tree_increment(p_Var6);" (call_expression "_Rb_tree_increment(p_Var6)" identifier (argument_list "(p_Var6)" ( identifier ))) ;) (expression_statement "in_stack_ffffffc8 = p_Var1;" (assignment_expression "in_stack_ffffffc8 = p_Var1" identifier = identifier) ;) (ERROR "pvVar8 = (void *)std::" (assignment_expression "pvVar8 = (void *)std" identifier = (cast_expression "(void *)std" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header);" (call_expression "_Rb_tree_rebalance_for_erase(p_Var6,&p_Var1->_M_header)" identifier (argument_list "(p_Var6,&p_Var1->_M_header)" ( identifier , (pointer_expression "&p_Var1->_M_header" & (field_expression "p_Var1->_M_header" identifier -> field_identifier)) ))) ;) (expression_statement "operator_delete(pvVar8);" (call_expression "operator_delete(pvVar8)" identifier (argument_list "(pvVar8)" ( identifier ))) ;) (expression_statement "psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;" (assignment_expression "psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count" identifier = (pointer_expression "&(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count" & (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count" (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->views_)._M_t._M_impl" (field_expression "(this->views_)._M_t" (parenthesized_expression "(this->views_)" ( (field_expression "this->views_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier))) ;) (expression_statement "*psVar2 = *psVar2 - 1;" (assignment_expression "*psVar2 = *psVar2 - 1" (pointer_expression "*psVar2" * identifier) = (binary_expression "*psVar2 - 1" (pointer_expression "*psVar2" * identifier) - number_literal)) ;) (expression_statement "p_Var6 = p_Var7;" (assignment_expression "p_Var6 = p_Var7" identifier = identifier) ;) })) (if_statement "if ((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)) {\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" if (parenthesized_expression "((pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_))" ( (binary_expression "(pVVar4->cache_ != false) || (pVVar4 == this->whole_file_view_)" (parenthesized_expression "(pVVar4->cache_ != false)" ( (binary_expression "pVVar4->cache_ != false" (field_expression "pVVar4->cache_" identifier -> field_identifier) != false) )) || (parenthesized_expression "(pVVar4 == this->whole_file_view_)" ( (binary_expression "pVVar4 == this->whole_file_view_" identifier == (field_expression "this->whole_file_view_" identifier -> field_identifier)) ))) )) (compound_statement "{\n      if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" { (if_statement "if ((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))) goto LAB_0005ca5d;" if (parenthesized_expression "((cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE))))" ( (binary_expression "(cVar3 != '\0') ||\n         (((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))" (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)))" ( (parenthesized_expression "((1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE))" ( (binary_expression "(1 < this->object_count_ && (pVVar4->accessed_ != false)) &&\n          (mode != CLEAR_VIEWS_ARCHIVE)" (parenthesized_expression "(1 < this->object_count_ && (pVVar4->accessed_ != false))" ( (binary_expression "1 < this->object_count_ && (pVVar4->accessed_ != false)" (binary_expression "1 < this->object_count_" number_literal < (field_expression "this->object_count_" identifier -> field_identifier)) && (parenthesized_expression "(pVVar4->accessed_ != false)" ( (binary_expression "pVVar4->accessed_ != false" (field_expression "pVVar4->accessed_" identifier -> field_identifier) != false) ))) )) && (parenthesized_expression "(mode != CLEAR_VIEWS_ARCHIVE)" ( (binary_expression "mode != CLEAR_VIEWS_ARCHIVE" identifier != identifier) ))) )) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (goto_statement "goto LAB_0005cba8;" goto statement_identifier ;) })) (if_statement "if (((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       ) goto LAB_0005cb30;" if (parenthesized_expression "(((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)\n       )" ( (binary_expression "((this->object_count_ < 2) || (pVVar4->accessed_ == false)) || (mode == CLEAR_VIEWS_ARCHIVE)" (parenthesized_expression "((this->object_count_ < 2) || (pVVar4->accessed_ == false))" ( (binary_expression "(this->object_count_ < 2) || (pVVar4->accessed_ == false)" (parenthesized_expression "(this->object_count_ < 2)" ( (binary_expression "this->object_count_ < 2" (field_expression "this->object_count_" identifier -> field_identifier) < number_literal) )) || (parenthesized_expression "(pVVar4->accessed_ == false)" ( (binary_expression "pVVar4->accessed_ == false" (field_expression "pVVar4->accessed_" identifier -> field_identifier) == false) ))) )) || (parenthesized_expression "(mode == CLEAR_VIEWS_ARCHIVE)" ( (binary_expression "mode == CLEAR_VIEWS_ARCHIVE" identifier == identifier) ))) )) (goto_statement "goto LAB_0005cb30;" goto statement_identifier ;)) (labeled_statement "LAB_0005ca5d:\n    pVVar4->accessed_ = false;" statement_identifier : (expression_statement "pVVar4->accessed_ = false;" (assignment_expression "pVVar4->accessed_ = false" (field_expression "pVVar4->accessed_" identifier -> field_identifier) = false) ;)) (ERROR "p_Var6 = (_Rb_tree_node_base *)std::" (assignment_expression "p_Var6 = (_Rb_tree_node_base *)std" identifier = (cast_expression "(_Rb_tree_node_base *)std" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "_Rb_tree_increment(p_Var6);" (call_expression "_Rb_tree_increment(p_Var6)" identifier (argument_list "(p_Var6)" ( identifier ))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void FUN_0005ca10(int param_1,int param_2)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}\n\n" (function_definition "void FUN_0005ca10(int param_1,int param_2)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" primitive_type (function_declarator "FUN_0005ca10(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  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (expression_statement "cVar1 = '\0';" (assignment_expression "cVar1 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" if (parenthesized_expression "(*(int *)(DAT_00302378 + 8) != 0)" ( (binary_expression "*(int *)(DAT_00302378 + 8) != 0" (pointer_expression "*(int *)(DAT_00302378 + 8)" * (cast_expression "(int *)(DAT_00302378 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 8)" ( (binary_expression "DAT_00302378 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" { (expression_statement "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);" (assignment_expression "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" identifier = (pointer_expression "*(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" * (cast_expression "(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(DAT_00302378 + 8) + 0x1fe9)" ( (binary_expression "*(int *)(DAT_00302378 + 8) + 0x1fe9" (pointer_expression "*(int *)(DAT_00302378 + 8)" * (cast_expression "(int *)(DAT_00302378 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 8)" ( (binary_expression "DAT_00302378 + 8" identifier + number_literal) )))) + number_literal) ))))) ;) })) (expression_statement "iVar4 = *(int *)(param_1 + 0x4c);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x4c)" identifier = (pointer_expression "*(int *)(param_1 + 0x4c)" * (cast_expression "(int *)(param_1 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) (do_statement "do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  }" { (while_statement "while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" { (if_statement "if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" if (parenthesized_expression "(iVar4 == param_1 + 0x44)" ( (binary_expression "iVar4 == param_1 + 0x44" identifier == (binary_expression "param_1 + 0x44" identifier + number_literal)) )) (compound_statement "{\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" { (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x58);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x58)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x58)" * (cast_expression "(undefined4 **)(param_1 + 0x58)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (while_statement "while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" { (while_statement "while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" { (if_statement "if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }" if (parenthesized_expression "(puVar3 == (undefined4 *)(param_1 + 0x58))" ( (binary_expression "puVar3 == (undefined4 *)(param_1 + 0x58)" identifier == (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "iVar4 = puVar3[2];" (assignment_expression "iVar4 = puVar3[2]" identifier = (subscript_expression "puVar3[2]" identifier [ number_literal ])) ;) (if_statement "if (0 < *(int *)(iVar4 + 0x10)) break;" if (parenthesized_expression "(0 < *(int *)(iVar4 + 0x10))" ( (binary_expression "0 < *(int *)(iVar4 + 0x10)" number_literal < (pointer_expression "*(int *)(iVar4 + 0x10)" * (cast_expression "(int *)(iVar4 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) (expression_statement "FUN_0005b9b0(iVar4);" (call_expression "FUN_0005b9b0(iVar4)" identifier (argument_list "(iVar4)" ( identifier ))) ;) (expression_statement "FUN_00180780(iVar4,0x24);" (call_expression "FUN_00180780(iVar4,0x24)" identifier (argument_list "(iVar4,0x24)" ( identifier , number_literal ))) ;) (expression_statement "puVar2 = (undefined4 *)*puVar3;" (assignment_expression "puVar2 = (undefined4 *)*puVar3" identifier = (cast_expression "(undefined4 *)*puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;" (assignment_expression "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "FUN_00183980(puVar3);" (call_expression "FUN_00183980(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "FUN_001807a0(puVar3);" (call_expression "FUN_001807a0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "puVar3 = puVar2;" (assignment_expression "puVar3 = puVar2" identifier = identifier) ;) })) (if_statement "if (param_2 == 2) break;" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = (undefined4 *)*puVar3;" (assignment_expression "puVar3 = (undefined4 *)*puVar3" identifier = (cast_expression "(undefined4 *)*puVar3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) })) (expression_statement "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");" (call_expression "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views")" identifier (argument_list "("../../gold/fileread.cc",0x34c,"clear_views")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""clear_views"" " string_content ") ))) ;) })) (expression_statement "iVar5 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar5 = *(int *)(iVar4 + 0x1c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;" if (parenthesized_expression "((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0))" ( (binary_expression "(0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)" (parenthesized_expression "(0 < *(int *)(iVar5 + 0x10))" ( (binary_expression "0 < *(int *)(iVar5 + 0x10)" number_literal < (pointer_expression "*(int *)(iVar5 + 0x10)" * (cast_expression "(int *)(iVar5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x10)" ( (binary_expression "iVar5 + 0x10" identifier + number_literal) ))))) )) || (parenthesized_expression "(*(int *)(iVar5 + 0x1c) == 0)" ( (binary_expression "*(int *)(iVar5 + 0x1c) == 0" (pointer_expression "*(int *)(iVar5 + 0x1c)" * (cast_expression "(int *)(iVar5 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x1c)" ( (binary_expression "iVar5 + 0x1c" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (if_statement "if (param_2 != 2) break;" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" statement_identifier : (if_statement "if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" if (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" ( (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" identifier == (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) )) (compound_statement "{\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" { (expression_statement "*(undefined4 *)(param_1 + 0x6c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x6c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x6c)" * (cast_expression "(undefined4 *)(param_1 + 0x6c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) = number_literal) ;) }))) (labeled_statement "LAB_0005cb30:\n      FUN_0005b9b0(iVar5);" statement_identifier : (expression_statement "FUN_0005b9b0(iVar5);" (call_expression "FUN_0005b9b0(iVar5)" identifier (argument_list "(iVar5)" ( identifier ))) ;)) (expression_statement "FUN_00180780(iVar5,0x24);" (call_expression "FUN_00180780(iVar5,0x24)" identifier (argument_list "(iVar5,0x24)" ( identifier , number_literal ))) ;) (expression_statement "iVar5 = FUN_00181d80(iVar4);" (assignment_expression "iVar5 = FUN_00181d80(iVar4)" identifier = (call_expression "FUN_00181d80(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "uVar6 = FUN_00182170(iVar4,param_1 + 0x44);" (assignment_expression "uVar6 = FUN_00182170(iVar4,param_1 + 0x44)" identifier = (call_expression "FUN_00182170(iVar4,param_1 + 0x44)" identifier (argument_list "(iVar4,param_1 + 0x44)" ( identifier , (binary_expression "param_1 + 0x44" identifier + number_literal) )))) ;) (expression_statement "FUN_001807a0(uVar6);" (call_expression "FUN_001807a0(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))) ;) (expression_statement "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;" (assignment_expression "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" identifier = identifier) ;) })) (if_statement "if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" if (parenthesized_expression "((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c)))" ( (binary_expression "(*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))" (parenthesized_expression "(*(char *)(iVar5 + 0x18) != '\0')" ( (binary_expression "*(char *)(iVar5 + 0x18) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x18)" * (cast_expression "(char *)(iVar5 + 0x18)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" ( (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" identifier == (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" { (if_statement "if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;" if (parenthesized_expression "((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))" ( (binary_expression "(cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" ( (parenthesized_expression "((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))" ( (binary_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)" (parenthesized_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0'))" ( (binary_expression "1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')" (binary_expression "1 < *(int *)(param_1 + 0x20)" number_literal < (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) && (parenthesized_expression "(*(char *)(iVar5 + 0x20) != '\0')" ( (binary_expression "*(char *)(iVar5 + 0x20) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" * (cast_expression "(char *)(iVar5 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(param_2 != 1)" ( (binary_expression "param_2 != 1" identifier != number_literal) ))) )) ))) )) (goto_statement "goto LAB_0005ca5d;" goto statement_identifier ;)) (goto_statement "goto LAB_0005cba8;" goto statement_identifier ;) })) (if_statement "if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;" if (parenthesized_expression "(((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))" ( (binary_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1)" (parenthesized_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0'))" ( (binary_expression "(*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')" (parenthesized_expression "(*(int *)(param_1 + 0x20) < 2)" ( (binary_expression "*(int *)(param_1 + 0x20) < 2" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) < number_literal) )) || (parenthesized_expression "(*(char *)(iVar5 + 0x20) == '\0')" ( (binary_expression "*(char *)(iVar5 + 0x20) == '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" * (cast_expression "(char *)(iVar5 + 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) || (parenthesized_expression "(param_2 == 1)" ( (binary_expression "param_2 == 1" identifier == number_literal) ))) )) (goto_statement "goto LAB_0005cb30;" goto statement_identifier ;)) (labeled_statement "LAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;" statement_identifier : (expression_statement "*(undefined1 *)(iVar5 + 0x20) = 0;" (assignment_expression "*(undefined1 *)(iVar5 + 0x20) = 0" (pointer_expression "*(undefined1 *)(iVar5 + 0x20)" * (cast_expression "(undefined1 *)(iVar5 + 0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "iVar4 = FUN_00181d80(iVar4);" (assignment_expression "iVar4 = FUN_00181d80(iVar4)" identifier = (call_expression "FUN_00181d80(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (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 { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (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 *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (break_statement break ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (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 (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_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 (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (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 = 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) )))) != (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) ))) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) ))) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (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) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "void FUN_0005ca10(int param_1,int param_2)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" (primitive_type "void") (function_declarator "FUN_0005ca10(int param_1,int param_2)" (identifier "FUN_0005ca10") (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  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  \n  cVar1 = '\0';\n  if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }\n  iVar4 = *(int *)(param_1 + 0x4c);\n  do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (expression_statement "cVar1 = '\0';" (assignment_expression "cVar1 = '\0'" (identifier "cVar1") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (if_statement "if (*(int *)(DAT_00302378 + 8) != 0) {\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" (if "if") (parenthesized_expression "(*(int *)(DAT_00302378 + 8) != 0)" (( "(") (binary_expression "*(int *)(DAT_00302378 + 8) != 0" (pointer_expression "*(int *)(DAT_00302378 + 8)" (* "*") (cast_expression "(int *)(DAT_00302378 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 8)" (( "(") (binary_expression "DAT_00302378 + 8" (identifier "DAT_00302378") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);\n  }" ({ "{") (expression_statement "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);" (assignment_expression "cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" (* "*") (cast_expression "(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(DAT_00302378 + 8) + 0x1fe9)" (( "(") (binary_expression "*(int *)(DAT_00302378 + 8) + 0x1fe9" (pointer_expression "*(int *)(DAT_00302378 + 8)" (* "*") (cast_expression "(int *)(DAT_00302378 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 8)" (( "(") (binary_expression "DAT_00302378 + 8" (identifier "DAT_00302378") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x1fe9")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar4 = *(int *)(param_1 + 0x4c);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x4c)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_1 + 0x4c)" (* "*") (cast_expression "(int *)(param_1 + 0x4c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")"))))) (; ";")) (do_statement "do {\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  } while( true );" (do "do") (compound_statement "{\n    while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }\n    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }\n    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;\nLAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;\n    iVar4 = FUN_00181d80(iVar4);\n  }" ({ "{") (while_statement "while( true ) {\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }\n      iVar5 = *(int *)(iVar4 + 0x1c);\n      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;\n      if (param_2 != 2) break;\nLAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }\nLAB_0005cb30:\n      FUN_0005b9b0(iVar5);\n      FUN_00180780(iVar5,0x24);\n      iVar5 = FUN_00181d80(iVar4);\n      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);\n      FUN_001807a0(uVar6);\n      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;\n      iVar4 = iVar5;\n    }" ({ "{") (if_statement "if (iVar4 == param_1 + 0x44) {\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" (if "if") (parenthesized_expression "(iVar4 == param_1 + 0x44)" (( "(") (binary_expression "iVar4 == param_1 + 0x44" (identifier "iVar4") (== "==") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44"))) () ")")) (compound_statement "{\n        puVar3 = *(undefined4 **)(param_1 + 0x58);\n        while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }\n                    \n        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");\n      }" ({ "{") (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x58);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x58)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (while_statement "while( true ) {\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }\n          if (param_2 == 2) break;\n          puVar3 = (undefined4 *)*puVar3;\n        }" ({ "{") (while_statement "while( true ) {\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }\n            iVar4 = puVar3[2];\n            if (0 < *(int *)(iVar4 + 0x10)) break;\n            FUN_0005b9b0(iVar4);\n            FUN_00180780(iVar4,0x24);\n            puVar2 = (undefined4 *)*puVar3;\n            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;\n            FUN_00183980(puVar3);\n            FUN_001807a0(puVar3);\n            puVar3 = puVar2;\n          }" ({ "{") (if_statement "if (puVar3 == (undefined4 *)(param_1 + 0x58)) {\n              return;\n            }" (if "if") (parenthesized_expression "(puVar3 == (undefined4 *)(param_1 + 0x58))" (( "(") (binary_expression "puVar3 == (undefined4 *)(param_1 + 0x58)" (identifier "puVar3") (== "==") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) () ")")) (compound_statement "{\n              return;\n            }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar4 = puVar3[2];" (assignment_expression "iVar4 = puVar3[2]" (identifier "iVar4") (= "=") (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (0 < *(int *)(iVar4 + 0x10)) break;" (if "if") (parenthesized_expression "(0 < *(int *)(iVar4 + 0x10))" (( "(") (binary_expression "0 < *(int *)(iVar4 + 0x10)" (number_literal "0") (< "<") (pointer_expression "*(int *)(iVar4 + 0x10)" (* "*") (cast_expression "(int *)(iVar4 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x10)" (( "(") (binary_expression "iVar4 + 0x10" (identifier "iVar4") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "FUN_0005b9b0(iVar4);" (call_expression "FUN_0005b9b0(iVar4)" (identifier "FUN_0005b9b0") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")"))) (; ";")) (expression_statement "FUN_00180780(iVar4,0x24);" (call_expression "FUN_00180780(iVar4,0x24)" (identifier "FUN_00180780") (argument_list "(iVar4,0x24)" (( "(") (identifier "iVar4") (, ",") (number_literal "0x24") () ")"))) (; ";")) (expression_statement "puVar2 = (undefined4 *)*puVar3;" (assignment_expression "puVar2 = (undefined4 *)*puVar3" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)*puVar3" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (expression_statement "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;" (assignment_expression "*(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" (* "*") (cast_expression "(int *)(param_1 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x60) + -1" (pointer_expression "*(int *)(param_1 + 0x60)" (* "*") (cast_expression "(int *)(param_1 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "FUN_00183980(puVar3);" (call_expression "FUN_00183980(puVar3)" (identifier "FUN_00183980") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "FUN_001807a0(puVar3);" (call_expression "FUN_001807a0(puVar3)" (identifier "FUN_001807a0") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "puVar3 = puVar2;" (assignment_expression "puVar3 = puVar2" (identifier "puVar3") (= "=") (identifier "puVar2")) (; ";")) (} "}"))) (if_statement "if (param_2 == 2) break;" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar3 = (undefined4 *)*puVar3;" (assignment_expression "puVar3 = (undefined4 *)*puVar3" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*puVar3" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (} "}"))) (expression_statement "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");" (call_expression "FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views")" (identifier "FUN_0005f0b0") (argument_list "("../../gold/fileread.cc",0x34c,"clear_views")" (( "(") (string_literal ""../../gold/fileread.cc"" (" """) (string_content "../../gold/fileread.cc") (" """)) (, ",") (number_literal "0x34c") (, ",") (string_literal ""clear_views"" (" """) (string_content "clear_views") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar5 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar5 = *(int *)(iVar4 + 0x1c)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar4 + 0x1c)" (* "*") (cast_expression "(int *)(iVar4 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x1c)" (( "(") (binary_expression "iVar4 + 0x1c" (identifier "iVar4") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (if_statement "if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;" (if "if") (parenthesized_expression "((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0))" (( "(") (binary_expression "(0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)" (parenthesized_expression "(0 < *(int *)(iVar5 + 0x10))" (( "(") (binary_expression "0 < *(int *)(iVar5 + 0x10)" (number_literal "0") (< "<") (pointer_expression "*(int *)(iVar5 + 0x10)" (* "*") (cast_expression "(int *)(iVar5 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x10)" (( "(") (binary_expression "iVar5 + 0x10" (identifier "iVar5") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (|| "||") (parenthesized_expression "(*(int *)(iVar5 + 0x1c) == 0)" (( "(") (binary_expression "*(int *)(iVar5 + 0x1c) == 0" (pointer_expression "*(int *)(iVar5 + 0x1c)" (* "*") (cast_expression "(int *)(iVar5 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x1c)" (( "(") (binary_expression "iVar5 + 0x1c" (identifier "iVar5") (+ "+") (number_literal "0x1c")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_0005ca5d;" (goto "goto") (statement_identifier "LAB_0005ca5d") (; ";"))) (if_statement "if (param_2 != 2) break;" (if "if") (parenthesized_expression "(param_2 != 2)" (( "(") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_0005cba8:\n      if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" (statement_identifier "LAB_0005cba8") (: ":") (if_statement "if (iVar5 == *(int *)(param_1 + 0x6c)) {\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" (if "if") (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" (( "(") (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" (identifier "iVar5") (== "==") (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))))) () ")")) (compound_statement "{\n        *(undefined4 *)(param_1 + 0x6c) = 0;\n      }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x6c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x6c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x6c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x6c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")))) (labeled_statement "LAB_0005cb30:\n      FUN_0005b9b0(iVar5);" (statement_identifier "LAB_0005cb30") (: ":") (expression_statement "FUN_0005b9b0(iVar5);" (call_expression "FUN_0005b9b0(iVar5)" (identifier "FUN_0005b9b0") (argument_list "(iVar5)" (( "(") (identifier "iVar5") () ")"))) (; ";"))) (expression_statement "FUN_00180780(iVar5,0x24);" (call_expression "FUN_00180780(iVar5,0x24)" (identifier "FUN_00180780") (argument_list "(iVar5,0x24)" (( "(") (identifier "iVar5") (, ",") (number_literal "0x24") () ")"))) (; ";")) (expression_statement "iVar5 = FUN_00181d80(iVar4);" (assignment_expression "iVar5 = FUN_00181d80(iVar4)" (identifier "iVar5") (= "=") (call_expression "FUN_00181d80(iVar4)" (identifier "FUN_00181d80") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")")))) (; ";")) (expression_statement "uVar6 = FUN_00182170(iVar4,param_1 + 0x44);" (assignment_expression "uVar6 = FUN_00182170(iVar4,param_1 + 0x44)" (identifier "uVar6") (= "=") (call_expression "FUN_00182170(iVar4,param_1 + 0x44)" (identifier "FUN_00182170") (argument_list "(iVar4,param_1 + 0x44)" (( "(") (identifier "iVar4") (, ",") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (; ";")) (expression_statement "FUN_001807a0(uVar6);" (call_expression "FUN_001807a0(uVar6)" (identifier "FUN_001807a0") (argument_list "(uVar6)" (( "(") (identifier "uVar6") () ")"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;" (assignment_expression "*(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x54) + -1" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar4 = iVar5;" (assignment_expression "iVar4 = iVar5" (identifier "iVar4") (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (if_statement "if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" (if "if") (parenthesized_expression "((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c)))" (( "(") (binary_expression "(*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))" (parenthesized_expression "(*(char *)(iVar5 + 0x18) != '\0')" (( "(") (binary_expression "*(char *)(iVar5 + 0x18) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x18)" (* "*") (cast_expression "(char *)(iVar5 + 0x18)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x18)" (( "(") (binary_expression "iVar5 + 0x18" (identifier "iVar5") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(iVar5 == *(int *)(param_1 + 0x6c))" (( "(") (binary_expression "iVar5 == *(int *)(param_1 + 0x6c)" (identifier "iVar5") (== "==") (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n      if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;\n      goto LAB_0005cba8;\n    }" ({ "{") (if_statement "if ((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))\n      goto LAB_0005ca5d;" (if "if") (parenthesized_expression "((cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))" (( "(") (binary_expression "(cVar1 != '\0') ||\n         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)))" (( "(") (parenthesized_expression "((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))" (( "(") (binary_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1)" (parenthesized_expression "(1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0'))" (( "(") (binary_expression "1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')" (binary_expression "1 < *(int *)(param_1 + 0x20)" (number_literal "1") (< "<") (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (&& "&&") (parenthesized_expression "(*(char *)(iVar5 + 0x20) != '\0')" (( "(") (binary_expression "*(char *)(iVar5 + 0x20) != '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" (* "*") (cast_expression "(char *)(iVar5 + 0x20)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x20)" (( "(") (binary_expression "iVar5 + 0x20" (identifier "iVar5") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(param_2 != 1)" (( "(") (binary_expression "param_2 != 1" (identifier "param_2") (!= "!=") (number_literal "1")) () ")"))) () ")")) () ")"))) () ")")) (goto_statement "goto LAB_0005ca5d;" (goto "goto") (statement_identifier "LAB_0005ca5d") (; ";"))) (goto_statement "goto LAB_0005cba8;" (goto "goto") (statement_identifier "LAB_0005cba8") (; ";")) (} "}"))) (if_statement "if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))\n    goto LAB_0005cb30;" (if "if") (parenthesized_expression "(((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))" (( "(") (binary_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1)" (parenthesized_expression "((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0'))" (( "(") (binary_expression "(*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')" (parenthesized_expression "(*(int *)(param_1 + 0x20) < 2)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) < 2" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (< "<") (number_literal "2")) () ")")) (|| "||") (parenthesized_expression "(*(char *)(iVar5 + 0x20) == '\0')" (( "(") (binary_expression "*(char *)(iVar5 + 0x20) == '\0'" (pointer_expression "*(char *)(iVar5 + 0x20)" (* "*") (cast_expression "(char *)(iVar5 + 0x20)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x20)" (( "(") (binary_expression "iVar5 + 0x20" (identifier "iVar5") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(param_2 == 1)" (( "(") (binary_expression "param_2 == 1" (identifier "param_2") (== "==") (number_literal "1")) () ")"))) () ")")) (goto_statement "goto LAB_0005cb30;" (goto "goto") (statement_identifier "LAB_0005cb30") (; ";"))) (labeled_statement "LAB_0005ca5d:\n    *(undefined1 *)(iVar5 + 0x20) = 0;" (statement_identifier "LAB_0005ca5d") (: ":") (expression_statement "*(undefined1 *)(iVar5 + 0x20) = 0;" (assignment_expression "*(undefined1 *)(iVar5 + 0x20) = 0" (pointer_expression "*(undefined1 *)(iVar5 + 0x20)" (* "*") (cast_expression "(undefined1 *)(iVar5 + 0x20)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x20)" (( "(") (binary_expression "iVar5 + 0x20" (identifier "iVar5") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (number_literal "0")) (; ";"))) (expression_statement "iVar4 = FUN_00181d80(iVar4);" (assignment_expression "iVar4 = FUN_00181d80(iVar4)" (identifier "iVar4") (= "=") (call_expression "FUN_00181d80(iVar4)" (identifier "FUN_00181d80") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void clear_views(File_read * this, Clear_views_mode mode) */

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

{
  type_3 *var_1;
  size_t *psVar2;
  char var_13;
  type_4 *var_10;
  type_5 *p_Var5;
  type_5 *var_3;
  type_6 *p_Var6;
  type_6 *p_Var7;
  void *pvVar8;
  type_3 *in_stack_ffffffc8;
  
  var_13 = '\0';
  if (parameters->options_ != (type_7 *)0x0) {
    var_13 = (parameters->options_->keep_files_mapped_).value;
  }
  var_1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;
  p_Var6 = (this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_left;
  do {
    while( true ) {
      if ((type_3 *)p_Var6 == var_1) {
        var_3 = (this->saved_views_).
                  super__List_base<gold::type_1::type_4*,_std::allocator<gold::type_1::type_4*>var_2>.
                  _M_impl._M_node.super__List_node_base._M_next;
        while( true ) {
          while( true ) {
            if (var_3 == (type_5 *)&this->saved_views_) {
              return;
            }
            var_10 = (type_4 *)var_3[1]._M_next;
            if (0 < var_10->lock_count_) break;
            View::~type_4(var_10,(int)in_stack_ffffffc8);
            in_stack_ffffffc8 = (type_3 *)0x24;
            var_4(var_10,0x24);
            p_Var5 = var_3->_M_next;
            psVar2 = &(this->saved_views_).
                      super__List_base<gold::type_1::type_4*,_std::allocator<gold::type_1::type_4*>var_2>
                      ._M_impl._M_node._M_size;
            *psVar2 = *psVar2 - 1;
            std::__detail::_List_node_base::var_5(var_3);
            var_4(var_3);
            var_3 = p_Var5;
          }
          if (var_6 == var_7) break;
          var_3 = var_3->_M_next;
        }
                    /* WARNING: Subroutine does not return */
        var_8("../../gold/fileread.cc",0x34c,"clear_views");
      }
      var_10 = (type_4 *)p_Var6[1]._M_right;
      if ((0 < var_10->lock_count_) || (var_10->data_ownership_ == var_9))
      goto LAB_0005ca5d;
      if (var_6 != var_7) break;
LAB_0005cba8:
      if (var_10 == this->whole_file_view_) {
        this->whole_file_view_ = (type_4 *)0x0;
      }
LAB_0005cb30:
      View::~type_4(var_10,(int)in_stack_ffffffc8);
      var_4(var_10,0x24);
      p_Var7 = (type_6 *)std::var_11(p_Var6);
      in_stack_ffffffc8 = var_1;
      pvVar8 = (void *)std::var_12(p_Var6,&var_1->_M_header);
      var_4(pvVar8);
      psVar2 = &(this->views_)._M_t._M_impl.super__Rb_tree_header._M_node_count;
      *psVar2 = *psVar2 - 1;
      p_Var6 = p_Var7;
    }
    if ((var_10->cache_ != false) || (var_10 == this->whole_file_view_)) {
      if ((var_13 != '\0') ||
         (((1 < this->object_count_ && (var_10->accessed_ != false)) &&
          (var_6 != var_14)))) goto LAB_0005ca5d;
      goto LAB_0005cba8;
    }
    if (((this->object_count_ < 2) || (var_10->accessed_ == false)) || (var_6 == var_14)
       ) goto LAB_0005cb30;
LAB_0005ca5d:
    var_10->accessed_ = false;
    p_Var6 = (type_6 *)std::var_11(p_Var6);
  } while( true );
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(int param_1,int param_2)

{
  char cVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  
  cVar1 = '\0';
  if (*(int *)(DAT_00302378 + 8) != 0) {
    cVar1 = *(char *)(*(int *)(DAT_00302378 + 8) + 0x1fe9);
  }
  iVar4 = *(int *)(param_1 + 0x4c);
  do {
    while( true ) {
      if (iVar4 == param_1 + 0x44) {
        puVar3 = *(undefined4 **)(param_1 + 0x58);
        while( true ) {
          while( true ) {
            if (puVar3 == (undefined4 *)(param_1 + 0x58)) {
              return;
            }
            iVar4 = puVar3[2];
            if (0 < *(int *)(iVar4 + 0x10)) break;
            FUN_0005b9b0(iVar4);
            FUN_00180780(iVar4,0x24);
            puVar2 = (undefined4 *)*puVar3;
            *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + -1;
            FUN_00183980(puVar3);
            FUN_001807a0(puVar3);
            puVar3 = puVar2;
          }
          if (param_2 == 2) break;
          puVar3 = (undefined4 *)*puVar3;
        }
                    /* WARNING: Subroutine does not return */
        FUN_0005f0b0("../../gold/fileread.cc",0x34c,"clear_views");
      }
      iVar5 = *(int *)(iVar4 + 0x1c);
      if ((0 < *(int *)(iVar5 + 0x10)) || (*(int *)(iVar5 + 0x1c) == 0)) goto LAB_0005ca5d;
      if (param_2 != 2) break;
LAB_0005cba8:
      if (iVar5 == *(int *)(param_1 + 0x6c)) {
        *(undefined4 *)(param_1 + 0x6c) = 0;
      }
LAB_0005cb30:
      FUN_0005b9b0(iVar5);
      FUN_00180780(iVar5,0x24);
      iVar5 = FUN_00181d80(iVar4);
      uVar6 = FUN_00182170(iVar4,param_1 + 0x44);
      FUN_001807a0(uVar6);
      *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + -1;
      iVar4 = iVar5;
    }
    if ((*(char *)(iVar5 + 0x18) != '\0') || (iVar5 == *(int *)(param_1 + 0x6c))) {
      if ((cVar1 != '\0') ||
         (((1 < *(int *)(param_1 + 0x20) && (*(char *)(iVar5 + 0x20) != '\0')) && (param_2 != 1))))
      goto LAB_0005ca5d;
      goto LAB_0005cba8;
    }
    if (((*(int *)(param_1 + 0x20) < 2) || (*(char *)(iVar5 + 0x20) == '\0')) || (param_2 == 1))
    goto LAB_0005cb30;
LAB_0005ca5d:
    *(undefined1 *)(iVar5 + 0x20) = 0;
    iVar4 = FUN_00181d80(iVar4);
  } while( true );
}

