
/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool get_output_section_info(Script_sections * this, char * name,
   uint64_t * address, uint64_t * load_address, uint64_t * addralign, uint64_t * size) */

bool __thiscall
gold::Script_sections::get_output_section_info
          (Script_sections *this,char *name,uint64_t *address,uint64_t *load_address,
          uint64_t *addralign,uint64_t *size)

{
  char cVar1;
  _List_node_base *p_Var2;
  
  if (this->saw_sections_clause_ == false) {
    return false;
  }
  p_Var2 = (this->sections_elements_->
           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).
           _M_impl._M_node.super__List_node_base._M_next;
  if (p_Var2 != (_List_node_base *)this->sections_elements_) {
    do {
      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))
                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);
      if (cVar1 != '\0') {
        return (bool)cVar1;
      }
      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)
                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;
    } while ((_List_node_base *)this->sections_elements_ != p_Var2);
  }
  return false;
}



undefined8
FUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,undefined8 param_6)

{
  undefined8 uVar1;
  long *plVar2;
  
  if (*param_1 == '\0') {
    return 0;
  }
  plVar2 = (long *)**(long **)(param_1 + 8);
  if (plVar2 != *(long **)(param_1 + 8)) {
    do {
      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))
                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);
      if ((char)uVar1 != '\0') {
        return uVar1;
      }
      plVar2 = (long *)*plVar2;
    } while ((long *)*(long *)(param_1 + 8) != plVar2);
  }
  return 0;
}


CMP byte ptr [RDI],0x0
JZ 0x002068f8
PUSH R15
MOV R15,R9
PUSH R14
MOV R14,R8
PUSH R13
MOV R13,RCX
PUSH R12
MOV R12,RDX
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x18
MOV RAX,qword ptr [RDI + 0x8]
MOV qword ptr [RSP + 0x8],RSI
MOV RBP,qword ptr [RAX]
CMP RBP,RAX
JNZ 0x002068aa
JMP 0x002068e0
MOV RBP,qword ptr [RBP]
CMP qword ptr [RBX + 0x8],RBP
JZ 0x002068e0
MOV RDI,qword ptr [RBP + 0x10]
MOV R9,R15
MOV R8,R14
MOV RCX,R13
MOV RDX,R12
MOV RSI,qword ptr [RSP + 0x8]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x68]
TEST AL,AL
JZ 0x002068a0
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
ADD RSP,0x18
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
XOR EAX,EAX
RET
(translation_unit "undefined8\nFUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)\n\n{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8\nFUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)\n\n{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" identifier (parameter_list "(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (if_statement "if (*param_1 == '\0') {\n    return 0;\n  }" if (parenthesized_expression "(*param_1 == '\0')" ( (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar2 = (long *)**(long **)(param_1 + 8);" (assignment_expression "plVar2 = (long *)**(long **)(param_1 + 8)" identifier = (cast_expression "(long *)**(long **)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))))) ;) (if_statement "if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" if (parenthesized_expression "(plVar2 != *(long **)(param_1 + 8))" ( (binary_expression "plVar2 != *(long **)(param_1 + 8)" identifier != (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" { (do_statement "do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);" do (compound_statement "{\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    }" { (expression_statement "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);" (assignment_expression "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" identifier = (call_expression "(**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" (parenthesized_expression "(**(code **)(*(long *)plVar2[2] + 0x68))" ( (pointer_expression "**(code **)(*(long *)plVar2[2] + 0x68)" * (pointer_expression "*(code **)(*(long *)plVar2[2] + 0x68)" * (cast_expression "(code **)(*(long *)plVar2[2] + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)plVar2[2] + 0x68)" ( (binary_expression "*(long *)plVar2[2] + 0x68" (pointer_expression "*(long *)plVar2[2]" * (cast_expression "(long *)plVar2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" ( (cast_expression "(long *)plVar2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ])) , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if ((char)uVar1 != '\0') {\n        return uVar1;\n      }" if (parenthesized_expression "((char)uVar1 != '\0')" ( (binary_expression "(char)uVar1 != '\0'" (cast_expression "(char)uVar1" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (expression_statement "plVar2 = (long *)*plVar2;" (assignment_expression "plVar2 = (long *)*plVar2" identifier = (cast_expression "(long *)*plVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar2" * identifier))) ;) }) while (parenthesized_expression "((long *)*(long *)(param_1 + 8) != plVar2)" ( (binary_expression "(long *)*(long *)(param_1 + 8) != plVar2" (cast_expression "(long *)*(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) != identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* DWARF original prototype: bool get_output_section_info(Script_sections * this, char * name,\n   uint64_t * address, uint64_t * load_address, uint64_t * addralign, uint64_t * size) */\n\nbool __thiscall\ngold::Script_sections::get_output_section_info\n          (Script_sections *this,char *name,uint64_t *address,uint64_t *load_address,\n          uint64_t *addralign,uint64_t *size)\n\n{\n  char cVar1;\n  _List_node_base *p_Var2;\n  \n  if (this->saw_sections_clause_ == false) {\n    return false;\n  }\n  p_Var2 = (this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next;\n  if (p_Var2 != (_List_node_base *)this->sections_elements_) {\n    do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);\n  }\n  return false;\n}\n\n" comment comment (function_definition "bool __thiscall\ngold::Script_sections::get_output_section_info\n          (Script_sections *this,char *name,uint64_t *address,uint64_t *load_address,\n          uint64_t *addralign,uint64_t *size)\n\n{\n  char cVar1;\n  _List_node_base *p_Var2;\n  \n  if (this->saw_sections_clause_ == false) {\n    return false;\n  }\n  p_Var2 = (this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next;\n  if (p_Var2 != (_List_node_base *)this->sections_elements_) {\n    do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);\n  }\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Script_sections::" identifier : : identifier : :) (function_declarator "get_output_section_info\n          (Script_sections *this,char *name,uint64_t *address,uint64_t *load_address,\n          uint64_t *addralign,uint64_t *size)" identifier (parameter_list "(Script_sections *this,char *name,uint64_t *address,uint64_t *load_address,\n          uint64_t *addralign,uint64_t *size)" ( (parameter_declaration "Script_sections *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "char *name" primitive_type (pointer_declarator "*name" * identifier)) , (parameter_declaration "uint64_t *address" primitive_type (pointer_declarator "*address" * identifier)) , (parameter_declaration "uint64_t *load_address" primitive_type (pointer_declarator "*load_address" * identifier)) , (parameter_declaration "uint64_t *addralign" primitive_type (pointer_declarator "*addralign" * identifier)) , (parameter_declaration "uint64_t *size" primitive_type (pointer_declarator "*size" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  _List_node_base *p_Var2;\n  \n  if (this->saw_sections_clause_ == false) {\n    return false;\n  }\n  p_Var2 = (this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next;\n  if (p_Var2 != (_List_node_base *)this->sections_elements_) {\n    do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);\n  }\n  return false;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "_List_node_base *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (if_statement "if (this->saw_sections_clause_ == false) {\n    return false;\n  }" if (parenthesized_expression "(this->saw_sections_clause_ == false)" ( (binary_expression "this->saw_sections_clause_ == false" (field_expression "this->saw_sections_clause_" identifier -> field_identifier) == false) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "p_Var2 = (this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next;" (assignment_expression "p_Var2 = (this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next" identifier = (field_expression "(this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base._M_next" (field_expression "(this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node.super__List_node_base" (field_expression "(this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl._M_node" (field_expression "(this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>).\n           _M_impl" (parenthesized_expression "(this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_>)" ( (ERROR "this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std::allocator<gold::" (comma_expression "this->sections_elements_->\n           super__List_base<gold::Sections_element*,_std" (binary_expression "this->sections_elements_->\n           super__List_base<gold::Sections_element*" (binary_expression "this->sections_elements_->\n           super__List_base<gold" (field_expression "this->sections_elements_->\n           super__List_base" (field_expression "this->sections_elements_" identifier -> field_identifier) -> field_identifier) < identifier) (ERROR "::Sections_element" : : identifier) * identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Sections_element*>_>" (binary_expression "Sections_element*>_" identifier * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier)) ;) (if_statement "if (p_Var2 != (_List_node_base *)this->sections_elements_) {\n    do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);\n  }" if (parenthesized_expression "(p_Var2 != (_List_node_base *)this->sections_elements_)" ( (binary_expression "p_Var2 != (_List_node_base *)this->sections_elements_" identifier != (cast_expression "(_List_node_base *)this->sections_elements_" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->sections_elements_" identifier -> field_identifier))) )) (compound_statement "{\n    do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);\n  }" { (do_statement "do {\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    } while ((_List_node_base *)this->sections_elements_ != p_Var2);" do (compound_statement "{\n      cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);\n      if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }\n      p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;\n    }" { (expression_statement "cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size);" (assignment_expression "cVar1 = (**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size)" identifier = (call_expression "(**(code **)(*(long *)p_Var2[1]._M_next + 0x68))\n                        (p_Var2[1]._M_next,name,address,load_address,addralign,size)" (parenthesized_expression "(**(code **)(*(long *)p_Var2[1]._M_next + 0x68))" ( (pointer_expression "**(code **)(*(long *)p_Var2[1]._M_next + 0x68)" * (pointer_expression "*(code **)(*(long *)p_Var2[1]._M_next + 0x68)" * (cast_expression "(code **)(*(long *)p_Var2[1]._M_next + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)p_Var2[1]._M_next + 0x68)" ( (binary_expression "*(long *)p_Var2[1]._M_next + 0x68" (pointer_expression "*(long *)p_Var2[1]._M_next" * (cast_expression "(long *)p_Var2[1]._M_next" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var2[1]._M_next" (subscript_expression "p_Var2[1]" identifier [ number_literal ]) . field_identifier))) + number_literal) ))))) )) (argument_list "(p_Var2[1]._M_next,name,address,load_address,addralign,size)" ( (field_expression "p_Var2[1]._M_next" (subscript_expression "p_Var2[1]" identifier [ number_literal ]) . field_identifier) , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (cVar1 != '\0') {\n        return (bool)cVar1;\n      }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return (bool)cVar1;\n      }" { (return_statement "return (bool)cVar1;" return (cast_expression "(bool)cVar1" ( (type_descriptor "bool" primitive_type) ) identifier) ;) })) (expression_statement "p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;" (assignment_expression "p_Var2 = (((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next" identifier = (field_expression "(((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base._M_next" (field_expression "(((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node.super__List_node_base" (field_expression "(((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)._M_node" (parenthesized_expression "(((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl)" ( (field_expression "((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)->_M_impl" (parenthesized_expression "((_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next)" ( (binary_expression "(_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)\n                &p_Var2->_M_next" (parenthesized_expression "(_List_base<gold::Sections_element*,_std::allocator<gold::Sections_element*>_> *)" ( (ERROR "_List_base<gold::Sections_element*,_std::allocator<gold::" (binary_expression "_List_base<gold" identifier < identifier) : : (type_descriptor "Sections_element*" type_identifier (abstract_pointer_declarator "*" *)) , identifier : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Sections_element*>_> *" (binary_expression "Sections_element*>_" identifier * (ERROR ">" >) identifier) > (pointer_expression "*" * identifier)) )) & (field_expression "p_Var2->_M_next" identifier -> field_identifier)) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ;) }) while (parenthesized_expression "((_List_node_base *)this->sections_elements_ != p_Var2)" ( (binary_expression "(_List_node_base *)this->sections_elements_ != p_Var2" (cast_expression "(_List_node_base *)this->sections_elements_" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->sections_elements_" identifier -> field_identifier)) != identifier) )) ;) })) (return_statement "return false;" return false ;) })))
(translation_unit "undefined8\nFUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)\n\n{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8\nFUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)\n\n{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" identifier (parameter_list "(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (if_statement "if (*param_1 == '\0') {\n    return 0;\n  }" if (parenthesized_expression "(*param_1 == '\0')" ( (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar2 = (long *)**(long **)(param_1 + 8);" (assignment_expression "plVar2 = (long *)**(long **)(param_1 + 8)" identifier = (cast_expression "(long *)**(long **)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(long **)(param_1 + 8)" * (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))))) ;) (if_statement "if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" if (parenthesized_expression "(plVar2 != *(long **)(param_1 + 8))" ( (binary_expression "plVar2 != *(long **)(param_1 + 8)" identifier != (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" { (do_statement "do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);" do (compound_statement "{\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    }" { (expression_statement "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);" (assignment_expression "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" identifier = (call_expression "(**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" (parenthesized_expression "(**(code **)(*(long *)plVar2[2] + 0x68))" ( (pointer_expression "**(code **)(*(long *)plVar2[2] + 0x68)" * (pointer_expression "*(code **)(*(long *)plVar2[2] + 0x68)" * (cast_expression "(code **)(*(long *)plVar2[2] + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)plVar2[2] + 0x68)" ( (binary_expression "*(long *)plVar2[2] + 0x68" (pointer_expression "*(long *)plVar2[2]" * (cast_expression "(long *)plVar2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" ( (cast_expression "(long *)plVar2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ])) , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if ((char)uVar1 != '\0') {\n        return uVar1;\n      }" if (parenthesized_expression "((char)uVar1 != '\0')" ( (binary_expression "(char)uVar1 != '\0'" (cast_expression "(char)uVar1" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (expression_statement "plVar2 = (long *)*plVar2;" (assignment_expression "plVar2 = (long *)*plVar2" identifier = (cast_expression "(long *)*plVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar2" * identifier))) ;) }) while (parenthesized_expression "((long *)*(long *)(param_1 + 8) != plVar2)" ( (binary_expression "(long *)*(long *)(param_1 + 8) != plVar2" (cast_expression "(long *)*(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) != identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) != IDENT) )) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined8\nFUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)\n\n{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_00206860(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" (identifier "FUN_00206860") (parameter_list "(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n            undefined8 param_5,undefined8 param_6)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "undefined8 param_5" (type_identifier "undefined8") (identifier "param_5")) (, ",") (parameter_declaration "undefined8 param_6" (type_identifier "undefined8") (identifier "param_6")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  long *plVar2;\n  \n  if (*param_1 == '\0') {\n    return 0;\n  }\n  plVar2 = (long *)**(long **)(param_1 + 8);\n  if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }\n  return 0;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (if_statement "if (*param_1 == '\0') {\n    return 0;\n  }" (if "if") (parenthesized_expression "(*param_1 == '\0')" (( "(") (binary_expression "*param_1 == '\0'" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "plVar2 = (long *)**(long **)(param_1 + 8);" (assignment_expression "plVar2 = (long *)**(long **)(param_1 + 8)" (identifier "plVar2") (= "=") (cast_expression "(long *)**(long **)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "**(long **)(param_1 + 8)" (* "*") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))))) (; ";")) (if_statement "if (plVar2 != *(long **)(param_1 + 8)) {\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" (if "if") (parenthesized_expression "(plVar2 != *(long **)(param_1 + 8))" (( "(") (binary_expression "plVar2 != *(long **)(param_1 + 8)" (identifier "plVar2") (!= "!=") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) () ")")) (compound_statement "{\n    do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);\n  }" ({ "{") (do_statement "do {\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    } while ((long *)*(long *)(param_1 + 8) != plVar2);" (do "do") (compound_statement "{\n      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);\n      if ((char)uVar1 != '\0') {\n        return uVar1;\n      }\n      plVar2 = (long *)*plVar2;\n    }" ({ "{") (expression_statement "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);" (assignment_expression "uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" (identifier "uVar1") (= "=") (call_expression "(**(code **)(*(long *)plVar2[2] + 0x68))\n                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" (parenthesized_expression "(**(code **)(*(long *)plVar2[2] + 0x68))" (( "(") (pointer_expression "**(code **)(*(long *)plVar2[2] + 0x68)" (* "*") (pointer_expression "*(code **)(*(long *)plVar2[2] + 0x68)" (* "*") (cast_expression "(code **)(*(long *)plVar2[2] + 0x68)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)plVar2[2] + 0x68)" (( "(") (binary_expression "*(long *)plVar2[2] + 0x68" (pointer_expression "*(long *)plVar2[2]" (* "*") (cast_expression "(long *)plVar2[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")))) (+ "+") (number_literal "0x68")) () ")"))))) () ")")) (argument_list "((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6)" (( "(") (cast_expression "(long *)plVar2[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]"))) (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") () ")")))) (; ";")) (if_statement "if ((char)uVar1 != '\0') {\n        return uVar1;\n      }" (if "if") (parenthesized_expression "((char)uVar1 != '\0')" (( "(") (binary_expression "(char)uVar1 != '\0'" (cast_expression "(char)uVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar1")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return uVar1;\n      }" ({ "{") (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (expression_statement "plVar2 = (long *)*plVar2;" (assignment_expression "plVar2 = (long *)*plVar2" (identifier "plVar2") (= "=") (cast_expression "(long *)*plVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar2" (* "*") (identifier "plVar2")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((long *)*(long *)(param_1 + 8) != plVar2)" (( "(") (binary_expression "(long *)*(long *)(param_1 + 8) != plVar2" (cast_expression "(long *)*(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*(long *)(param_1 + 8)" (* "*") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (!= "!=") (identifier "plVar2")) () ")")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool get_output_section_info(Script_sections * this, char * name,
   uint64_t * address, uint64_t * load_address, uint64_t * addralign, uint64_t * size) */

bool __thiscall
gold::type_1::function_1
          (type_1 *this,char *name,uint64_t *address,uint64_t *load_address,
          uint64_t *addralign,uint64_t *size)

{
  char var_5;
  type_2 *var_4;
  
  if (this->saw_sections_clause_ == false) {
    return false;
  }
  var_4 = (this->sections_elements_->
           super__List_base<gold::var_1*var_3,_std::allocator<gold::var_1*>var_2>var_3).
           _M_impl._M_node.super__List_node_base._M_next;
  if (var_4 != (type_2 *)this->sections_elements_) {
    do {
      var_5 = (**(type_3 **)(*(long *)var_4[1]._M_next + 0x68))
                        (var_4[1]._M_next,name,address,load_address,addralign,size);
      if (var_5 != '\0') {
        return (bool)var_5;
      }
      var_4 = (((_List_base<gold::var_1*,_std::allocator<gold::var_1*>var_2> *var_3)
                &var_4->_M_next)->_M_impl)._M_node.super__List_node_base._M_next;
    } while ((type_2 *)this->sections_elements_ != var_4);
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (number_literal))))))) arguments: (argument_list (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) (identifier) (identifier) (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))))) (return_statement (number_literal)))))

undefined8
MASKED(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,undefined8 param_6)

{
  undefined8 uVar1;
  long *plVar2;
  
  if (*param_1 == '\0') {
    return 0;
  }
  plVar2 = (long *)**(long **)(param_1 + 8);
  if (plVar2 != *(long **)(param_1 + 8)) {
    do {
      uVar1 = (**(code **)(*(long *)plVar2[2] + 0x68))
                        ((long *)plVar2[2],param_2,param_3,param_4,param_5,param_6);
      if ((char)uVar1 != '\0') {
        return uVar1;
      }
      plVar2 = (long *)*plVar2;
    } while ((long *)*(long *)(param_1 + 8) != plVar2);
  }
  return 0;
}

