
/* DWARF original prototype: bool has_dynamic_reloc(Output_segment * this) */

bool __thiscall gold::Output_segment::has_dynamic_reloc(Output_segment *this)

{
  uint64_t *puVar1;
  pointer ppOVar2;
  byte bVar3;
  pointer ppOVar4;
  
  puVar1 = &this->vaddr_;
  do {
    ppOVar4 = this->output_lists_[0].
              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.
              _M_start;
    ppOVar2 = this->output_lists_[0].
              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.
              _M_finish;
    if (ppOVar4 != ppOVar2) {
      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;
      if ((bVar3 & 1) != 0) {
        return (bool)(bVar3 & 1);
      }
      while( true ) {
        ppOVar4 = ppOVar4 + 1;
        if (ppOVar4 == ppOVar2) break;
        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;
        if ((bVar3 & 1) != 0) {
          return (bool)(bVar3 & 1);
        }
      }
    }
    this = (Output_segment *)(this->output_lists_ + 1);
  } while ((Output_segment *)puVar1 != this);
  return false;
}



byte FUN_00262a90(long *param_1)

{
  long *plVar1;
  byte bVar2;
  long *plVar3;
  
  plVar1 = param_1 + 0x57;
  do {
    plVar3 = (long *)*param_1;
    if (plVar3 != (long *)param_1[1]) {
      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;
      if ((bVar2 & 1) != 0) {
        return bVar2 & 1;
      }
      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {
        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;
        if ((bVar2 & 1) != 0) {
          return bVar2 & 1;
        }
      }
    }
    param_1 = param_1 + 3;
  } while (plVar1 != param_1);
  return 0;
}


LEA RSI,[RDI + 0x2b8]
NOP word ptr [RAX + RAX*0x1]
MOV RDX,qword ptr [RDI]
MOV RCX,qword ptr [RDI + 0x8]
CMP RDX,RCX
JZ 0x00262ad8
MOV RAX,qword ptr [RDX]
MOVZX EAX,byte ptr [RAX + 0x20]
SHR AL,0x4
AND EAX,0x1
JZ 0x00262acf
JMP 0x00262ae9
MOV RAX,qword ptr [RDX]
MOVZX EAX,byte ptr [RAX + 0x20]
SHR AL,0x4
AND EAX,0x1
JNZ 0x00262ae8
ADD RDX,0x8
CMP RDX,RCX
JNZ 0x00262ac0
ADD RDI,0x18
CMP RSI,RDI
JNZ 0x00262aa0
XOR EAX,EAX
RET
RET
RET
(translation_unit "byte FUN_00262a90(long *param_1)\n\n{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}\n\n" (function_definition "byte FUN_00262a90(long *param_1)\n\n{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" type_identifier (function_declarator "FUN_00262a90(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (expression_statement "plVar1 = param_1 + 0x57;" (assignment_expression "plVar1 = param_1 + 0x57" identifier = (binary_expression "param_1 + 0x57" identifier + number_literal)) ;) (do_statement "do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);" do (compound_statement "{\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  }" { (expression_statement "plVar3 = (long *)*param_1;" (assignment_expression "plVar3 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" if (parenthesized_expression "(plVar3 != (long *)param_1[1])" ( (binary_expression "plVar3 != (long *)param_1[1]" identifier != (cast_expression "(long *)param_1[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (compound_statement "{\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" { (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" identifier = (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" * (cast_expression "(byte *)(*plVar3 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar3 + 0x20)" ( (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" * identifier) + number_literal) )))) >> number_literal)) ;) (if_statement "if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }" if (parenthesized_expression "((bVar2 & 1) != 0)" ( (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" ( (binary_expression "bVar2 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return bVar2 & 1;\n      }" { (return_statement "return bVar2 & 1;" return (binary_expression "bVar2 & 1" identifier & number_literal) ;) })) (while_statement "while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" while (parenthesized_expression "(plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1])" ( (comma_expression "plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) , (binary_expression "plVar3 != (long *)param_1[1]" identifier != (cast_expression "(long *)param_1[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) )) (compound_statement "{\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" { (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" identifier = (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" * (cast_expression "(byte *)(*plVar3 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar3 + 0x20)" ( (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" * identifier) + number_literal) )))) >> number_literal)) ;) (if_statement "if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }" if (parenthesized_expression "((bVar2 & 1) != 0)" ( (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" ( (binary_expression "bVar2 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          return bVar2 & 1;\n        }" { (return_statement "return bVar2 & 1;" return (binary_expression "bVar2 & 1" identifier & number_literal) ;) })) })) })) (expression_statement "param_1 = param_1 + 3;" (assignment_expression "param_1 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar1 != param_1)" ( (binary_expression "plVar1 != param_1" identifier != identifier) )) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: bool has_dynamic_reloc(Output_segment * this) */\n\nbool __thiscall gold::Output_segment::has_dynamic_reloc(Output_segment *this)\n\n{\n  uint64_t *puVar1;\n  pointer ppOVar2;\n  byte bVar3;\n  pointer ppOVar4;\n  \n  puVar1 = &this->vaddr_;\n  do {\n    ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;\n    ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;\n    if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }\n    this = (Output_segment *)(this->output_lists_ + 1);\n  } while ((Output_segment *)puVar1 != this);\n  return false;\n}\n\n" comment (function_definition "bool __thiscall gold::Output_segment::has_dynamic_reloc(Output_segment *this)\n\n{\n  uint64_t *puVar1;\n  pointer ppOVar2;\n  byte bVar3;\n  pointer ppOVar4;\n  \n  puVar1 = &this->vaddr_;\n  do {\n    ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;\n    ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;\n    if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }\n    this = (Output_segment *)(this->output_lists_ + 1);\n  } while ((Output_segment *)puVar1 != this);\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_segment::" identifier : : identifier : :) (function_declarator "has_dynamic_reloc(Output_segment *this)" identifier (parameter_list "(Output_segment *this)" ( (parameter_declaration "Output_segment *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  uint64_t *puVar1;\n  pointer ppOVar2;\n  byte bVar3;\n  pointer ppOVar4;\n  \n  puVar1 = &this->vaddr_;\n  do {\n    ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;\n    ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;\n    if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }\n    this = (Output_segment *)(this->output_lists_ + 1);\n  } while ((Output_segment *)puVar1 != this);\n  return false;\n}" { (declaration "uint64_t *puVar1;" primitive_type (pointer_declarator "*puVar1" * identifier) ;) (declaration "pointer ppOVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "pointer ppOVar4;" type_identifier identifier ;) (expression_statement "puVar1 = &this->vaddr_;" (assignment_expression "puVar1 = &this->vaddr_" identifier = (pointer_expression "&this->vaddr_" & (field_expression "this->vaddr_" identifier -> field_identifier))) ;) (do_statement "do {\n    ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;\n    ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;\n    if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }\n    this = (Output_segment *)(this->output_lists_ + 1);\n  } while ((Output_segment *)puVar1 != this);" do (compound_statement "{\n    ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;\n    ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;\n    if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }\n    this = (Output_segment *)(this->output_lists_ + 1);\n  }" { (expression_statement "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start;" (field_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_start" (field_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl" (binary_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std" (assignment_expression "ppOVar4 = this->output_lists_[0].\n              super__Vector_base<gold" identifier = (binary_expression "this->output_lists_[0].\n              super__Vector_base<gold" (field_expression "this->output_lists_[0].\n              super__Vector_base" (subscript_expression "this->output_lists_[0]" (field_expression "this->output_lists_" identifier -> field_identifier) [ number_literal ]) . field_identifier) < identifier)) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish;" (field_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n              _M_finish" (field_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl" (binary_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold::Output_data*,_std" (assignment_expression "ppOVar2 = this->output_lists_[0].\n              super__Vector_base<gold" identifier = (binary_expression "this->output_lists_[0].\n              super__Vector_base<gold" (field_expression "this->output_lists_[0].\n              super__Vector_base" (subscript_expression "this->output_lists_[0]" (field_expression "this->output_lists_" identifier -> field_identifier) [ number_literal ]) . field_identifier) < identifier)) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppOVar4 != ppOVar2) {\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }" if (parenthesized_expression "(ppOVar4 != ppOVar2)" ( (binary_expression "ppOVar4 != ppOVar2" identifier != identifier) )) (compound_statement "{\n      bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n      if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }\n      while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }\n    }" { (expression_statement "bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;" (assignment_expression "bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4" identifier = (binary_expression "(byte)(*ppOVar4)->field_0x20 >> 4" (field_expression "(byte)(*ppOVar4)->field_0x20" (call_expression "(byte)(*ppOVar4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*ppOVar4)" ( (pointer_expression "*ppOVar4" * identifier) ))) -> field_identifier) >> number_literal)) ;) (if_statement "if ((bVar3 & 1) != 0) {\n        return (bool)(bVar3 & 1);\n      }" if (parenthesized_expression "((bVar3 & 1) != 0)" ( (binary_expression "(bVar3 & 1) != 0" (parenthesized_expression "(bVar3 & 1)" ( (binary_expression "bVar3 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return (bool)(bVar3 & 1);\n      }" { (return_statement "return (bool)(bVar3 & 1);" return (cast_expression "(bool)(bVar3 & 1)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar3 & 1)" ( (binary_expression "bVar3 & 1" identifier & number_literal) ))) ;) })) (while_statement "while( true ) {\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        ppOVar4 = ppOVar4 + 1;\n        if (ppOVar4 == ppOVar2) break;\n        bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;\n        if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }\n      }" { (expression_statement "ppOVar4 = ppOVar4 + 1;" (assignment_expression "ppOVar4 = ppOVar4 + 1" identifier = (binary_expression "ppOVar4 + 1" identifier + number_literal)) ;) (if_statement "if (ppOVar4 == ppOVar2) break;" if (parenthesized_expression "(ppOVar4 == ppOVar2)" ( (binary_expression "ppOVar4 == ppOVar2" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4;" (assignment_expression "bVar3 = (byte)(*ppOVar4)->field_0x20 >> 4" identifier = (binary_expression "(byte)(*ppOVar4)->field_0x20 >> 4" (field_expression "(byte)(*ppOVar4)->field_0x20" (call_expression "(byte)(*ppOVar4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*ppOVar4)" ( (pointer_expression "*ppOVar4" * identifier) ))) -> field_identifier) >> number_literal)) ;) (if_statement "if ((bVar3 & 1) != 0) {\n          return (bool)(bVar3 & 1);\n        }" if (parenthesized_expression "((bVar3 & 1) != 0)" ( (binary_expression "(bVar3 & 1) != 0" (parenthesized_expression "(bVar3 & 1)" ( (binary_expression "bVar3 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          return (bool)(bVar3 & 1);\n        }" { (return_statement "return (bool)(bVar3 & 1);" return (cast_expression "(bool)(bVar3 & 1)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar3 & 1)" ( (binary_expression "bVar3 & 1" identifier & number_literal) ))) ;) })) })) })) (expression_statement "this = (Output_segment *)(this->output_lists_ + 1);" (assignment_expression "this = (Output_segment *)(this->output_lists_ + 1)" identifier = (cast_expression "(Output_segment *)(this->output_lists_ + 1)" ( (type_descriptor "Output_segment *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->output_lists_ + 1)" ( (binary_expression "this->output_lists_ + 1" (field_expression "this->output_lists_" identifier -> field_identifier) + number_literal) )))) ;) }) while (parenthesized_expression "((Output_segment *)puVar1 != this)" ( (binary_expression "(Output_segment *)puVar1 != this" (cast_expression "(Output_segment *)puVar1" ( (type_descriptor "Output_segment *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) )) ;) (return_statement "return false;" return false ;) })))
(translation_unit "byte FUN_00262a90(long *param_1)\n\n{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}\n\n" (function_definition "byte FUN_00262a90(long *param_1)\n\n{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" type_identifier (function_declarator "FUN_00262a90(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (expression_statement "plVar1 = param_1 + 0x57;" (assignment_expression "plVar1 = param_1 + 0x57" identifier = (binary_expression "param_1 + 0x57" identifier + number_literal)) ;) (do_statement "do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);" do (compound_statement "{\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  }" { (expression_statement "plVar3 = (long *)*param_1;" (assignment_expression "plVar3 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" if (parenthesized_expression "(plVar3 != (long *)param_1[1])" ( (binary_expression "plVar3 != (long *)param_1[1]" identifier != (cast_expression "(long *)param_1[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (compound_statement "{\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" { (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" identifier = (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" * (cast_expression "(byte *)(*plVar3 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar3 + 0x20)" ( (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" * identifier) + number_literal) )))) >> number_literal)) ;) (if_statement "if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }" if (parenthesized_expression "((bVar2 & 1) != 0)" ( (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" ( (binary_expression "bVar2 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        return bVar2 & 1;\n      }" { (return_statement "return bVar2 & 1;" return (binary_expression "bVar2 & 1" identifier & number_literal) ;) })) (while_statement "while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" while (parenthesized_expression "(plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1])" ( (comma_expression "plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) , (binary_expression "plVar3 != (long *)param_1[1]" identifier != (cast_expression "(long *)param_1[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) )) (compound_statement "{\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" { (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" identifier = (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" * (cast_expression "(byte *)(*plVar3 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar3 + 0x20)" ( (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" * identifier) + number_literal) )))) >> number_literal)) ;) (if_statement "if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }" if (parenthesized_expression "((bVar2 & 1) != 0)" ( (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" ( (binary_expression "bVar2 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          return bVar2 & 1;\n        }" { (return_statement "return bVar2 & 1;" return (binary_expression "bVar2 & 1" identifier & number_literal) ;) })) })) })) (expression_statement "param_1 = param_1 + 3;" (assignment_expression "param_1 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar1 != param_1)" ( (binary_expression "plVar1 != param_1" identifier != identifier) )) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (return_statement return (binary_expression IDENT & LIT) ;) })) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (return_statement return (binary_expression IDENT & LIT) ;) })) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (return_statement return LIT ;) })))
(function_definition "byte FUN_00262a90(long *param_1)\n\n{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" (type_identifier "byte") (function_declarator "FUN_00262a90(long *param_1)" (identifier "FUN_00262a90") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  long *plVar1;\n  byte bVar2;\n  long *plVar3;\n  \n  plVar1 = param_1 + 0x57;\n  do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);\n  return 0;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (expression_statement "plVar1 = param_1 + 0x57;" (assignment_expression "plVar1 = param_1 + 0x57" (identifier "plVar1") (= "=") (binary_expression "param_1 + 0x57" (identifier "param_1") (+ "+") (number_literal "0x57"))) (; ";")) (do_statement "do {\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  } while (plVar1 != param_1);" (do "do") (compound_statement "{\n    plVar3 = (long *)*param_1;\n    if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }\n    param_1 = param_1 + 3;\n  }" ({ "{") (expression_statement "plVar3 = (long *)*param_1;" (assignment_expression "plVar3 = (long *)*param_1" (identifier "plVar3") (= "=") (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (plVar3 != (long *)param_1[1]) {\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(plVar3 != (long *)param_1[1])" (( "(") (binary_expression "plVar3 != (long *)param_1[1]" (identifier "plVar3") (!= "!=") (cast_expression "(long *)param_1[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) () ")")) (compound_statement "{\n      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n      if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }\n      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }\n    }" ({ "{") (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" (identifier "bVar2") (= "=") (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" (* "*") (cast_expression "(byte *)(*plVar3 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*plVar3 + 0x20)" (( "(") (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (+ "+") (number_literal "0x20")) () ")")))) (>> ">>") (number_literal "4"))) (; ";")) (if_statement "if ((bVar2 & 1) != 0) {\n        return bVar2 & 1;\n      }" (if "if") (parenthesized_expression "((bVar2 & 1) != 0)" (( "(") (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" (( "(") (binary_expression "bVar2 & 1" (identifier "bVar2") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return bVar2 & 1;\n      }" ({ "{") (return_statement "return bVar2 & 1;" (return "return") (binary_expression "bVar2 & 1" (identifier "bVar2") (& "&") (number_literal "1")) (; ";")) (} "}"))) (while_statement "while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" (while "while") (parenthesized_expression "(plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1])" (( "(") (comma_expression "plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]" (assignment_expression "plVar3 = plVar3 + 1" (identifier "plVar3") (= "=") (binary_expression "plVar3 + 1" (identifier "plVar3") (+ "+") (number_literal "1"))) (, ",") (binary_expression "plVar3 != (long *)param_1[1]" (identifier "plVar3") (!= "!=") (cast_expression "(long *)param_1[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))))) () ")")) (compound_statement "{\n        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;\n        if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }\n      }" ({ "{") (expression_statement "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;" (assignment_expression "bVar2 = *(byte *)(*plVar3 + 0x20) >> 4" (identifier "bVar2") (= "=") (binary_expression "*(byte *)(*plVar3 + 0x20) >> 4" (pointer_expression "*(byte *)(*plVar3 + 0x20)" (* "*") (cast_expression "(byte *)(*plVar3 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*plVar3 + 0x20)" (( "(") (binary_expression "*plVar3 + 0x20" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (+ "+") (number_literal "0x20")) () ")")))) (>> ">>") (number_literal "4"))) (; ";")) (if_statement "if ((bVar2 & 1) != 0) {\n          return bVar2 & 1;\n        }" (if "if") (parenthesized_expression "((bVar2 & 1) != 0)" (( "(") (binary_expression "(bVar2 & 1) != 0" (parenthesized_expression "(bVar2 & 1)" (( "(") (binary_expression "bVar2 & 1" (identifier "bVar2") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          return bVar2 & 1;\n        }" ({ "{") (return_statement "return bVar2 & 1;" (return "return") (binary_expression "bVar2 & 1" (identifier "bVar2") (& "&") (number_literal "1")) (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "param_1 = param_1 + 3;" (assignment_expression "param_1 = param_1 + 3" (identifier "param_1") (= "=") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar1 != param_1)" (( "(") (binary_expression "plVar1 != param_1" (identifier "plVar1") (!= "!=") (identifier "param_1")) () ")")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: bool has_dynamic_reloc(Output_segment * this) */

bool __thiscall var_1::type_1::function_1(type_1 *var_7)

{
  uint64_t *puVar1;
  type_2 var_5;
  type_3 var_6;
  type_2 var_4;
  
  puVar1 = &var_7->vaddr_;
  do {
    var_4 = var_7->output_lists_[0].
              super__Vector_base<var_1::Output_data*,var_2::allocator<var_1::Output_data*>var_3>._M_impl.
              _M_start;
    var_5 = var_7->output_lists_[0].
              super__Vector_base<var_1::Output_data*,var_2::allocator<var_1::Output_data*>var_3>._M_impl.
              _M_finish;
    if (var_4 != var_5) {
      var_6 = (type_3)(*var_4)->field_0x20 >> 4;
      if ((var_6 & 1) != 0) {
        return (bool)(var_6 & 1);
      }
      while( true ) {
        var_4 = var_4 + 1;
        if (var_4 == var_5) break;
        var_6 = (type_3)(*var_4)->field_0x20 >> 4;
        if ((var_6 & 1) != 0) {
          return (bool)(var_6 & 1);
        }
      }
    }
    var_7 = (type_1 *)(var_7->output_lists_ + 1);
  } while ((type_1 *)puVar1 != var_7);
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (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))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (binary_expression left: (identifier) right: (number_literal))))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (return_statement (number_literal)))))

byte MASKED(long *param_1)

{
  long *plVar1;
  byte bVar2;
  long *plVar3;
  
  plVar1 = param_1 + 0x57;
  do {
    plVar3 = (long *)*param_1;
    if (plVar3 != (long *)param_1[1]) {
      bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;
      if ((bVar2 & 1) != 0) {
        return bVar2 & 1;
      }
      while (plVar3 = plVar3 + 1, plVar3 != (long *)param_1[1]) {
        bVar2 = *(byte *)(*plVar3 + 0x20) >> 4;
        if ((bVar2 & 1) != 0) {
          return bVar2 & 1;
        }
      }
    }
    param_1 = param_1 + 3;
  } while (plVar1 != param_1);
  return 0;
}

