
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Struct "Output_fill_debug_info": ignoring overlapping field "is_debug_types_" */
/* DWARF original prototype: void do_write(Output_fill_debug_info * this, Output_file * of, off_t
   off, size_t len) */

void __thiscall
gold::Output_fill_debug_info::do_write
          (Output_fill_debug_info *this,Output_file *of,off_t off,size_t len)

{
}



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

void FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)

{
  void *__s;
  int iVar1;
  uint uVar2;
  uint *puVar3;
  
  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {
    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);
  }
  if (*(code **)(*param_1 + 8) == FUN_002c4880) {
    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;
  }
  else {
    uVar2 = (**(code **)(*param_1 + 8))(param_1);
  }
  if (param_5 < uVar2) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);
  }
  if ((param_4 < 0) ||
     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),
     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),
     iVar1 = *(int *)(param_2 + 0xc) - param_4,
     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=
     (int)(iVar1 - uVar2) < 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);
  }
  uVar2 = param_5 - 4;
  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);
  if ((char)param_1[1] == '\0') {
    *puVar3 = uVar2;
    puVar3[1] = 4;
    *(undefined2 *)(puVar3 + 2) = 0;
  }
  else {
    puVar3[1] = 0x400;
    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;
    *(undefined2 *)(puVar3 + 2) = 0;
  }
  __s = (void *)((int)puVar3 + 0xb);
  *(undefined1 *)((int)puVar3 + 10) = 4;
  if ((void *)((int)puVar3 + param_5) <= __s) {
    return;
  }
  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00050b50
ADD EBX,0x324cc7
SUB ESP,0xc
MOV EBP,dword ptr [ESP + 0x24]
MOV ESI,dword ptr [ESP + 0x28]
MOV EDI,dword ptr [ESP + 0x2c]
LEA EAX,[EBX + 0x7c8]
MOV EAX,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x8]
TEST EDX,EDX
JZ 0x002c5367
TEST byte ptr [EAX + 0x14],0x10
JNZ 0x002c5418
MOV EAX,dword ptr [ESP + 0x20]
LEA EDX,[EBX + 0xffcda880]
MOV EAX,dword ptr [EAX]
MOV EAX,dword ptr [EAX + 0x8]
CMP EAX,EDX
JNZ 0x002c5458
MOV EAX,dword ptr [ESP + 0x20]
CMP byte ptr [EAX + 0x5],0x1
SBB EAX,EAX
AND EAX,0xfffffff4
ADD EAX,0x17
CMP dword ptr [ESP + 0x30],EAX
JC 0x002c547f
TEST EDI,EDI
JS 0x002c5469
MOV EAX,dword ptr [ESP + 0x30]
XOR EDX,EDX
MOV ECX,dword ptr [EBP + 0xc]
ADD EAX,ESI
ADC EDX,EDI
CMP dword ptr [EBP + 0x8],EAX
SBB ECX,EDX
JL 0x002c5469
MOV EDI,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [EBP + 0x10]
LEA EDX,[EDI + -0x4]
MOV EDI,dword ptr [ESP + 0x20]
ADD EAX,ESI
CMP byte ptr [EDI + 0x4],0x0
JNZ 0x002c5400
MOV dword ptr [EAX],EDX
XOR EDX,EDX
MOV dword ptr [EAX + 0x4],0x4
MOV word ptr [EAX + 0x8],DX
LEA EDX,[EAX + 0xb]
MOV byte ptr [EAX + 0xa],0x4
ADD EAX,dword ptr [ESP + 0x30]
MOV ESI,EAX
CMP EAX,EDX
JA 0x002c5438
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
XOR ECX,ECX
BSWAP EDX
MOV dword ptr [EAX + 0x4],0x400
MOV dword ptr [EAX],EDX
MOV word ptr [EAX + 0x8],CX
JMP 0x002c53dd
LEA EDX,[EBX + 0xffea7d3e]
PUSH dword ptr [ESP + 0x30]
PUSH ESI
PUSH EDX
PUSH dword ptr [EAX]
CALL 0x0023b750
ADD ESP,0x10
JMP 0x002c5367
SUB ESP,0x4
SUB ESI,EDX
PUSH ESI
PUSH 0x0
PUSH EDX
CALL 0x00039900
ADD ESP,0x10
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH dword ptr [ESP + 0x2c]
CALL EAX
ADD ESP,0x10
JMP 0x002c538e
LEA EAX,[EBX + 0xffea9c8c]
PUSH ESI
PUSH EAX
LEA EAX,[EBX + 0xffe6335d]
PUSH 0x6f
PUSH EAX
CALL 0x002446e0
LEA EAX,[EBX + 0xffea9948]
PUSH EDI
PUSH EAX
LEA EAX,[EBX + 0xffea7d0b]
PUSH 0x80f
PUSH EAX
CALL 0x002446e0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)\n\n{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}\n\n" comment (function_definition "void FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)\n\n{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" primitive_type (function_declarator "FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" { (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (if_statement "if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" if (parenthesized_expression "((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0))" ( (binary_expression "(DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" (parenthesized_expression "(DAT_005ea7c8[2] != 0)" ( (binary_expression "DAT_005ea7c8[2] != 0" (subscript_expression "DAT_005ea7c8[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" ( (binary_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10)" ( (binary_expression "*(byte *)(DAT_005ea7c8 + 5) & 0x10" (pointer_expression "*(byte *)(DAT_005ea7c8 + 5)" * (cast_expression "(byte *)(DAT_005ea7c8 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_005ea7c8 + 5)" ( (binary_expression "DAT_005ea7c8 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" { (expression_statement "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);" (call_expression "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" identifier (argument_list "(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" ( (pointer_expression "*DAT_005ea7c8" * identifier) , (string_literal ""fill_debug_info(%08lx, %08lx)"" " string_content ") , identifier , identifier ))) ;) })) (if_statement "if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" if (parenthesized_expression "(*(code **)(*param_1 + 8) == FUN_002c4880)" ( (binary_expression "*(code **)(*param_1 + 8) == FUN_002c4880" (pointer_expression "*(code **)(*param_1 + 8)" * (cast_expression "(code **)(*param_1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }" { (expression_statement "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;" (assignment_expression "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" identifier = (binary_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" (parenthesized_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4)" ( (binary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4" (unary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0')" - (call_expression "(uint)(*(char *)((int)param_1 + 5) == '\0')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(char *)((int)param_1 + 5) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 5) == '\0'" (pointer_expression "*(char *)((int)param_1 + 5)" * (cast_expression "(char *)((int)param_1 + 5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 5)" ( (binary_expression "(int)param_1 + 5" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )))) & number_literal) )) + number_literal)) ;) }) (else_clause "else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" else (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" { (expression_statement "uVar2 = (**(code **)(*param_1 + 8))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 8))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 8))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 8))" ( (pointer_expression "**(code **)(*param_1 + 8)" * (pointer_expression "*(code **)(*param_1 + 8)" * (cast_expression "(code **)(*param_1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) }))) (if_statement "if (param_5 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" if (parenthesized_expression "(param_5 < uVar2)" ( (binary_expression "param_5 < uVar2" identifier < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" { comment (expression_statement "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);" (call_expression "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4)" identifier (argument_list "("../../gold/output.cc",0x80f,"do_write",param_4)" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") , identifier ))) ;) })) (if_statement "if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" if (parenthesized_expression "((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0))" ( (binary_expression "(param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" (parenthesized_expression "(param_4 < 0)" ( (binary_expression "param_4 < 0" identifier < number_literal) )) || (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" ( (comma_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3)" identifier = (binary_expression "param_4 + (uint)CARRY4(param_5,param_3)" identifier + (cast_expression "(uint)CARRY4(param_5,param_3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(param_5,param_3)" identifier (argument_list "(param_5,param_3)" ( identifier , identifier )))))) , (comma_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" identifier = (call_expression "(uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_2 + 8) < param_5 + param_3)" ( (binary_expression "*(uint *)(param_2 + 8) < param_5 + param_3" (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) < (binary_expression "param_5 + param_3" identifier + identifier)) )))) , (comma_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4" identifier = (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) - identifier)) , (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2))" ( (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" identifier (argument_list "(*(int *)(param_2 + 0xc),param_4)" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar1,uVar2)" identifier (argument_list "(iVar1,uVar2)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar1 - uVar2) < 0" (cast_expression "(int)(iVar1 - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar1 - uVar2)" ( (binary_expression "iVar1 - uVar2" identifier - identifier) ))) < number_literal))))) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" { comment (expression_statement "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);" (call_expression "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3)" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view",param_3)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") , identifier ))) ;) })) (expression_statement "uVar2 = param_5 - 4;" (assignment_expression "uVar2 = param_5 - 4" identifier = (binary_expression "param_5 - 4" identifier - number_literal)) ;) (expression_statement "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);" (assignment_expression "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3)" identifier = (cast_expression "(uint *)(*(int *)(param_2 + 0x10) + param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x10) + param_3)" ( (binary_expression "*(int *)(param_2 + 0x10) + param_3" (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) + identifier) )))) ;) (if_statement "if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" { (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "puVar3[1] = 4;" (assignment_expression "puVar3[1] = 4" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" * (cast_expression "(undefined2 *)(puVar3 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" else (compound_statement "{\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" { (expression_statement "puVar3[1] = 0x400;" (assignment_expression "puVar3[1] = 0x400" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;" (assignment_expression "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (pointer_expression "*puVar3" * identifier) = (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 * 0x1000000" identifier * number_literal))) ;) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" * (cast_expression "(undefined2 *)(puVar3 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = number_literal) ;) }))) (expression_statement "__s = (void *)((int)puVar3 + 0xb);" (assignment_expression "__s = (void *)((int)puVar3 + 0xb)" identifier = (cast_expression "(void *)((int)puVar3 + 0xb)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 0xb)" ( (binary_expression "(int)puVar3 + 0xb" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "*(undefined1 *)((int)puVar3 + 10) = 4;" (assignment_expression "*(undefined1 *)((int)puVar3 + 10) = 4" (pointer_expression "*(undefined1 *)((int)puVar3 + 10)" * (cast_expression "(undefined1 *)((int)puVar3 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 10)" ( (binary_expression "(int)puVar3 + 10" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }" if (parenthesized_expression "((void *)((int)puVar3 + param_5) <= __s)" ( (binary_expression "(void *)((int)puVar3 + param_5) <= __s" (cast_expression "(void *)((int)puVar3 + param_5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + param_5)" ( (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) <= identifier) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);" (call_expression "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" identifier (argument_list "(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" ( identifier , number_literal , (binary_expression "(int)((int)puVar3 + param_5) - (int)__s" (cast_expression "(int)((int)puVar3 + param_5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((int)puVar3 + param_5)" ( (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) - (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Struct "Output_fill_debug_info": ignoring overlapping field "is_debug_types_" */\n/* DWARF original prototype: void do_write(Output_fill_debug_info * this, Output_file * of, off_t\n   off, size_t len) */\n\nvoid __thiscall\ngold::Output_fill_debug_info::do_write\n          (Output_fill_debug_info *this,Output_file *of,off_t off,size_t len)\n\n{\n}\n\n" comment comment comment (function_definition "void __thiscall\ngold::Output_fill_debug_info::do_write\n          (Output_fill_debug_info *this,Output_file *of,off_t off,size_t len)\n\n{\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_fill_debug_info::" identifier : : identifier : :) (function_declarator "do_write\n          (Output_fill_debug_info *this,Output_file *of,off_t off,size_t len)" identifier (parameter_list "(Output_fill_debug_info *this,Output_file *of,off_t off,size_t len)" ( (parameter_declaration "Output_fill_debug_info *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_file *of" type_identifier (pointer_declarator "*of" * identifier)) , (parameter_declaration "off_t off" type_identifier identifier) , (parameter_declaration "size_t len" primitive_type identifier) ))) (compound_statement "{\n}" { })))
(translation_unit "void FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)\n\n{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}\n\n" (function_definition "void FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)\n\n{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" primitive_type (function_declarator "FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" { (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (if_statement "if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" if (parenthesized_expression "((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0))" ( (binary_expression "(DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" (parenthesized_expression "(DAT_005ea7c8[2] != 0)" ( (binary_expression "DAT_005ea7c8[2] != 0" (subscript_expression "DAT_005ea7c8[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" ( (binary_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10)" ( (binary_expression "*(byte *)(DAT_005ea7c8 + 5) & 0x10" (pointer_expression "*(byte *)(DAT_005ea7c8 + 5)" * (cast_expression "(byte *)(DAT_005ea7c8 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_005ea7c8 + 5)" ( (binary_expression "DAT_005ea7c8 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" { (expression_statement "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);" (call_expression "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" identifier (argument_list "(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" ( (pointer_expression "*DAT_005ea7c8" * identifier) , (string_literal ""fill_debug_info(%08lx, %08lx)"" " string_content ") , identifier , identifier ))) ;) })) (if_statement "if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" if (parenthesized_expression "(*(code **)(*param_1 + 8) == FUN_002c4880)" ( (binary_expression "*(code **)(*param_1 + 8) == FUN_002c4880" (pointer_expression "*(code **)(*param_1 + 8)" * (cast_expression "(code **)(*param_1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }" { (expression_statement "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;" (assignment_expression "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" identifier = (binary_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" (parenthesized_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4)" ( (binary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4" (unary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0')" - (call_expression "(uint)(*(char *)((int)param_1 + 5) == '\0')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(char *)((int)param_1 + 5) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 5) == '\0'" (pointer_expression "*(char *)((int)param_1 + 5)" * (cast_expression "(char *)((int)param_1 + 5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 5)" ( (binary_expression "(int)param_1 + 5" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )))) & number_literal) )) + number_literal)) ;) }) (else_clause "else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" else (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" { (expression_statement "uVar2 = (**(code **)(*param_1 + 8))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 8))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 8))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 8))" ( (pointer_expression "**(code **)(*param_1 + 8)" * (pointer_expression "*(code **)(*param_1 + 8)" * (cast_expression "(code **)(*param_1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) }))) (if_statement "if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" if (parenthesized_expression "(param_5 < uVar2)" ( (binary_expression "param_5 < uVar2" identifier < identifier) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" { (expression_statement "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);" (call_expression "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4)" identifier (argument_list "("../../gold/output.cc",0x80f,"do_write",param_4)" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") , identifier ))) ;) })) (if_statement "if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" if (parenthesized_expression "((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0))" ( (binary_expression "(param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" (parenthesized_expression "(param_4 < 0)" ( (binary_expression "param_4 < 0" identifier < number_literal) )) || (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" ( (comma_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3)" identifier = (binary_expression "param_4 + (uint)CARRY4(param_5,param_3)" identifier + (cast_expression "(uint)CARRY4(param_5,param_3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(param_5,param_3)" identifier (argument_list "(param_5,param_3)" ( identifier , identifier )))))) , (comma_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" identifier = (call_expression "(uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_2 + 8) < param_5 + param_3)" ( (binary_expression "*(uint *)(param_2 + 8) < param_5 + param_3" (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) < (binary_expression "param_5 + param_3" identifier + identifier)) )))) , (comma_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4" identifier = (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) - identifier)) , (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2))" ( (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" identifier (argument_list "(*(int *)(param_2 + 0xc),param_4)" ( (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier ))) != (call_expression "SBORROW4(iVar1,uVar2)" identifier (argument_list "(iVar1,uVar2)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar1 - uVar2) < 0" (cast_expression "(int)(iVar1 - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar1 - uVar2)" ( (binary_expression "iVar1 - uVar2" identifier - identifier) ))) < number_literal))))) ))) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" { (expression_statement "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);" (call_expression "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3)" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view",param_3)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") , identifier ))) ;) })) (expression_statement "uVar2 = param_5 - 4;" (assignment_expression "uVar2 = param_5 - 4" identifier = (binary_expression "param_5 - 4" identifier - number_literal)) ;) (expression_statement "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);" (assignment_expression "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3)" identifier = (cast_expression "(uint *)(*(int *)(param_2 + 0x10) + param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x10) + param_3)" ( (binary_expression "*(int *)(param_2 + 0x10) + param_3" (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) + identifier) )))) ;) (if_statement "if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" { (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "puVar3[1] = 4;" (assignment_expression "puVar3[1] = 4" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" * (cast_expression "(undefined2 *)(puVar3 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" else (compound_statement "{\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" { (expression_statement "puVar3[1] = 0x400;" (assignment_expression "puVar3[1] = 0x400" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;" (assignment_expression "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (pointer_expression "*puVar3" * identifier) = (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" ( (binary_expression "uVar2 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" ( (binary_expression "uVar2 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar2 * 0x1000000" identifier * number_literal))) ;) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" * (cast_expression "(undefined2 *)(puVar3 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 2)" ( (binary_expression "puVar3 + 2" identifier + number_literal) )))) = number_literal) ;) }))) (expression_statement "__s = (void *)((int)puVar3 + 0xb);" (assignment_expression "__s = (void *)((int)puVar3 + 0xb)" identifier = (cast_expression "(void *)((int)puVar3 + 0xb)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 0xb)" ( (binary_expression "(int)puVar3 + 0xb" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "*(undefined1 *)((int)puVar3 + 10) = 4;" (assignment_expression "*(undefined1 *)((int)puVar3 + 10) = 4" (pointer_expression "*(undefined1 *)((int)puVar3 + 10)" * (cast_expression "(undefined1 *)((int)puVar3 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + 10)" ( (binary_expression "(int)puVar3 + 10" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }" if (parenthesized_expression "((void *)((int)puVar3 + param_5) <= __s)" ( (binary_expression "(void *)((int)puVar3 + param_5) <= __s" (cast_expression "(void *)((int)puVar3 + param_5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar3 + param_5)" ( (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) <= identifier) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);" (call_expression "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" identifier (argument_list "(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" ( identifier , number_literal , (binary_expression "(int)((int)puVar3 + param_5) - (int)__s" (cast_expression "(int)((int)puVar3 + param_5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((int)puVar3 + param_5)" ( (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) - (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , (string_literal " string_content ") , IDENT , 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 (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) )))) & LIT) )) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) , (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression IDENT + IDENT)) )))) , (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT)) , (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))) != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) != (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) < LIT))))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) ))) <= IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) ))) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) ;) (return_statement return ;) })))
(function_definition "void FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)\n\n{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_002c5330(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" (identifier "FUN_002c5330") (parameter_list "(int *param_1,int param_2,uint param_3,int param_4,uint param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) () ")"))) (compound_statement "{\n  void *__s;\n  int iVar1;\n  uint uVar2;\n  uint *puVar3;\n  \n  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }\n  if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }\n  if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }\n  if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }\n  uVar2 = param_5 - 4;\n  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);\n  if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  __s = (void *)((int)puVar3 + 0xb);\n  *(undefined1 *)((int)puVar3 + 10) = 4;\n  if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }\n  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);\n  return;\n}" ({ "{") (declaration "void *__s;" (primitive_type "void") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (if_statement "if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" (if "if") (parenthesized_expression "((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0))" (( "(") (binary_expression "(DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" (parenthesized_expression "(DAT_005ea7c8[2] != 0)" (( "(") (binary_expression "DAT_005ea7c8[2] != 0" (subscript_expression "DAT_005ea7c8[2]" (identifier "DAT_005ea7c8") ([ "[") (number_literal "2") (] "]")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)" (( "(") (binary_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(DAT_005ea7c8 + 5) & 0x10)" (( "(") (binary_expression "*(byte *)(DAT_005ea7c8 + 5) & 0x10" (pointer_expression "*(byte *)(DAT_005ea7c8 + 5)" (* "*") (cast_expression "(byte *)(DAT_005ea7c8 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_005ea7c8 + 5)" (( "(") (binary_expression "DAT_005ea7c8 + 5" (identifier "DAT_005ea7c8") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);\n  }" ({ "{") (expression_statement "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);" (call_expression "FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" (identifier "FUN_0023b750") (argument_list "(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5)" (( "(") (pointer_expression "*DAT_005ea7c8" (* "*") (identifier "DAT_005ea7c8")) (, ",") (string_literal ""fill_debug_info(%08lx, %08lx)"" (" """) (string_content "fill_debug_info(%08lx, %08lx)") (" """)) (, ",") (identifier "param_3") (, ",") (identifier "param_5") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(code **)(*param_1 + 8) == FUN_002c4880) {\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }\n  else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" (if "if") (parenthesized_expression "(*(code **)(*param_1 + 8) == FUN_002c4880)" (( "(") (binary_expression "*(code **)(*param_1 + 8) == FUN_002c4880" (pointer_expression "*(code **)(*param_1 + 8)" (* "*") (cast_expression "(code **)(*param_1 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 8)" (( "(") (binary_expression "*param_1 + 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "8")) () ")")))) (== "==") (identifier "FUN_002c4880")) () ")")) (compound_statement "{\n    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;\n  }" ({ "{") (expression_statement "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;" (assignment_expression "uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" (identifier "uVar2") (= "=") (binary_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17" (parenthesized_expression "(-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4)" (( "(") (binary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4" (unary_expression "-(uint)(*(char *)((int)param_1 + 5) == '\0')" (- "-") (call_expression "(uint)(*(char *)((int)param_1 + 5) == '\0')" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(char *)((int)param_1 + 5) == '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 5) == '\0'" (pointer_expression "*(char *)((int)param_1 + 5)" (* "*") (cast_expression "(char *)((int)param_1 + 5)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 5)" (( "(") (binary_expression "(int)param_1 + 5" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "5")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")))) (& "&") (number_literal "0xfffffff4")) () ")")) (+ "+") (number_literal "0x17"))) (; ";")) (} "}")) (else_clause "else {\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" (else "else") (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 8))(param_1);\n  }" ({ "{") (expression_statement "uVar2 = (**(code **)(*param_1 + 8))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 8))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 8))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 8))" (( "(") (pointer_expression "**(code **)(*param_1 + 8)" (* "*") (pointer_expression "*(code **)(*param_1 + 8)" (* "*") (cast_expression "(code **)(*param_1 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 8)" (( "(") (binary_expression "*param_1 + 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (} "}")))) (if_statement "if (param_5 < uVar2) {\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" (if "if") (parenthesized_expression "(param_5 < uVar2)" (( "(") (binary_expression "param_5 < uVar2" (identifier "param_5") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);" (call_expression "FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4)" (identifier "FUN_002446e0") (argument_list "("../../gold/output.cc",0x80f,"do_write",param_4)" (( "(") (string_literal ""../../gold/output.cc"" (" """) (string_content "../../gold/output.cc") (" """)) (, ",") (number_literal "0x80f") (, ",") (string_literal ""do_write"" (" """) (string_content "do_write") (" """)) (, ",") (identifier "param_4") () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)) {\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" (if "if") (parenthesized_expression "((param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0))" (( "(") (binary_expression "(param_4 < 0) ||\n     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" (parenthesized_expression "(param_4 < 0)" (( "(") (binary_expression "param_4 < 0" (identifier "param_4") (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0)" (( "(") (comma_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3),\n     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "param_4 = param_4 + (uint)CARRY4(param_5,param_3)" (identifier "param_4") (= "=") (binary_expression "param_4 + (uint)CARRY4(param_5,param_3)" (identifier "param_4") (+ "+") (cast_expression "(uint)CARRY4(param_5,param_3)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(param_5,param_3)" (identifier "CARRY4") (argument_list "(param_5,param_3)" (( "(") (identifier "param_5") (, ",") (identifier "param_3") () ")")))))) (, ",") (comma_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),\n     iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" (identifier "uVar2") (= "=") (call_expression "(uint)(*(uint *)(param_2 + 8) < param_5 + param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_2 + 8) < param_5 + param_3)" (( "(") (binary_expression "*(uint *)(param_2 + 8) < param_5 + param_3" (pointer_expression "*(uint *)(param_2 + 8)" (* "*") (cast_expression "(uint *)(param_2 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (< "<") (binary_expression "param_5 + param_3" (identifier "param_5") (+ "+") (identifier "param_3"))) () ")")))) (, ",") (comma_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4,\n     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc) - param_4" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_2 + 0xc) - param_4" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (- "-") (identifier "param_4"))) (, ",") (binary_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=\n     (int)(iVar1 - uVar2) < 0" (parenthesized_expression "(SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2))" (( "(") (binary_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)" (call_expression "SBORROW4(*(int *)(param_2 + 0xc),param_4)" (identifier "SBORROW4") (argument_list "(*(int *)(param_2 + 0xc),param_4)" (( "(") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_4") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar1,uVar2)" (identifier "SBORROW4") (argument_list "(iVar1,uVar2)" (( "(") (identifier "iVar1") (, ",") (identifier "uVar2") () ")")))) () ")")) (!= "!=") (binary_expression "(int)(iVar1 - uVar2) < 0" (cast_expression "(int)(iVar1 - uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(iVar1 - uVar2)" (( "(") (binary_expression "iVar1 - uVar2" (identifier "iVar1") (- "-") (identifier "uVar2")) () ")"))) (< "<") (number_literal "0")))))) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);" (call_expression "FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3)" (identifier "FUN_002446e0") (argument_list "("../../gold/output.h",0x6f,"get_output_view",param_3)" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0x6f") (, ",") (string_literal ""get_output_view"" (" """) (string_content "get_output_view") (" """)) (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = param_5 - 4;" (assignment_expression "uVar2 = param_5 - 4" (identifier "uVar2") (= "=") (binary_expression "param_5 - 4" (identifier "param_5") (- "-") (number_literal "4"))) (; ";")) (expression_statement "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);" (assignment_expression "puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3)" (identifier "puVar3") (= "=") (cast_expression "(uint *)(*(int *)(param_2 + 0x10) + param_3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x10) + param_3)" (( "(") (binary_expression "*(int *)(param_2 + 0x10) + param_3" (pointer_expression "*(int *)(param_2 + 0x10)" (* "*") (cast_expression "(int *)(param_2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (identifier "param_3")) () ")")))) (; ";")) (if_statement "if ((char)param_1[1] == '\0') {\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }\n  else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" (if "if") (parenthesized_expression "((char)param_1[1] == '\0')" (( "(") (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    *puVar3 = uVar2;\n    puVar3[1] = 4;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" ({ "{") (expression_statement "*puVar3 = uVar2;" (assignment_expression "*puVar3 = uVar2" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "puVar3[1] = 4;" (assignment_expression "puVar3[1] = 4" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "4")) (; ";")) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" (* "*") (cast_expression "(undefined2 *)(puVar3 + 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 2)" (( "(") (binary_expression "puVar3 + 2" (identifier "puVar3") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" (else "else") (compound_statement "{\n    puVar3[1] = 0x400;\n    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;\n    *(undefined2 *)(puVar3 + 2) = 0;\n  }" ({ "{") (expression_statement "puVar3[1] = 0x400;" (assignment_expression "puVar3[1] = 0x400" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0x400")) (; ";")) (expression_statement "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;" (assignment_expression "*puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8" (binary_expression "uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8" (binary_expression "uVar2 >> 0x18" (identifier "uVar2") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar2 & 0xff0000) >> 8" (parenthesized_expression "(uVar2 & 0xff0000)" (( "(") (binary_expression "uVar2 & 0xff0000" (identifier "uVar2") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar2 & 0xff00) << 8" (parenthesized_expression "(uVar2 & 0xff00)" (( "(") (binary_expression "uVar2 & 0xff00" (identifier "uVar2") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar2 * 0x1000000" (identifier "uVar2") (* "*") (number_literal "0x1000000")))) (; ";")) (expression_statement "*(undefined2 *)(puVar3 + 2) = 0;" (assignment_expression "*(undefined2 *)(puVar3 + 2) = 0" (pointer_expression "*(undefined2 *)(puVar3 + 2)" (* "*") (cast_expression "(undefined2 *)(puVar3 + 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 2)" (( "(") (binary_expression "puVar3 + 2" (identifier "puVar3") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")))) (expression_statement "__s = (void *)((int)puVar3 + 0xb);" (assignment_expression "__s = (void *)((int)puVar3 + 0xb)" (identifier "__s") (= "=") (cast_expression "(void *)((int)puVar3 + 0xb)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + 0xb)" (( "(") (binary_expression "(int)puVar3 + 0xb" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (number_literal "0xb")) () ")")))) (; ";")) (expression_statement "*(undefined1 *)((int)puVar3 + 10) = 4;" (assignment_expression "*(undefined1 *)((int)puVar3 + 10) = 4" (pointer_expression "*(undefined1 *)((int)puVar3 + 10)" (* "*") (cast_expression "(undefined1 *)((int)puVar3 + 10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + 10)" (( "(") (binary_expression "(int)puVar3 + 10" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "4")) (; ";")) (if_statement "if ((void *)((int)puVar3 + param_5) <= __s) {\n    return;\n  }" (if "if") (parenthesized_expression "((void *)((int)puVar3 + param_5) <= __s)" (( "(") (binary_expression "(void *)((int)puVar3 + param_5) <= __s" (cast_expression "(void *)((int)puVar3 + param_5)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar3 + param_5)" (( "(") (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (identifier "param_5")) () ")"))) (<= "<=") (identifier "__s")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);" (call_expression "memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" (identifier "memset") (argument_list "(__s,0,(int)((int)puVar3 + param_5) - (int)__s)" (( "(") (identifier "__s") (, ",") (number_literal "0") (, ",") (binary_expression "(int)((int)puVar3 + param_5) - (int)__s" (cast_expression "(int)((int)puVar3 + param_5)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((int)puVar3 + param_5)" (( "(") (binary_expression "(int)puVar3 + param_5" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (identifier "param_5")) () ")"))) (- "-") (cast_expression "(int)__s" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__s"))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Struct "Output_fill_debug_info": ignoring overlapping field "is_debug_types_" */
/* DWARF original prototype: void do_write(Output_fill_debug_info * this, Output_file * of, off_t
   off, size_t len) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *of,type_3 off,size_t len)

{
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (string_literal (string_content)) (identifier) (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (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: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))))) right: (number_literal))) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content)) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) right: (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier)))))) right: (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier))) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) right: (number_literal))))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content)) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))) right: (identifier))) consequence: (compound_statement (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) (return_statement))))

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

void MASKED(int *param_1,int param_2,uint param_3,int param_4,uint param_5)

{
  void *__s;
  int iVar1;
  uint uVar2;
  uint *puVar3;
  
  if ((DAT_005ea7c8[2] != 0) && ((*(byte *)(DAT_005ea7c8 + 5) & 0x10) != 0)) {
    FUN_0023b750(*DAT_005ea7c8,"fill_debug_info(%08lx, %08lx)",param_3,param_5);
  }
  if (*(code **)(*param_1 + 8) == FUN_002c4880) {
    uVar2 = (-(uint)(*(char *)((int)param_1 + 5) == '\0') & 0xfffffff4) + 0x17;
  }
  else {
    uVar2 = (**(code **)(*param_1 + 8))(param_1);
  }
  if (param_5 < uVar2) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/output.cc",0x80f,"do_write",param_4);
  }
  if ((param_4 < 0) ||
     (param_4 = param_4 + (uint)CARRY4(param_5,param_3),
     uVar2 = (uint)(*(uint *)(param_2 + 8) < param_5 + param_3),
     iVar1 = *(int *)(param_2 + 0xc) - param_4,
     (SBORROW4(*(int *)(param_2 + 0xc),param_4) != SBORROW4(iVar1,uVar2)) !=
     (int)(iVar1 - uVar2) < 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/output.h",0x6f,"get_output_view",param_3);
  }
  uVar2 = param_5 - 4;
  puVar3 = (uint *)(*(int *)(param_2 + 0x10) + param_3);
  if ((char)param_1[1] == '\0') {
    *puVar3 = uVar2;
    puVar3[1] = 4;
    *(undefined2 *)(puVar3 + 2) = 0;
  }
  else {
    puVar3[1] = 0x400;
    *puVar3 = uVar2 >> 0x18 | (uVar2 & 0xff0000) >> 8 | (uVar2 & 0xff00) << 8 | uVar2 * 0x1000000;
    *(undefined2 *)(puVar3 + 2) = 0;
  }
  __s = (void *)((int)puVar3 + 0xb);
  *(undefined1 *)((int)puVar3 + 10) = 4;
  if ((void *)((int)puVar3 + param_5) <= __s) {
    return;
  }
  memset(__s,0,(int)((int)puVar3 + param_5) - (int)__s);
  return;
}

