
void lang_for_each_statement_worker
               (_func_void_lang_statement_union_type_ptr *func,lang_statement_union_type *s)

{
  if (s == (lang_statement_union_type *)0x0) {
    return;
  }
  do {
    (*func)(s);
    switch((s->header).type) {
    case lang_output_section_statement_enum:
      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;
    case lang_group_statement_enum:
      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);
      s = (s->header).next;
      break;
    case lang_wild_statement_enum:
      lang_for_each_statement_worker(func,(s->wild_statement).children.head);
      s = (s->header).next;
      break;
    case lang_constructors_statement_enum:
      lang_for_each_statement_worker(func,constructor_list.head);
    case lang_assignment_statement_enum:
    case lang_input_statement_enum:
    case lang_address_statement_enum:
    case lang_input_section_enum:
    case lang_object_symbols_statement_enum:
    case lang_fill_statement_enum:
    case lang_data_statement_enum:
    case lang_reloc_statement_enum:
    case lang_target_statement_enum:
    case lang_output_statement_enum:
    case lang_padding_statement_enum:
    case lang_insert_statement_enum:
switchD_00115a91_caseD_1:
      s = (s->header).next;
      break;
    default:
      info_assert("../../ld/ldlang.c",0x3e0);
      s = (s->header).next;
    }
    if (s == (lang_statement_union *)0x0) {
      return;
    }
  } while( true );
}



void FUN_00115a60(code *param_1,undefined8 *param_2)

{
  if (param_2 == (undefined8 *)0x0) {
    return;
  }
  do {
    (*param_1)(param_2);
    switch(*(undefined4 *)(param_2 + 1)) {
    case 0:
      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;
    case 0xd:
      FUN_00115a60(param_1,param_2[2]);
      param_2 = (undefined8 *)*param_2;
      break;
    case 4:
      FUN_00115a60(param_1,param_2[6]);
      param_2 = (undefined8 *)*param_2;
      break;
    case 0xf:
      FUN_00115a60(param_1,DAT_001859c0);
    case 1:
    case 2:
    case 3:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 0xb:
    case 0xc:
    case 0xe:
switchD_00115a91_caseD_1:
      param_2 = (undefined8 *)*param_2;
      break;
    default:
      FUN_001252c0("../../ld/ldlang.c",0x3e0);
      param_2 = (undefined8 *)*param_2;
    }
    if (param_2 == (undefined8 *)0x0) {
      return;
    }
  } while( true );
}


TEST RSI,RSI
JZ 0x00115b20
PUSH R12
MOV R12,RDI
PUSH RBP
LEA RBP,[0x13eb24]
PUSH RBX
MOV RBX,RSI
MOV RDI,RBX
CALL R12
CMP dword ptr [RBX + 0x8],0xf
JA 0x00115b00
MOV EAX,dword ptr [RBX + 0x8]
MOVSXD RAX,dword ptr [RBP + RAX*0x4]
ADD RAX,RBP
JMP RAX
MOV RSI,qword ptr [0x001859c0]
MOV RDI,R12
CALL 0x00115a60
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x00115a7a
POP RBX
POP RBP
POP R12
RET
CMP dword ptr [RBX + 0x84],-0x1
JZ 0x00115aa7
MOV RSI,qword ptr [RBX + 0x10]
MOV RDI,R12
CALL 0x00115a60
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x00115a7a
JMP 0x00115aaf
MOV RSI,qword ptr [RBX + 0x30]
MOV RDI,R12
CALL 0x00115a60
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x00115a7a
JMP 0x00115aaf
MOV ESI,0x3e0
LEA RDI,[0x13ee66]
CALL 0x001252c0
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x00115a7a
JMP 0x00115aaf
RET
(translation_unit "void FUN_00115a60(code *param_1,undefined8 *param_2)\n\n{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}\n\n" (function_definition "void FUN_00115a60(code *param_1,undefined8 *param_2)\n\n{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_00115a60(code *param_1,undefined8 *param_2)" identifier (parameter_list "(code *param_1,undefined8 *param_2)" ( (parameter_declaration "code *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" { (if_statement "if (param_2 == (undefined8 *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == (undefined8 *)0x0)" ( (binary_expression "param_2 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  }" { (expression_statement "(*param_1)(param_2);" (call_expression "(*param_1)(param_2)" (parenthesized_expression "(*param_1)" ( (pointer_expression "*param_1" * identifier) )) (argument_list "(param_2)" ( identifier ))) ;) (switch_statement "switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" switch (parenthesized_expression "(*(undefined4 *)(param_2 + 1))" ( (pointer_expression "*(undefined4 *)(param_2 + 1)" * (cast_expression "(undefined4 *)(param_2 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 1)" ( (binary_expression "param_2 + 1" identifier + number_literal) )))) )) (compound_statement "{\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" { (case_statement "case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" case number_literal : (if_statement "if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" if (parenthesized_expression "(*(int *)((long)param_2 + 0x84) == -1)" ( (binary_expression "*(int *)((long)param_2 + 0x84) == -1" (pointer_expression "*(int *)((long)param_2 + 0x84)" * (cast_expression "(int *)((long)param_2 + 0x84)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x84)" ( (binary_expression "(long)param_2 + 0x84" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (goto_statement "goto switchD_00115a91_caseD_1;" goto statement_identifier ;))) (case_statement "case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (expression_statement "FUN_00115a60(param_1,param_2[2]);" (call_expression "FUN_00115a60(param_1,param_2[2])" identifier (argument_list "(param_1,param_2[2])" ( identifier , (subscript_expression "param_2[2]" identifier [ number_literal ]) ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (expression_statement "FUN_00115a60(param_1,param_2[6]);" (call_expression "FUN_00115a60(param_1,param_2[6])" identifier (argument_list "(param_1,param_2[6])" ( identifier , (subscript_expression "param_2[6]" identifier [ number_literal ]) ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);" case number_literal : (expression_statement "FUN_00115a60(param_1,DAT_001859c0);" (call_expression "FUN_00115a60(param_1,DAT_001859c0)" identifier (argument_list "(param_1,DAT_001859c0)" ( identifier , identifier ))) ;)) (case_statement "case 1:" case number_literal :) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:" case number_literal :) (case_statement "case 10:" case number_literal :) (case_statement "case 0xb:" case number_literal :) (case_statement "case 0xc:" case number_literal :) (case_statement "case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (labeled_statement "switchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;" statement_identifier : (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (break_statement "break;" break ;)) (case_statement "default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;" default : (expression_statement "FUN_001252c0("../../ld/ldlang.c",0x3e0);" (call_expression "FUN_001252c0("../../ld/ldlang.c",0x3e0)" identifier (argument_list "("../../ld/ldlang.c",0x3e0)" ( (string_literal ""../../ld/ldlang.c"" " string_content ") , number_literal ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) })) (if_statement "if (param_2 == (undefined8 *)0x0) {\n      return;\n    }" if (parenthesized_expression "(param_2 == (undefined8 *)0x0)" ( (binary_expression "param_2 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void lang_for_each_statement_worker\n               (_func_void_lang_statement_union_type_ptr *func,lang_statement_union_type *s)\n\n{\n  if (s == (lang_statement_union_type *)0x0) {\n    return;\n  }\n  do {\n    (*func)(s);\n    switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }\n    if (s == (lang_statement_union *)0x0) {\n      return;\n    }\n  } while( true );\n}\n\n" (function_definition "void lang_for_each_statement_worker\n               (_func_void_lang_statement_union_type_ptr *func,lang_statement_union_type *s)\n\n{\n  if (s == (lang_statement_union_type *)0x0) {\n    return;\n  }\n  do {\n    (*func)(s);\n    switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }\n    if (s == (lang_statement_union *)0x0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (function_declarator "lang_for_each_statement_worker\n               (_func_void_lang_statement_union_type_ptr *func,lang_statement_union_type *s)" identifier (parameter_list "(_func_void_lang_statement_union_type_ptr *func,lang_statement_union_type *s)" ( (parameter_declaration "_func_void_lang_statement_union_type_ptr *func" type_identifier (pointer_declarator "*func" * identifier)) , (parameter_declaration "lang_statement_union_type *s" type_identifier (pointer_declarator "*s" * identifier)) ))) (compound_statement "{\n  if (s == (lang_statement_union_type *)0x0) {\n    return;\n  }\n  do {\n    (*func)(s);\n    switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }\n    if (s == (lang_statement_union *)0x0) {\n      return;\n    }\n  } while( true );\n}" { (if_statement "if (s == (lang_statement_union_type *)0x0) {\n    return;\n  }" if (parenthesized_expression "(s == (lang_statement_union_type *)0x0)" ( (binary_expression "s == (lang_statement_union_type *)0x0" identifier == (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    (*func)(s);\n    switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }\n    if (s == (lang_statement_union *)0x0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    (*func)(s);\n    switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }\n    if (s == (lang_statement_union *)0x0) {\n      return;\n    }\n  }" { (expression_statement "(*func)(s);" (call_expression "(*func)(s)" (parenthesized_expression "(*func)" ( (pointer_expression "*func" * identifier) )) (argument_list "(s)" ( identifier ))) ;) (switch_statement "switch((s->header).type) {\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }" switch (parenthesized_expression "((s->header).type)" ( (field_expression "(s->header).type" (parenthesized_expression "(s->header)" ( (field_expression "s->header" identifier -> field_identifier) )) . field_identifier) )) (compound_statement "{\n    case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;\n    case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;\n    case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);\n    case lang_assignment_statement_enum:\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;\n    default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;\n    }" { (case_statement "case lang_output_section_statement_enum:\n      if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;" case identifier : (if_statement "if ((s->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;" if (parenthesized_expression "((s->output_section_statement).constraint == -1)" ( (binary_expression "(s->output_section_statement).constraint == -1" (field_expression "(s->output_section_statement).constraint" (parenthesized_expression "(s->output_section_statement)" ( (field_expression "s->output_section_statement" identifier -> field_identifier) )) . field_identifier) == number_literal) )) (goto_statement "goto switchD_00115a91_caseD_1;" goto statement_identifier ;))) (case_statement "case lang_group_statement_enum:\n      lang_for_each_statement_worker(func,(s->output_section_statement).children.head);\n      s = (s->header).next;\n      break;" case identifier : (expression_statement "lang_for_each_statement_worker(func,(s->output_section_statement).children.head);" (call_expression "lang_for_each_statement_worker(func,(s->output_section_statement).children.head)" identifier (argument_list "(func,(s->output_section_statement).children.head)" ( identifier , (field_expression "(s->output_section_statement).children.head" (field_expression "(s->output_section_statement).children" (parenthesized_expression "(s->output_section_statement)" ( (field_expression "s->output_section_statement" identifier -> field_identifier) )) . field_identifier) . field_identifier) ))) ;) (expression_statement "s = (s->header).next;" (assignment_expression "s = (s->header).next" identifier = (field_expression "(s->header).next" (parenthesized_expression "(s->header)" ( (field_expression "s->header" identifier -> field_identifier) )) . field_identifier)) ;) (break_statement "break;" break ;)) (case_statement "case lang_wild_statement_enum:\n      lang_for_each_statement_worker(func,(s->wild_statement).children.head);\n      s = (s->header).next;\n      break;" case identifier : (expression_statement "lang_for_each_statement_worker(func,(s->wild_statement).children.head);" (call_expression "lang_for_each_statement_worker(func,(s->wild_statement).children.head)" identifier (argument_list "(func,(s->wild_statement).children.head)" ( identifier , (field_expression "(s->wild_statement).children.head" (field_expression "(s->wild_statement).children" (parenthesized_expression "(s->wild_statement)" ( (field_expression "s->wild_statement" identifier -> field_identifier) )) . field_identifier) . field_identifier) ))) ;) (expression_statement "s = (s->header).next;" (assignment_expression "s = (s->header).next" identifier = (field_expression "(s->header).next" (parenthesized_expression "(s->header)" ( (field_expression "s->header" identifier -> field_identifier) )) . field_identifier)) ;) (break_statement "break;" break ;)) (case_statement "case lang_constructors_statement_enum:\n      lang_for_each_statement_worker(func,constructor_list.head);" case identifier : (expression_statement "lang_for_each_statement_worker(func,constructor_list.head);" (call_expression "lang_for_each_statement_worker(func,constructor_list.head)" identifier (argument_list "(func,constructor_list.head)" ( identifier , (field_expression "constructor_list.head" identifier . field_identifier) ))) ;)) (case_statement "case lang_assignment_statement_enum:" case identifier :) (case_statement "case lang_input_statement_enum:" case identifier :) (case_statement "case lang_address_statement_enum:" case identifier :) (case_statement "case lang_input_section_enum:" case identifier :) (case_statement "case lang_object_symbols_statement_enum:" case identifier :) (case_statement "case lang_fill_statement_enum:" case identifier :) (case_statement "case lang_data_statement_enum:" case identifier :) (case_statement "case lang_reloc_statement_enum:" case identifier :) (case_statement "case lang_target_statement_enum:" case identifier :) (case_statement "case lang_output_statement_enum:" case identifier :) (case_statement "case lang_padding_statement_enum:" case identifier :) (case_statement "case lang_insert_statement_enum:\nswitchD_00115a91_caseD_1:\n      s = (s->header).next;\n      break;" case identifier : (labeled_statement "switchD_00115a91_caseD_1:\n      s = (s->header).next;" statement_identifier : (expression_statement "s = (s->header).next;" (assignment_expression "s = (s->header).next" identifier = (field_expression "(s->header).next" (parenthesized_expression "(s->header)" ( (field_expression "s->header" identifier -> field_identifier) )) . field_identifier)) ;)) (break_statement "break;" break ;)) (case_statement "default:\n      info_assert("../../ld/ldlang.c",0x3e0);\n      s = (s->header).next;" default : (expression_statement "info_assert("../../ld/ldlang.c",0x3e0);" (call_expression "info_assert("../../ld/ldlang.c",0x3e0)" identifier (argument_list "("../../ld/ldlang.c",0x3e0)" ( (string_literal ""../../ld/ldlang.c"" " string_content ") , number_literal ))) ;) (expression_statement "s = (s->header).next;" (assignment_expression "s = (s->header).next" identifier = (field_expression "(s->header).next" (parenthesized_expression "(s->header)" ( (field_expression "s->header" identifier -> field_identifier) )) . field_identifier)) ;)) })) (if_statement "if (s == (lang_statement_union *)0x0) {\n      return;\n    }" if (parenthesized_expression "(s == (lang_statement_union *)0x0)" ( (binary_expression "s == (lang_statement_union *)0x0" identifier == (cast_expression "(lang_statement_union *)0x0" ( (type_descriptor "lang_statement_union *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void FUN_00115a60(code *param_1,undefined8 *param_2)\n\n{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}\n\n" (function_definition "void FUN_00115a60(code *param_1,undefined8 *param_2)\n\n{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_00115a60(code *param_1,undefined8 *param_2)" identifier (parameter_list "(code *param_1,undefined8 *param_2)" ( (parameter_declaration "code *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" { (if_statement "if (param_2 == (undefined8 *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == (undefined8 *)0x0)" ( (binary_expression "param_2 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  }" { (expression_statement "(*param_1)(param_2);" (call_expression "(*param_1)(param_2)" (parenthesized_expression "(*param_1)" ( (pointer_expression "*param_1" * identifier) )) (argument_list "(param_2)" ( identifier ))) ;) (switch_statement "switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" switch (parenthesized_expression "(*(undefined4 *)(param_2 + 1))" ( (pointer_expression "*(undefined4 *)(param_2 + 1)" * (cast_expression "(undefined4 *)(param_2 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 1)" ( (binary_expression "param_2 + 1" identifier + number_literal) )))) )) (compound_statement "{\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" { (case_statement "case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" case number_literal : (if_statement "if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" if (parenthesized_expression "(*(int *)((long)param_2 + 0x84) == -1)" ( (binary_expression "*(int *)((long)param_2 + 0x84) == -1" (pointer_expression "*(int *)((long)param_2 + 0x84)" * (cast_expression "(int *)((long)param_2 + 0x84)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x84)" ( (binary_expression "(long)param_2 + 0x84" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (goto_statement "goto switchD_00115a91_caseD_1;" goto statement_identifier ;))) (case_statement "case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (expression_statement "FUN_00115a60(param_1,param_2[2]);" (call_expression "FUN_00115a60(param_1,param_2[2])" identifier (argument_list "(param_1,param_2[2])" ( identifier , (subscript_expression "param_2[2]" identifier [ number_literal ]) ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (expression_statement "FUN_00115a60(param_1,param_2[6]);" (call_expression "FUN_00115a60(param_1,param_2[6])" identifier (argument_list "(param_1,param_2[6])" ( identifier , (subscript_expression "param_2[6]" identifier [ number_literal ]) ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);" case number_literal : (expression_statement "FUN_00115a60(param_1,DAT_001859c0);" (call_expression "FUN_00115a60(param_1,DAT_001859c0)" identifier (argument_list "(param_1,DAT_001859c0)" ( identifier , identifier ))) ;)) (case_statement "case 1:" case number_literal :) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:" case number_literal :) (case_statement "case 10:" case number_literal :) (case_statement "case 0xb:" case number_literal :) (case_statement "case 0xc:" case number_literal :) (case_statement "case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;" case number_literal : (labeled_statement "switchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;" statement_identifier : (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (break_statement "break;" break ;)) (case_statement "default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;" default : (expression_statement "FUN_001252c0("../../ld/ldlang.c",0x3e0);" (call_expression "FUN_001252c0("../../ld/ldlang.c",0x3e0)" identifier (argument_list "("../../ld/ldlang.c",0x3e0)" ( (string_literal ""../../ld/ldlang.c"" " string_content ") , number_literal ))) ;) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" identifier = (cast_expression "(undefined8 *)*param_2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) })) (if_statement "if (param_2 == (undefined8 *)0x0) {\n      return;\n    }" if (parenthesized_expression "(param_2 == (undefined8 *)0x0)" ( (binary_expression "param_2 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) (do_statement do (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT ))) ;) (switch_statement switch (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (compound_statement { (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == LIT) )) (goto_statement goto statement_identifier ;))) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;)) (break_statement break ;)) (case_statement default : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "void FUN_00115a60(code *param_1,undefined8 *param_2)\n\n{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" (primitive_type "void") (function_declarator "FUN_00115a60(code *param_1,undefined8 *param_2)" (identifier "FUN_00115a60") (parameter_list "(code *param_1,undefined8 *param_2)" (( "(") (parameter_declaration "code *param_1" (type_identifier "code") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  if (param_2 == (undefined8 *)0x0) {\n    return;\n  }\n  do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );\n}" ({ "{") (if_statement "if (param_2 == (undefined8 *)0x0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 == (undefined8 *)0x0)" (( "(") (binary_expression "param_2 == (undefined8 *)0x0" (identifier "param_2") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (do_statement "do {\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    (*param_1)(param_2);\n    switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }\n    if (param_2 == (undefined8 *)0x0) {\n      return;\n    }\n  }" ({ "{") (expression_statement "(*param_1)(param_2);" (call_expression "(*param_1)(param_2)" (parenthesized_expression "(*param_1)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))) (; ";")) (switch_statement "switch(*(undefined4 *)(param_2 + 1)) {\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" (switch "switch") (parenthesized_expression "(*(undefined4 *)(param_2 + 1))" (( "(") (pointer_expression "*(undefined4 *)(param_2 + 1)" (* "*") (cast_expression "(undefined4 *)(param_2 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 1)" (( "(") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) () ")")))) () ")")) (compound_statement "{\n    case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;\n    case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;\n    case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);\n    case 1:\n    case 2:\n    case 3:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 10:\n    case 0xb:\n    case 0xc:\n    case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;\n    default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;\n    }" ({ "{") (case_statement "case 0:\n      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" (case "case") (number_literal "0") (: ":") (if_statement "if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;" (if "if") (parenthesized_expression "(*(int *)((long)param_2 + 0x84) == -1)" (( "(") (binary_expression "*(int *)((long)param_2 + 0x84) == -1" (pointer_expression "*(int *)((long)param_2 + 0x84)" (* "*") (cast_expression "(int *)((long)param_2 + 0x84)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x84)" (( "(") (binary_expression "(long)param_2 + 0x84" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x84")) () ")")))) (== "==") (number_literal "-1")) () ")")) (goto_statement "goto switchD_00115a91_caseD_1;" (goto "goto") (statement_identifier "switchD_00115a91_caseD_1") (; ";")))) (case_statement "case 0xd:\n      FUN_00115a60(param_1,param_2[2]);\n      param_2 = (undefined8 *)*param_2;\n      break;" (case "case") (number_literal "0xd") (: ":") (expression_statement "FUN_00115a60(param_1,param_2[2]);" (call_expression "FUN_00115a60(param_1,param_2[2])" (identifier "FUN_00115a60") (argument_list "(param_1,param_2[2])" (( "(") (identifier "param_1") (, ",") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" (identifier "param_2") (= "=") (cast_expression "(undefined8 *)*param_2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:\n      FUN_00115a60(param_1,param_2[6]);\n      param_2 = (undefined8 *)*param_2;\n      break;" (case "case") (number_literal "4") (: ":") (expression_statement "FUN_00115a60(param_1,param_2[6]);" (call_expression "FUN_00115a60(param_1,param_2[6])" (identifier "FUN_00115a60") (argument_list "(param_1,param_2[6])" (( "(") (identifier "param_1") (, ",") (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")) () ")"))) (; ";")) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" (identifier "param_2") (= "=") (cast_expression "(undefined8 *)*param_2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0xf:\n      FUN_00115a60(param_1,DAT_001859c0);" (case "case") (number_literal "0xf") (: ":") (expression_statement "FUN_00115a60(param_1,DAT_001859c0);" (call_expression "FUN_00115a60(param_1,DAT_001859c0)" (identifier "FUN_00115a60") (argument_list "(param_1,DAT_001859c0)" (( "(") (identifier "param_1") (, ",") (identifier "DAT_001859c0") () ")"))) (; ";"))) (case_statement "case 1:" (case "case") (number_literal "1") (: ":")) (case_statement "case 2:" (case "case") (number_literal "2") (: ":")) (case_statement "case 3:" (case "case") (number_literal "3") (: ":")) (case_statement "case 5:" (case "case") (number_literal "5") (: ":")) (case_statement "case 6:" (case "case") (number_literal "6") (: ":")) (case_statement "case 7:" (case "case") (number_literal "7") (: ":")) (case_statement "case 8:" (case "case") (number_literal "8") (: ":")) (case_statement "case 9:" (case "case") (number_literal "9") (: ":")) (case_statement "case 10:" (case "case") (number_literal "10") (: ":")) (case_statement "case 0xb:" (case "case") (number_literal "0xb") (: ":")) (case_statement "case 0xc:" (case "case") (number_literal "0xc") (: ":")) (case_statement "case 0xe:\nswitchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;\n      break;" (case "case") (number_literal "0xe") (: ":") (labeled_statement "switchD_00115a91_caseD_1:\n      param_2 = (undefined8 *)*param_2;" (statement_identifier "switchD_00115a91_caseD_1") (: ":") (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" (identifier "param_2") (= "=") (cast_expression "(undefined8 *)*param_2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "default:\n      FUN_001252c0("../../ld/ldlang.c",0x3e0);\n      param_2 = (undefined8 *)*param_2;" (default "default") (: ":") (expression_statement "FUN_001252c0("../../ld/ldlang.c",0x3e0);" (call_expression "FUN_001252c0("../../ld/ldlang.c",0x3e0)" (identifier "FUN_001252c0") (argument_list "("../../ld/ldlang.c",0x3e0)" (( "(") (string_literal ""../../ld/ldlang.c"" (" """) (string_content "../../ld/ldlang.c") (" """)) (, ",") (number_literal "0x3e0") () ")"))) (; ";")) (expression_statement "param_2 = (undefined8 *)*param_2;" (assignment_expression "param_2 = (undefined8 *)*param_2" (identifier "param_2") (= "=") (cast_expression "(undefined8 *)*param_2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";"))) (} "}"))) (if_statement "if (param_2 == (undefined8 *)0x0) {\n      return;\n    }" (if "if") (parenthesized_expression "(param_2 == (undefined8 *)0x0)" (( "(") (binary_expression "param_2 == (undefined8 *)0x0" (identifier "param_2") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

void function_1
               (type_1 *func,type_2 *var_1)

{
  if (var_1 == (type_2 *)0x0) {
    return;
  }
  do {
    (*func)(var_1);
    switch((var_1->header).type) {
    case lang_output_section_statement_enum:
      if ((var_1->output_section_statement).constraint == -1) goto switchD_00115a91_caseD_1;
    case lang_group_statement_enum:
      function_1(func,(var_1->output_section_statement).children.head);
      var_1 = (var_1->header).next;
      break;
    case lang_wild_statement_enum:
      function_1(func,(var_1->wild_statement).children.head);
      var_1 = (var_1->header).next;
      break;
    case lang_constructors_statement_enum:
      function_1(func,constructor_list.head);
    case lang_assignment_statement_enum:
    case lang_input_statement_enum:
    case lang_address_statement_enum:
    case lang_input_section_enum:
    case lang_object_symbols_statement_enum:
    case lang_fill_statement_enum:
    case lang_data_statement_enum:
    case lang_reloc_statement_enum:
    case lang_target_statement_enum:
    case lang_output_statement_enum:
    case lang_padding_statement_enum:
    case lang_insert_statement_enum:
switchD_00115a91_caseD_1:
      var_1 = (var_1->header).next;
      break;
    default:
      var_2("../../ld/ldlang.c",0x3e0);
      var_1 = (var_1->header).next;
    }
    if (var_1 == (type_3 *)0x0) {
      return;
    }
  } while( true );
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement))) (do_statement body: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier)))) (switch_statement condition: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) body: (compound_statement (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (break_statement)) (case_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement)))) condition: (parenthesized_expression (true))))))

void MASKED(code *param_1,undefined8 *param_2)

{
  if (param_2 == (undefined8 *)0x0) {
    return;
  }
  do {
    (*param_1)(param_2);
    switch(*(undefined4 *)(param_2 + 1)) {
    case 0:
      if (*(int *)((long)param_2 + 0x84) == -1) goto switchD_00115a91_caseD_1;
    case 0xd:
      MASKED(param_1,param_2[2]);
      param_2 = (undefined8 *)*param_2;
      break;
    case 4:
      MASKED(param_1,param_2[6]);
      param_2 = (undefined8 *)*param_2;
      break;
    case 0xf:
      MASKED(param_1,DAT_001859c0);
    case 1:
    case 2:
    case 3:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 0xb:
    case 0xc:
    case 0xe:
switchD_00115a91_caseD_1:
      param_2 = (undefined8 *)*param_2;
      break;
    default:
      FUN_001252c0("../../ld/ldlang.c",0x3e0);
      param_2 = (undefined8 *)*param_2;
    }
    if (param_2 == (undefined8 *)0x0) {
      return;
    }
  } while( true );
}

