
/* DWARF original prototype: void visit_die_for_decls(Gdb_index_info_reader * this, Dwarf_die * die,
   Dwarf_die * context) */

void __thiscall
gold::Gdb_index_info_reader::visit_die_for_decls
          (Gdb_index_info_reader *this,Dwarf_die *die,Dwarf_die *context)

{
  uint uVar1;
  ulong uVar2;
  int64_t iVar3;
  
  if ((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)) {
    uVar2 = 1L << ((byte)uVar1 & 0x3f);
    if ((uVar2 & 0x300000200c80014) != 0) {
      iVar3 = Dwarf_die::int_attribute(die,0x3c);
      if (iVar3 != 0) {
        add_declaration(this,die,context);
      }
      visit_children_for_decls(this,die);
      return;
    }
    if ((uVar2 & 0x10419000000000) != 0) {
      iVar3 = Dwarf_die::int_attribute(die,0x3c);
      if (iVar3 != 0) {
        add_declaration(this,die,context);
        return;
      }
    }
    return;
  }
  return;
}



void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)

{
  uint uVar1;
  ulong uVar2;
  long lVar3;
  
  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {
    uVar1 = **(uint **)(param_2 + 0x30);
    if (uVar1 < 0x3a) {
      uVar2 = 1L << ((byte)uVar1 & 0x3f);
      if ((uVar2 & 0x300000200c80014) != 0) {
        lVar3 = FUN_002b86a0(param_2,0x3c);
        if (lVar3 != 0) {
          FUN_0018dc10(param_1,param_2,param_3);
        }
        FUN_0018de50(param_1,param_2);
        return;
      }
      if ((uVar2 & 0x10419000000000) != 0) {
        lVar3 = FUN_002b86a0(param_2,0x3c);
        if (lVar3 != 0) {
          FUN_0018dc10(param_1,param_2,param_3);
          return;
        }
      }
      return;
    }
  }
  return;
}


MOV RAX,qword ptr [RSI + 0x30]
TEST RAX,RAX
JZ 0x0018ddf0
MOV ECX,dword ptr [RAX]
CMP ECX,0x39
JA 0x0018ddf0
MOV EAX,0x1
PUSH R12
MOV R12,RDX
MOV RDX,0x300000200c80014
SHL RAX,CL
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RSI
TEST RAX,RDX
JNZ 0x0018de20
MOV RDX,0x10419000000000
TEST RAX,RDX
JNZ 0x0018ddf8
POP RBX
POP RBP
POP R12
RET
RET
MOV ESI,0x3c
MOV RDI,RBX
CALL 0x002b86a0
TEST RAX,RAX
JZ 0x0018dde3
MOV RDX,R12
MOV RSI,RBX
MOV RDI,RBP
POP RBX
POP RBP
POP R12
JMP 0x0018dc10
MOV ESI,0x3c
MOV RDI,RBX
CALL 0x002b86a0
TEST RAX,RAX
JNZ 0x0018de40
MOV RSI,RBX
MOV RDI,RBP
POP RBX
POP RBP
POP R12
JMP 0x0018de50
MOV RDX,R12
MOV RSI,RBX
MOV RDI,RBP
CALL 0x0018dc10
JMP 0x0018de32
(translation_unit "void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" if (parenthesized_expression "(*(uint **)(param_2 + 0x30) != (uint *)0x0)" ( (binary_expression "*(uint **)(param_2 + 0x30) != (uint *)0x0" (pointer_expression "*(uint **)(param_2 + 0x30)" * (cast_expression "(uint **)(param_2 + 0x30)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" { (expression_statement "uVar1 = **(uint **)(param_2 + 0x30);" (assignment_expression "uVar1 = **(uint **)(param_2 + 0x30)" identifier = (pointer_expression "**(uint **)(param_2 + 0x30)" * (pointer_expression "*(uint **)(param_2 + 0x30)" * (cast_expression "(uint **)(param_2 + 0x30)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))))) ;) (if_statement "if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" if (parenthesized_expression "(uVar1 < 0x3a)" ( (binary_expression "uVar1 < 0x3a" identifier < number_literal) )) (compound_statement "{\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" { (expression_statement "uVar2 = 1L << ((byte)uVar1 & 0x3f);" (assignment_expression "uVar2 = 1L << ((byte)uVar1 & 0x3f)" identifier = (binary_expression "1L << ((byte)uVar1 & 0x3f)" number_literal << (parenthesized_expression "((byte)uVar1 & 0x3f)" ( (binary_expression "(byte)uVar1 & 0x3f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" if (parenthesized_expression "((uVar2 & 0x300000200c80014) != 0)" ( (binary_expression "(uVar2 & 0x300000200c80014) != 0" (parenthesized_expression "(uVar2 & 0x300000200c80014)" ( (binary_expression "uVar2 & 0x300000200c80014" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" { (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" identifier = (call_expression "FUN_002b86a0(param_2,0x3c)" identifier (argument_list "(param_2,0x3c)" ( identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" { (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) })) (expression_statement "FUN_0018de50(param_1,param_2);" (call_expression "FUN_0018de50(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) (if_statement "if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" if (parenthesized_expression "((uVar2 & 0x10419000000000) != 0)" ( (binary_expression "(uVar2 & 0x10419000000000) != 0" (parenthesized_expression "(uVar2 & 0x10419000000000)" ( (binary_expression "uVar2 & 0x10419000000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" { (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" identifier = (call_expression "FUN_002b86a0(param_2,0x3c)" identifier (argument_list "(param_2,0x3c)" ( identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" { (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void visit_die_for_decls(Gdb_index_info_reader * this, Dwarf_die * die,\n   Dwarf_die * context) */\n\nvoid __thiscall\ngold::Gdb_index_info_reader::visit_die_for_decls\n          (Gdb_index_info_reader *this,Dwarf_die *die,Dwarf_die *context)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  int64_t iVar3;\n  \n  if ((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)) {\n    uVar2 = 1L << ((byte)uVar1 & 0x3f);\n    if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }\n    if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }\n    return;\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall\ngold::Gdb_index_info_reader::visit_die_for_decls\n          (Gdb_index_info_reader *this,Dwarf_die *die,Dwarf_die *context)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  int64_t iVar3;\n  \n  if ((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)) {\n    uVar2 = 1L << ((byte)uVar1 & 0x3f);\n    if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }\n    if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }\n    return;\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Gdb_index_info_reader::" identifier : : identifier : :) (function_declarator "visit_die_for_decls\n          (Gdb_index_info_reader *this,Dwarf_die *die,Dwarf_die *context)" identifier (parameter_list "(Gdb_index_info_reader *this,Dwarf_die *die,Dwarf_die *context)" ( (parameter_declaration "Gdb_index_info_reader *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Dwarf_die *die" type_identifier (pointer_declarator "*die" * identifier)) , (parameter_declaration "Dwarf_die *context" type_identifier (pointer_declarator "*context" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  int64_t iVar3;\n  \n  if ((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)) {\n    uVar2 = 1L << ((byte)uVar1 & 0x3f);\n    if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }\n    if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "int64_t iVar3;" primitive_type identifier ;) (if_statement "if ((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)) {\n    uVar2 = 1L << ((byte)uVar1 & 0x3f);\n    if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }\n    if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }\n    return;\n  }" if (parenthesized_expression "((die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a))" ( (binary_expression "(die->abbrev_code_ != (Abbrev_code *)0x0) && (uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)" (parenthesized_expression "(die->abbrev_code_ != (Abbrev_code *)0x0)" ( (binary_expression "die->abbrev_code_ != (Abbrev_code *)0x0" (field_expression "die->abbrev_code_" identifier -> field_identifier) != (cast_expression "(Abbrev_code *)0x0" ( (type_descriptor "Abbrev_code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a)" ( (comma_expression "uVar1 = die->abbrev_code_->tag, uVar1 < 0x3a" (assignment_expression "uVar1 = die->abbrev_code_->tag" identifier = (field_expression "die->abbrev_code_->tag" (field_expression "die->abbrev_code_" identifier -> field_identifier) -> field_identifier)) , (binary_expression "uVar1 < 0x3a" identifier < number_literal)) ))) )) (compound_statement "{\n    uVar2 = 1L << ((byte)uVar1 & 0x3f);\n    if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }\n    if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }\n    return;\n  }" { (expression_statement "uVar2 = 1L << ((byte)uVar1 & 0x3f);" (assignment_expression "uVar2 = 1L << ((byte)uVar1 & 0x3f)" identifier = (binary_expression "1L << ((byte)uVar1 & 0x3f)" number_literal << (parenthesized_expression "((byte)uVar1 & 0x3f)" ( (binary_expression "(byte)uVar1 & 0x3f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if ((uVar2 & 0x300000200c80014) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }" if (parenthesized_expression "((uVar2 & 0x300000200c80014) != 0)" ( (binary_expression "(uVar2 & 0x300000200c80014) != 0" (parenthesized_expression "(uVar2 & 0x300000200c80014)" ( (binary_expression "uVar2 & 0x300000200c80014" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }\n      visit_children_for_decls(this,die);\n      return;\n    }" { (ERROR "iVar3 = Dwarf_die::" (assignment_expression "iVar3 = Dwarf_die" identifier = identifier) : :) (expression_statement "int_attribute(die,0x3c);" (call_expression "int_attribute(die,0x3c)" identifier (argument_list "(die,0x3c)" ( identifier , number_literal ))) ;) (if_statement "if (iVar3 != 0) {\n        add_declaration(this,die,context);\n      }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        add_declaration(this,die,context);\n      }" { (expression_statement "add_declaration(this,die,context);" (call_expression "add_declaration(this,die,context)" identifier (argument_list "(this,die,context)" ( identifier , identifier , identifier ))) ;) })) (expression_statement "visit_children_for_decls(this,die);" (call_expression "visit_children_for_decls(this,die)" identifier (argument_list "(this,die)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) (if_statement "if ((uVar2 & 0x10419000000000) != 0) {\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }" if (parenthesized_expression "((uVar2 & 0x10419000000000) != 0)" ( (binary_expression "(uVar2 & 0x10419000000000) != 0" (parenthesized_expression "(uVar2 & 0x10419000000000)" ( (binary_expression "uVar2 & 0x10419000000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar3 = Dwarf_die::int_attribute(die,0x3c);\n      if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }\n    }" { (ERROR "iVar3 = Dwarf_die::" (assignment_expression "iVar3 = Dwarf_die" identifier = identifier) : :) (expression_statement "int_attribute(die,0x3c);" (call_expression "int_attribute(die,0x3c)" identifier (argument_list "(die,0x3c)" ( identifier , number_literal ))) ;) (if_statement "if (iVar3 != 0) {\n        add_declaration(this,die,context);\n        return;\n      }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        add_declaration(this,die,context);\n        return;\n      }" { (expression_statement "add_declaration(this,die,context);" (call_expression "add_declaration(this,die,context)" identifier (argument_list "(this,die,context)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" if (parenthesized_expression "(*(uint **)(param_2 + 0x30) != (uint *)0x0)" ( (binary_expression "*(uint **)(param_2 + 0x30) != (uint *)0x0" (pointer_expression "*(uint **)(param_2 + 0x30)" * (cast_expression "(uint **)(param_2 + 0x30)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" { (expression_statement "uVar1 = **(uint **)(param_2 + 0x30);" (assignment_expression "uVar1 = **(uint **)(param_2 + 0x30)" identifier = (pointer_expression "**(uint **)(param_2 + 0x30)" * (pointer_expression "*(uint **)(param_2 + 0x30)" * (cast_expression "(uint **)(param_2 + 0x30)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))))) ;) (if_statement "if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" if (parenthesized_expression "(uVar1 < 0x3a)" ( (binary_expression "uVar1 < 0x3a" identifier < number_literal) )) (compound_statement "{\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" { (expression_statement "uVar2 = 1L << ((byte)uVar1 & 0x3f);" (assignment_expression "uVar2 = 1L << ((byte)uVar1 & 0x3f)" identifier = (binary_expression "1L << ((byte)uVar1 & 0x3f)" number_literal << (parenthesized_expression "((byte)uVar1 & 0x3f)" ( (binary_expression "(byte)uVar1 & 0x3f" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" if (parenthesized_expression "((uVar2 & 0x300000200c80014) != 0)" ( (binary_expression "(uVar2 & 0x300000200c80014) != 0" (parenthesized_expression "(uVar2 & 0x300000200c80014)" ( (binary_expression "uVar2 & 0x300000200c80014" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" { (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" identifier = (call_expression "FUN_002b86a0(param_2,0x3c)" identifier (argument_list "(param_2,0x3c)" ( identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" { (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) })) (expression_statement "FUN_0018de50(param_1,param_2);" (call_expression "FUN_0018de50(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) (if_statement "if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" if (parenthesized_expression "((uVar2 & 0x10419000000000) != 0)" ( (binary_expression "(uVar2 & 0x10419000000000) != 0" (parenthesized_expression "(uVar2 & 0x10419000000000)" ( (binary_expression "uVar2 & 0x10419000000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" { (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" identifier = (call_expression "FUN_002b86a0(param_2,0x3c)" identifier (argument_list "(param_2,0x3c)" ( identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" { (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) })) (return_statement return ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0018dda0(undefined8 param_1,long param_2,undefined8 param_3)" (identifier "FUN_0018dda0") (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  long lVar3;\n  \n  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (if_statement "if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" (if "if") (parenthesized_expression "(*(uint **)(param_2 + 0x30) != (uint *)0x0)" (( "(") (binary_expression "*(uint **)(param_2 + 0x30) != (uint *)0x0" (pointer_expression "*(uint **)(param_2 + 0x30)" (* "*") (cast_expression "(uint **)(param_2 + 0x30)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar1 = **(uint **)(param_2 + 0x30);\n    if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }\n  }" ({ "{") (expression_statement "uVar1 = **(uint **)(param_2 + 0x30);" (assignment_expression "uVar1 = **(uint **)(param_2 + 0x30)" (identifier "uVar1") (= "=") (pointer_expression "**(uint **)(param_2 + 0x30)" (* "*") (pointer_expression "*(uint **)(param_2 + 0x30)" (* "*") (cast_expression "(uint **)(param_2 + 0x30)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))))) (; ";")) (if_statement "if (uVar1 < 0x3a) {\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" (if "if") (parenthesized_expression "(uVar1 < 0x3a)" (( "(") (binary_expression "uVar1 < 0x3a" (identifier "uVar1") (< "<") (number_literal "0x3a")) () ")")) (compound_statement "{\n      uVar2 = 1L << ((byte)uVar1 & 0x3f);\n      if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }\n      if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }\n      return;\n    }" ({ "{") (expression_statement "uVar2 = 1L << ((byte)uVar1 & 0x3f);" (assignment_expression "uVar2 = 1L << ((byte)uVar1 & 0x3f)" (identifier "uVar2") (= "=") (binary_expression "1L << ((byte)uVar1 & 0x3f)" (number_literal "1L") (<< "<<") (parenthesized_expression "((byte)uVar1 & 0x3f)" (( "(") (binary_expression "(byte)uVar1 & 0x3f" (cast_expression "(byte)uVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar1")) (& "&") (number_literal "0x3f")) () ")")))) (; ";")) (if_statement "if ((uVar2 & 0x300000200c80014) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" (if "if") (parenthesized_expression "((uVar2 & 0x300000200c80014) != 0)" (( "(") (binary_expression "(uVar2 & 0x300000200c80014) != 0" (parenthesized_expression "(uVar2 & 0x300000200c80014)" (( "(") (binary_expression "uVar2 & 0x300000200c80014" (identifier "uVar2") (& "&") (number_literal "0x300000200c80014")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }\n        FUN_0018de50(param_1,param_2);\n        return;\n      }" ({ "{") (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" (identifier "lVar3") (= "=") (call_expression "FUN_002b86a0(param_2,0x3c)" (identifier "FUN_002b86a0") (argument_list "(param_2,0x3c)" (( "(") (identifier "param_2") (, ",") (number_literal "0x3c") () ")")))) (; ";")) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n        }" ({ "{") (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" (identifier "FUN_0018dc10") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0018de50(param_1,param_2);" (call_expression "FUN_0018de50(param_1,param_2)" (identifier "FUN_0018de50") (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if ((uVar2 & 0x10419000000000) != 0) {\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" (if "if") (parenthesized_expression "((uVar2 & 0x10419000000000) != 0)" (( "(") (binary_expression "(uVar2 & 0x10419000000000) != 0" (parenthesized_expression "(uVar2 & 0x10419000000000)" (( "(") (binary_expression "uVar2 & 0x10419000000000" (identifier "uVar2") (& "&") (number_literal "0x10419000000000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        lVar3 = FUN_002b86a0(param_2,0x3c);\n        if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }\n      }" ({ "{") (expression_statement "lVar3 = FUN_002b86a0(param_2,0x3c);" (assignment_expression "lVar3 = FUN_002b86a0(param_2,0x3c)" (identifier "lVar3") (= "=") (call_expression "FUN_002b86a0(param_2,0x3c)" (identifier "FUN_002b86a0") (argument_list "(param_2,0x3c)" (( "(") (identifier "param_2") (, ",") (number_literal "0x3c") () ")")))) (; ";")) (if_statement "if (lVar3 != 0) {\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0018dc10(param_1,param_2,param_3);\n          return;\n        }" ({ "{") (expression_statement "FUN_0018dc10(param_1,param_2,param_3);" (call_expression "FUN_0018dc10(param_1,param_2,param_3)" (identifier "FUN_0018dc10") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void visit_die_for_decls(Gdb_index_info_reader * this, Dwarf_die * die,
   Dwarf_die * context) */

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

{
  type_3 var_1;
  type_4 var_2;
  int64_t var_4;
  
  if ((die->abbrev_code_ != (type_5 *)0x0) && (var_1 = die->abbrev_code_->tag, var_1 < 0x3a)) {
    var_2 = 1L << ((type_6)var_1 & 0x3f);
    if ((var_2 & 0x300000200c80014) != 0) {
      var_4 = type_2::var_3(die,0x3c);
      if (var_4 != 0) {
        var_5(this,die,context);
      }
      var_6(this,die);
      return;
    }
    if ((var_2 & 0x10419000000000) != 0) {
      var_4 = type_2::var_3(die,0x3c);
      if (var_4 != 0) {
        var_5(this,die,context);
        return;
      }
    }
    return;
  }
  return;
}


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

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

{
  uint uVar1;
  ulong uVar2;
  long lVar3;
  
  if (*(uint **)(param_2 + 0x30) != (uint *)0x0) {
    uVar1 = **(uint **)(param_2 + 0x30);
    if (uVar1 < 0x3a) {
      uVar2 = 1L << ((byte)uVar1 & 0x3f);
      if ((uVar2 & 0x300000200c80014) != 0) {
        lVar3 = FUN_002b86a0(param_2,0x3c);
        if (lVar3 != 0) {
          FUN_0018dc10(param_1,param_2,param_3);
        }
        FUN_0018de50(param_1,param_2);
        return;
      }
      if ((uVar2 & 0x10419000000000) != 0) {
        lVar3 = FUN_002b86a0(param_2,0x3c);
        if (lVar3 != 0) {
          FUN_0018dc10(param_1,param_2,param_3);
          return;
        }
      }
      return;
    }
  }
  return;
}

