
/* DWARF original prototype: void add_assertion(Script_sections * this, Expression * check, char *
   message, size_t messagelen) */

void __thiscall
gold::Script_sections::add_assertion
          (Script_sections *this,Expression *check,char *message,size_t messagelen)

{
  _List_node_base *p_Var1;
  _List_node_base *p_Var2;
  _List_node_base *this_00;
  int unaff_EDI;
  
  __x86_get_pc_thunk_di();
  if (this->output_section_ != (Output_section_definition *)0x0) {
    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);
    return;
  }
  p_Var2 = (_List_node_base *)operator_new(0x20);
  p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f);
  p_Var2[1]._M_next = p_Var2 + 2;
  p_Var2->_M_prev = (_List_node_base *)check;
                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */
  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::
  _M_construct<char_const*>
            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),
             message,message + messagelen,0);
  p_Var1 = (_List_node_base *)this->sections_elements_;
  this_00 = (_List_node_base *)operator_new(0xc);
  this_00[1]._M_next = p_Var2;
  std::__detail::_List_node_base::_M_hook(this_00,p_Var1);
  p_Var1 = p_Var1 + 1;
  p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1);
  return;
}



void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  int unaff_EDI;
  
  FUN_0004fb7e();
  if (*(int *)(param_1 + 8) != 0) {
    FUN_00109aa0();
    return;
  }
  piVar2 = (int *)FUN_0017ebf0(0x20);
  *piVar2 = unaff_EDI + 0x1ef65f;
  piVar2[2] = (int)(piVar2 + 4);
  piVar2[1] = param_2;
                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */
  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);
  iVar1 = *(int *)(param_1 + 4);
  iVar3 = FUN_0017ebf0(0xc);
  *(int **)(iVar3 + 8) = piVar2;
  FUN_00183960(iVar3,iVar1);
  piVar2 = (int *)(iVar1 + 8);
  *piVar2 = *piVar2 + 1;
  return;
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
CALL 0x0004fb7e
ADD EDI,0x1f84b7
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EAX,dword ptr [EBP + 0x14]
MOV ESI,dword ptr [EBP + 0x8]
MOV ECX,dword ptr [EBP + 0xc]
MOV EDX,dword ptr [EBP + 0x10]
MOV dword ptr [EBP + -0x1c],EAX
MOV EAX,dword ptr [ESI + 0x8]
TEST EAX,EAX
JZ 0x00109b80
MOV dword ptr [EBP + 0x8],EAX
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00109aa0
SUB ESP,0xc
MOV EBX,EDI
MOV dword ptr [EBP + -0x24],EDX
PUSH 0x20
MOV dword ptr [EBP + -0x20],ECX
CALL 0x0017ebf0
MOV ECX,dword ptr [EBP + -0x20]
MOV EDX,dword ptr [EBP + -0x24]
ADD ESP,0x10
MOV EBX,EAX
LEA EAX,[EDI + 0xffff71a8]
MOV dword ptr [EBX],EAX
LEA EAX,[EBX + 0x10]
MOV dword ptr [EBX + 0x8],EAX
MOV EAX,dword ptr [EBP + -0x1c]
MOV dword ptr [EBX + 0x4],ECX
LEA ECX,[EBX + 0x8]
ADD EAX,EDX
PUSH 0x0
PUSH EAX
PUSH EDX
PUSH ECX
MOV dword ptr [EBP + -0x20],EBX
CALL 0x0004cf80
MOV EBX,EDI
MOV ESI,dword ptr [ESI + 0x4]
MOV dword ptr [ESP],0xc
CALL 0x0017ebf0
MOV EBX,dword ptr [EBP + -0x20]
MOV dword ptr [EAX + 0x8],EBX
POP EDX
MOV EBX,EDI
POP ECX
PUSH ESI
PUSH EAX
CALL 0x00183960
ADD dword ptr [ESI + 0x8],0x1
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}\n\n" (function_definition "void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" primitive_type (function_declarator "FUN_00109b40(int param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 8) != 0)" ( (binary_expression "*(int *)(param_1 + 8) != 0" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00109aa0();\n    return;\n  }" { (expression_statement "FUN_00109aa0();" (call_expression "FUN_00109aa0()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "piVar2 = (int *)FUN_0017ebf0(0x20);" (assignment_expression "piVar2 = (int *)FUN_0017ebf0(0x20)" identifier = (cast_expression "(int *)FUN_0017ebf0(0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017ebf0(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "*piVar2 = unaff_EDI + 0x1ef65f;" (assignment_expression "*piVar2 = unaff_EDI + 0x1ef65f" (pointer_expression "*piVar2" * identifier) = (binary_expression "unaff_EDI + 0x1ef65f" identifier + number_literal)) ;) (expression_statement "piVar2[2] = (int)(piVar2 + 4);" (assignment_expression "piVar2[2] = (int)(piVar2 + 4)" (subscript_expression "piVar2[2]" identifier [ number_literal ]) = (cast_expression "(int)(piVar2 + 4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(piVar2 + 4)" ( (binary_expression "piVar2 + 4" identifier + number_literal) )))) ;) (expression_statement "piVar2[1] = param_2;" (assignment_expression "piVar2[1] = param_2" (subscript_expression "piVar2[1]" identifier [ number_literal ]) = identifier) ;) comment (expression_statement "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);" (call_expression "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0)" identifier (argument_list "(piVar2 + 2,param_3,param_4 + param_3,0)" ( (binary_expression "piVar2 + 2" identifier + number_literal) , identifier , (binary_expression "param_4 + param_3" identifier + identifier) , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 4);" (assignment_expression "iVar1 = *(int *)(param_1 + 4)" identifier = (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = FUN_0017ebf0(0xc);" (assignment_expression "iVar3 = FUN_0017ebf0(0xc)" identifier = (call_expression "FUN_0017ebf0(0xc)" identifier (argument_list "(0xc)" ( number_literal )))) ;) (expression_statement "*(int **)(iVar3 + 8) = piVar2;" (assignment_expression "*(int **)(iVar3 + 8) = piVar2" (pointer_expression "*(int **)(iVar3 + 8)" * (cast_expression "(int **)(iVar3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_00183960(iVar3,iVar1);" (call_expression "FUN_00183960(iVar3,iVar1)" identifier (argument_list "(iVar3,iVar1)" ( identifier , identifier ))) ;) (expression_statement "piVar2 = (int *)(iVar1 + 8);" (assignment_expression "piVar2 = (int *)(iVar1 + 8)" identifier = (cast_expression "(int *)(iVar1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))) ;) (expression_statement "*piVar2 = *piVar2 + 1;" (assignment_expression "*piVar2 = *piVar2 + 1" (pointer_expression "*piVar2" * identifier) = (binary_expression "*piVar2 + 1" (pointer_expression "*piVar2" * identifier) + number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void add_assertion(Script_sections * this, Expression * check, char *\n   message, size_t messagelen) */\n\nvoid __thiscall\ngold::Script_sections::add_assertion\n          (Script_sections *this,Expression *check,char *message,size_t messagelen)\n\n{\n  _List_node_base *p_Var1;\n  _List_node_base *p_Var2;\n  _List_node_base *this_00;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (this->output_section_ != (Output_section_definition *)0x0) {\n    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);\n    return;\n  }\n  p_Var2 = (_List_node_base *)operator_new(0x20);\n  p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f);\n  p_Var2[1]._M_next = p_Var2 + 2;\n  p_Var2->_M_prev = (_List_node_base *)check;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0);\n  p_Var1 = (_List_node_base *)this->sections_elements_;\n  this_00 = (_List_node_base *)operator_new(0xc);\n  this_00[1]._M_next = p_Var2;\n  std::__detail::_List_node_base::_M_hook(this_00,p_Var1);\n  p_Var1 = p_Var1 + 1;\n  p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1);\n  return;\n}\n\n" comment (function_definition "void __thiscall\ngold::Script_sections::add_assertion\n          (Script_sections *this,Expression *check,char *message,size_t messagelen)\n\n{\n  _List_node_base *p_Var1;\n  _List_node_base *p_Var2;\n  _List_node_base *this_00;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (this->output_section_ != (Output_section_definition *)0x0) {\n    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);\n    return;\n  }\n  p_Var2 = (_List_node_base *)operator_new(0x20);\n  p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f);\n  p_Var2[1]._M_next = p_Var2 + 2;\n  p_Var2->_M_prev = (_List_node_base *)check;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0);\n  p_Var1 = (_List_node_base *)this->sections_elements_;\n  this_00 = (_List_node_base *)operator_new(0xc);\n  this_00[1]._M_next = p_Var2;\n  std::__detail::_List_node_base::_M_hook(this_00,p_Var1);\n  p_Var1 = p_Var1 + 1;\n  p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Script_sections::" identifier : : identifier : :) (function_declarator "add_assertion\n          (Script_sections *this,Expression *check,char *message,size_t messagelen)" identifier (parameter_list "(Script_sections *this,Expression *check,char *message,size_t messagelen)" ( (parameter_declaration "Script_sections *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Expression *check" type_identifier (pointer_declarator "*check" * identifier)) , (parameter_declaration "char *message" primitive_type (pointer_declarator "*message" * identifier)) , (parameter_declaration "size_t messagelen" primitive_type identifier) ))) (compound_statement "{\n  _List_node_base *p_Var1;\n  _List_node_base *p_Var2;\n  _List_node_base *this_00;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (this->output_section_ != (Output_section_definition *)0x0) {\n    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);\n    return;\n  }\n  p_Var2 = (_List_node_base *)operator_new(0x20);\n  p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f);\n  p_Var2[1]._M_next = p_Var2 + 2;\n  p_Var2->_M_prev = (_List_node_base *)check;\n                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */\n  std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0);\n  p_Var1 = (_List_node_base *)this->sections_elements_;\n  this_00 = (_List_node_base *)operator_new(0xc);\n  this_00[1]._M_next = p_Var2;\n  std::__detail::_List_node_base::_M_hook(this_00,p_Var1);\n  p_Var1 = p_Var1 + 1;\n  p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1);\n  return;\n}" { (declaration "_List_node_base *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "_List_node_base *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "_List_node_base *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (if_statement "if (this->output_section_ != (Output_section_definition *)0x0) {\n    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);\n    return;\n  }" if (parenthesized_expression "(this->output_section_ != (Output_section_definition *)0x0)" ( (binary_expression "this->output_section_ != (Output_section_definition *)0x0" (field_expression "this->output_section_" identifier -> field_identifier) != (cast_expression "(Output_section_definition *)0x0" ( (type_descriptor "Output_section_definition *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);\n    return;\n  }" { (labeled_statement "Output_section_definition::add_assertion(this->output_section_,check,message,messagelen);" statement_identifier : (ERROR ":" :) (expression_statement "add_assertion(this->output_section_,check,message,messagelen);" (call_expression "add_assertion(this->output_section_,check,message,messagelen)" identifier (argument_list "(this->output_section_,check,message,messagelen)" ( (field_expression "this->output_section_" identifier -> field_identifier) , identifier , identifier , identifier ))) ;)) (return_statement "return;" return ;) })) (expression_statement "p_Var2 = (_List_node_base *)operator_new(0x20);" (assignment_expression "p_Var2 = (_List_node_base *)operator_new(0x20)" identifier = (cast_expression "(_List_node_base *)operator_new(0x20)" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f);" (assignment_expression "p_Var2->_M_next = (_List_node_base *)(unaff_EDI + 0x1ef65f)" (field_expression "p_Var2->_M_next" identifier -> field_identifier) = (cast_expression "(_List_node_base *)(unaff_EDI + 0x1ef65f)" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x1ef65f)" ( (binary_expression "unaff_EDI + 0x1ef65f" identifier + number_literal) )))) ;) (expression_statement "p_Var2[1]._M_next = p_Var2 + 2;" (assignment_expression "p_Var2[1]._M_next = p_Var2 + 2" (field_expression "p_Var2[1]._M_next" (subscript_expression "p_Var2[1]" identifier [ number_literal ]) . field_identifier) = (binary_expression "p_Var2 + 2" identifier + number_literal)) ;) (expression_statement "p_Var2->_M_prev = (_List_node_base *)check;" (assignment_expression "p_Var2->_M_prev = (_List_node_base *)check" (field_expression "p_Var2->_M_prev" identifier -> field_identifier) = (cast_expression "(_List_node_base *)check" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) comment (labeled_statement "std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0);" statement_identifier (ERROR "::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>:" : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > :) : (expression_statement "_M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0);" (binary_expression "_M_construct<char_const*>\n            ((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0)" (binary_expression "_M_construct<char_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "((basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0)" ( (comma_expression "(basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1),\n             message,message + messagelen,0" (call_expression "(basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)(p_Var2 + 1)" (parenthesized_expression "(basic_string<char,_std::char_traits<char>,_std::allocator<char>_> *)" ( (ERROR "basic_string<char,_std::char_traits<char>,_std::" (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_> *" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (pointer_expression "*" * identifier)) )) (argument_list "(p_Var2 + 1)" ( (binary_expression "p_Var2 + 1" identifier + number_literal) ))) , (comma_expression "message,message + messagelen,0" identifier , (comma_expression "message + messagelen,0" (binary_expression "message + messagelen" identifier + identifier) , number_literal))) ))) ;)) (expression_statement "p_Var1 = (_List_node_base *)this->sections_elements_;" (assignment_expression "p_Var1 = (_List_node_base *)this->sections_elements_" identifier = (cast_expression "(_List_node_base *)this->sections_elements_" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->sections_elements_" identifier -> field_identifier))) ;) (expression_statement "this_00 = (_List_node_base *)operator_new(0xc);" (assignment_expression "this_00 = (_List_node_base *)operator_new(0xc)" identifier = (cast_expression "(_List_node_base *)operator_new(0xc)" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0xc)" identifier (argument_list "(0xc)" ( number_literal ))))) ;) (expression_statement "this_00[1]._M_next = p_Var2;" (assignment_expression "this_00[1]._M_next = p_Var2" (field_expression "this_00[1]._M_next" (subscript_expression "this_00[1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (labeled_statement "std::__detail::_List_node_base::_M_hook(this_00,p_Var1);" statement_identifier : (ERROR ":" :) (labeled_statement "__detail::_List_node_base::_M_hook(this_00,p_Var1);" statement_identifier : (ERROR ":" :) (labeled_statement "_List_node_base::_M_hook(this_00,p_Var1);" statement_identifier : (ERROR ":" :) (expression_statement "_M_hook(this_00,p_Var1);" (call_expression "_M_hook(this_00,p_Var1)" identifier (argument_list "(this_00,p_Var1)" ( identifier , identifier ))) ;)))) (expression_statement "p_Var1 = p_Var1 + 1;" (assignment_expression "p_Var1 = p_Var1 + 1" identifier = (binary_expression "p_Var1 + 1" identifier + number_literal)) ;) (expression_statement "p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1);" (assignment_expression "p_Var1->_M_next = (_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1)" (field_expression "p_Var1->_M_next" identifier -> field_identifier) = (cast_expression "(_List_node_base *)((int)&p_Var1->_M_next->_M_next + 1)" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&p_Var1->_M_next->_M_next + 1)" ( (binary_expression "(int)&p_Var1->_M_next->_M_next + 1" (cast_expression "(int)&p_Var1->_M_next->_M_next" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&p_Var1->_M_next->_M_next" & (field_expression "p_Var1->_M_next->_M_next" (field_expression "p_Var1->_M_next" identifier -> field_identifier) -> field_identifier))) + number_literal) )))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    \n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}\n\n" (function_definition "void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    \n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" primitive_type (function_declarator "FUN_00109b40(int param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    \n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 8) != 0)" ( (binary_expression "*(int *)(param_1 + 8) != 0" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00109aa0();\n    return;\n  }" { (expression_statement "FUN_00109aa0();" (call_expression "FUN_00109aa0()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (expression_statement "piVar2 = (int *)FUN_0017ebf0(0x20);" (assignment_expression "piVar2 = (int *)FUN_0017ebf0(0x20)" identifier = (cast_expression "(int *)FUN_0017ebf0(0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017ebf0(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "*piVar2 = unaff_EDI + 0x1ef65f;" (assignment_expression "*piVar2 = unaff_EDI + 0x1ef65f" (pointer_expression "*piVar2" * identifier) = (binary_expression "unaff_EDI + 0x1ef65f" identifier + number_literal)) ;) (expression_statement "piVar2[2] = (int)(piVar2 + 4);" (assignment_expression "piVar2[2] = (int)(piVar2 + 4)" (subscript_expression "piVar2[2]" identifier [ number_literal ]) = (cast_expression "(int)(piVar2 + 4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(piVar2 + 4)" ( (binary_expression "piVar2 + 4" identifier + number_literal) )))) ;) (expression_statement "piVar2[1] = param_2;" (assignment_expression "piVar2[1] = param_2" (subscript_expression "piVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);" (call_expression "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0)" identifier (argument_list "(piVar2 + 2,param_3,param_4 + param_3,0)" ( (binary_expression "piVar2 + 2" identifier + number_literal) , identifier , (binary_expression "param_4 + param_3" identifier + identifier) , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 4);" (assignment_expression "iVar1 = *(int *)(param_1 + 4)" identifier = (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = FUN_0017ebf0(0xc);" (assignment_expression "iVar3 = FUN_0017ebf0(0xc)" identifier = (call_expression "FUN_0017ebf0(0xc)" identifier (argument_list "(0xc)" ( number_literal )))) ;) (expression_statement "*(int **)(iVar3 + 8) = piVar2;" (assignment_expression "*(int **)(iVar3 + 8) = piVar2" (pointer_expression "*(int **)(iVar3 + 8)" * (cast_expression "(int **)(iVar3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_00183960(iVar3,iVar1);" (call_expression "FUN_00183960(iVar3,iVar1)" identifier (argument_list "(iVar3,iVar1)" ( identifier , identifier ))) ;) (expression_statement "piVar2 = (int *)(iVar1 + 8);" (assignment_expression "piVar2 = (int *)(iVar1 + 8)" identifier = (cast_expression "(int *)(iVar1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))) ;) (expression_statement "*piVar2 = *piVar2 + 1;" (assignment_expression "*piVar2 = *piVar2 + 1" (pointer_expression "*piVar2" * identifier) = (binary_expression "*piVar2 + 1" (pointer_expression "*piVar2" * identifier) + number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , (binary_expression IDENT + IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (return_statement return ;) })))
(function_definition "void FUN_00109b40(int param_1,int param_2,int param_3,int param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    \n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00109b40(int param_1,int param_2,int param_3,int param_4)" (identifier "FUN_00109b40") (parameter_list "(int param_1,int param_2,int param_3,int param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  int unaff_EDI;\n  \n  FUN_0004fb7e();\n  if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }\n  piVar2 = (int *)FUN_0017ebf0(0x20);\n  *piVar2 = unaff_EDI + 0x1ef65f;\n  piVar2[2] = (int)(piVar2 + 4);\n  piVar2[1] = param_2;\n                    \n  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);\n  iVar1 = *(int *)(param_1 + 4);\n  iVar3 = FUN_0017ebf0(0xc);\n  *(int **)(iVar3 + 8) = piVar2;\n  FUN_00183960(iVar3,iVar1);\n  piVar2 = (int *)(iVar1 + 8);\n  *piVar2 = *piVar2 + 1;\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (expression_statement "FUN_0004fb7e();" (call_expression "FUN_0004fb7e()" (identifier "FUN_0004fb7e") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (*(int *)(param_1 + 8) != 0) {\n    FUN_00109aa0();\n    return;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 8) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 8) != 0" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00109aa0();\n    return;\n  }" ({ "{") (expression_statement "FUN_00109aa0();" (call_expression "FUN_00109aa0()" (identifier "FUN_00109aa0") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "piVar2 = (int *)FUN_0017ebf0(0x20);" (assignment_expression "piVar2 = (int *)FUN_0017ebf0(0x20)" (identifier "piVar2") (= "=") (cast_expression "(int *)FUN_0017ebf0(0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0017ebf0(0x20)" (identifier "FUN_0017ebf0") (argument_list "(0x20)" (( "(") (number_literal "0x20") () ")"))))) (; ";")) (expression_statement "*piVar2 = unaff_EDI + 0x1ef65f;" (assignment_expression "*piVar2 = unaff_EDI + 0x1ef65f" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (= "=") (binary_expression "unaff_EDI + 0x1ef65f" (identifier "unaff_EDI") (+ "+") (number_literal "0x1ef65f"))) (; ";")) (expression_statement "piVar2[2] = (int)(piVar2 + 4);" (assignment_expression "piVar2[2] = (int)(piVar2 + 4)" (subscript_expression "piVar2[2]" (identifier "piVar2") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(piVar2 + 4)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(piVar2 + 4)" (( "(") (binary_expression "piVar2 + 4" (identifier "piVar2") (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "piVar2[1] = param_2;" (assignment_expression "piVar2[1] = param_2" (subscript_expression "piVar2[1]" (identifier "piVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);" (call_expression "FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0)" (identifier "FUN_0004cf80") (argument_list "(piVar2 + 2,param_3,param_4 + param_3,0)" (( "(") (binary_expression "piVar2 + 2" (identifier "piVar2") (+ "+") (number_literal "2")) (, ",") (identifier "param_3") (, ",") (binary_expression "param_4 + param_3" (identifier "param_4") (+ "+") (identifier "param_3")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 4);" (assignment_expression "iVar1 = *(int *)(param_1 + 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 4)" (* "*") (cast_expression "(int *)(param_1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar3 = FUN_0017ebf0(0xc);" (assignment_expression "iVar3 = FUN_0017ebf0(0xc)" (identifier "iVar3") (= "=") (call_expression "FUN_0017ebf0(0xc)" (identifier "FUN_0017ebf0") (argument_list "(0xc)" (( "(") (number_literal "0xc") () ")")))) (; ";")) (expression_statement "*(int **)(iVar3 + 8) = piVar2;" (assignment_expression "*(int **)(iVar3 + 8) = piVar2" (pointer_expression "*(int **)(iVar3 + 8)" (* "*") (cast_expression "(int **)(iVar3 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 8)" (( "(") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "piVar2")) (; ";")) (expression_statement "FUN_00183960(iVar3,iVar1);" (call_expression "FUN_00183960(iVar3,iVar1)" (identifier "FUN_00183960") (argument_list "(iVar3,iVar1)" (( "(") (identifier "iVar3") (, ",") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "piVar2 = (int *)(iVar1 + 8);" (assignment_expression "piVar2 = (int *)(iVar1 + 8)" (identifier "piVar2") (= "=") (cast_expression "(int *)(iVar1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 8)" (( "(") (binary_expression "iVar1 + 8" (identifier "iVar1") (+ "+") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*piVar2 = *piVar2 + 1;" (assignment_expression "*piVar2 = *piVar2 + 1" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (= "=") (binary_expression "*piVar2 + 1" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (+ "+") (number_literal "1"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void add_assertion(Script_sections * this, Expression * check, char *
   message, size_t messagelen) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *check,char *var_10,size_t var_11)

{
  type_3 *var_13;
  type_3 *var_4;
  type_3 *this_00;
  int var_3;
  
  var_1();
  if (this->output_section_ != (type_4 *)0x0) {
    Output_section_definition::function_1(this->output_section_,check,var_10,var_11);
    return;
  }
  var_4 = (type_3 *)var_2(0x20);
  var_4->_M_next = (type_3 *)(var_3 + 0x1ef65f);
  var_4[1]._M_next = var_4 + 2;
  var_4->_M_prev = (type_3 *)check;
                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */
  std::__cxx11::basic_string<var_8,_std::char_traits<var_8>,_std::var_7<var_8>var_9>::
  var_5<var_6*>
            ((basic_string<var_8,_std::char_traits<var_8>,_std::var_7<var_8>var_9> *)(var_4 + 1),
             var_10,var_10 + var_11,0);
  var_13 = (type_3 *)this->sections_elements_;
  this_00 = (type_3 *)var_2(0xc);
  this_00[1]._M_next = var_4;
  std::__detail::_List_node_base::var_12(this_00,var_13);
  var_13 = var_13 + 1;
  var_13->_M_next = (type_3 *)((int)&var_13->_M_next->_M_next + 1);
  return;
}


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

void MASKED(int param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  int unaff_EDI;
  
  FUN_0004fb7e();
  if (*(int *)(param_1 + 8) != 0) {
    FUN_00109aa0();
    return;
  }
  piVar2 = (int *)FUN_0017ebf0(0x20);
  *piVar2 = unaff_EDI + 0x1ef65f;
  piVar2[2] = (int)(piVar2 + 4);
  piVar2[1] = param_2;
                    /* try { // try from 00109bbe to 00109bc2 has its CatchHandler @ 00109bf4 */
  FUN_0004cf80(piVar2 + 2,param_3,param_4 + param_3,0);
  iVar1 = *(int *)(param_1 + 4);
  iVar3 = FUN_0017ebf0(0xc);
  *(int **)(iVar3 + 8) = piVar2;
  FUN_00183960(iVar3,iVar1);
  piVar2 = (int *)(iVar1 + 8);
  *piVar2 = *piVar2 + 1;
  return;
}

