
/* DWARF original prototype: Token * next_token(Lex * this) */

Token * __thiscall gold::Lex::next_token(Lex *this)

{
  uint uVar1;
  char *pcVar2;
  char *pcVar3;
  long lVar4;
  Token local_48;
  
  uVar1 = this->first_token_;
  if (uVar1 == 0) {
    get_token(&local_48,this,&this->current_);
    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);
    (this->token_).value_ = local_48.value_;
    (this->token_).value_length_ = local_48.value_length_;
    (this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);
    (this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);
    (this->token_).charpos_ = local_48.charpos_;
    if ((local_48.classification_ == TOKEN_EOF) &&
       (pcVar2 = this->current_,
       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {
      pcVar3 = this->linestart_;
      lVar4 = (ulong)(uint)this->lineno_ << 0x20;
      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;
      (this->token_).value_ = (char *)0x0;
      (this->token_).value_length_ = 0;
      (this->token_).opcode_ = (int)lVar4;
      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);
      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;
    }
  }
  else {
    (this->token_).charpos_ = 0;
    this->first_token_ = 0;
    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);
    (this->token_).value_ = (char *)0x0;
    (this->token_).value_length_ = 0;
    (this->token_).opcode_ = (int)(ulong)uVar1;
    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);
  }
  return &this->token_;
}



long * FUN_00211960(long *param_1)

{
  uint uVar1;
  int local_48;
  uint uStack_44;
  long lStack_40;
  long local_38;
  undefined4 uStack_30;
  undefined4 uStack_2c;
  undefined4 uStack_28;
  
  uVar1 = *(uint *)((long)param_1 + 0x1c);
  if (uVar1 == 0) {
    FUN_00211250(&local_48,param_1,param_1 + 2);
    param_1[4] = CONCAT44(uStack_44,local_48);
    param_1[5] = lStack_40;
    param_1[6] = local_38;
    param_1[7] = CONCAT44(uStack_2c,uStack_30);
    *(undefined4 *)(param_1 + 8) = uStack_28;
    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {
      param_1[4] = (ulong)uStack_44 << 0x20;
      param_1[5] = 0;
      param_1[6] = 0;
      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;
      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;
    }
  }
  else {
    *(undefined4 *)(param_1 + 8) = 0;
    *(undefined4 *)((long)param_1 + 0x1c) = 0;
    param_1[4] = CONCAT44(uStack_44,4);
    param_1[5] = 0;
    param_1[6] = 0;
    param_1[7] = (ulong)uVar1;
  }
  return param_1 + 4;
}


PUSH RBP
LEA RBP,[RDI + 0x20]
PUSH RBX
SUB RSP,0x38
MOV EDX,dword ptr [RDI + 0x1c]
TEST EDX,EDX
JZ 0x002119c8
MOV qword ptr [RSP + 0x1c],0x0
MOV EAX,dword ptr [RSP + 0x20]
MOV dword ptr [RSP],0x4
MOV qword ptr [RSP + 0x8],0x0
MOVDQA XMM0,xmmword ptr [RSP]
MOV qword ptr [RSP + 0x10],0x0
MOV dword ptr [RSP + 0x18],EDX
MOVDQA XMM1,xmmword ptr [RSP + 0x10]
MOV dword ptr [RDI + 0x40],EAX
MOV dword ptr [RDI + 0x1c],0x0
MOVUPS xmmword ptr [RDI + 0x20],XMM0
MOVUPS xmmword ptr [RDI + 0x30],XMM1
ADD RSP,0x38
MOV RAX,RBP
POP RBX
POP RBP
RET
MOV RBX,RDI
MOV RDI,RSP
LEA RDX,[RBX + 0x10]
MOV RSI,RBX
CALL 0x00211250
MOVDQA XMM2,xmmword ptr [RSP]
MOVDQA XMM3,xmmword ptr [RSP + 0x10]
MOV EDX,dword ptr [RSP + 0x20]
MOV EAX,dword ptr [RSP]
MOVUPS xmmword ptr [RBX + 0x20],XMM2
MOVUPS xmmword ptr [RBX + 0x30],XMM3
MOV dword ptr [RBX + 0x40],EDX
CMP EAX,0x1
JNZ 0x002119b8
MOV RAX,qword ptr [RBX + 0x10]
MOV RDX,RAX
SUB RDX,qword ptr [RBX]
CMP RDX,qword ptr [RBX + 0x8]
JNC 0x002119b8
MOV EDX,dword ptr [RBX + 0x48]
SUB RAX,qword ptr [RBX + 0x50]
MOV dword ptr [RSP],0x0
MOV qword ptr [RSP + 0x8],0x0
MOVDQA XMM4,xmmword ptr [RSP]
ADD EAX,0x1
MOV qword ptr [RSP + 0x10],0x0
MOV dword ptr [RSP + 0x18],0x0
MOV dword ptr [RSP + 0x1c],EDX
MOVDQA XMM5,xmmword ptr [RSP + 0x10]
MOVUPS xmmword ptr [RBX + 0x20],XMM4
MOVUPS xmmword ptr [RBX + 0x30],XMM5
MOV dword ptr [RBX + 0x40],EAX
JMP 0x002119b8
(translation_unit "long * FUN_00211960(long *param_1)\n\n{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}\n\n" (function_definition "long * FUN_00211960(long *param_1)\n\n{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00211960(long *param_1)" * (function_declarator "FUN_00211960(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int local_48;" primitive_type identifier ;) (declaration "uint uStack_44;" type_identifier identifier ;) (declaration "long lStack_40;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uStack_30;" type_identifier identifier ;) (declaration "undefined4 uStack_2c;" type_identifier identifier ;) (declaration "undefined4 uStack_28;" type_identifier identifier ;) (expression_statement "uVar1 = *(uint *)((long)param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)((long)param_1 + 0x1c)" identifier = (pointer_expression "*(uint *)((long)param_1 + 0x1c)" * (cast_expression "(uint *)((long)param_1 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x1c)" ( (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }" { (expression_statement "FUN_00211250(&local_48,param_1,param_1 + 2);" (call_expression "FUN_00211250(&local_48,param_1,param_1 + 2)" identifier (argument_list "(&local_48,param_1,param_1 + 2)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "param_1 + 2" identifier + number_literal) ))) ;) (expression_statement "param_1[4] = CONCAT44(uStack_44,local_48);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,local_48)" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_44,local_48)" identifier (argument_list "(uStack_44,local_48)" ( identifier , identifier )))) ;) (expression_statement "param_1[5] = lStack_40;" (assignment_expression "param_1[5] = lStack_40" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = local_38;" (assignment_expression "param_1[6] = local_38" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[7] = CONCAT44(uStack_2c,uStack_30);" (assignment_expression "param_1[7] = CONCAT44(uStack_2c,uStack_30)" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_2c,uStack_30)" identifier (argument_list "(uStack_2c,uStack_30)" ( identifier , identifier )))) ;) (expression_statement "*(undefined4 *)(param_1 + 8) = uStack_28;" (assignment_expression "*(undefined4 *)(param_1 + 8) = uStack_28" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" if (parenthesized_expression "((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1]))" ( (binary_expression "(local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" (parenthesized_expression "(local_48 == 1)" ( (binary_expression "local_48 == 1" identifier == number_literal) )) && (parenthesized_expression "((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" ( (binary_expression "(ulong)(param_1[2] - *param_1) < (ulong)param_1[1]" (call_expression "(ulong)(param_1[2] - *param_1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - *param_1)" ( (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (pointer_expression "*param_1" * identifier)) ))) < (cast_expression "(ulong)param_1[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" { (expression_statement "param_1[4] = (ulong)uStack_44 << 0x20;" (assignment_expression "param_1[4] = (ulong)uStack_44 << 0x20" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "(ulong)uStack_44 << 0x20" (cast_expression "(ulong)uStack_44" ( (type_descriptor "ulong" type_identifier) ) identifier) << number_literal)) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;" (assignment_expression "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (binary_expression "(ulong)*(uint *)(param_1 + 9) << 0x20" (binary_expression "(ulong)*(uint *)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_1 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;" (assignment_expression "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1" (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) )))) = (binary_expression "((int)param_1[2] - (int)param_1[10]) + 1" (parenthesized_expression "((int)param_1[2] - (int)param_1[10])" ( (binary_expression "(int)param_1[2] - (int)param_1[10]" (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) - (cast_expression "(int)param_1[10]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))) )) + number_literal)) ;) })) }) (else_clause "else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" else (compound_statement "{\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)((long)param_1 + 0x1c) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x1c) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x1c)" * (cast_expression "(undefined4 *)((long)param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x1c)" ( (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[4] = CONCAT44(uStack_44,4);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,4)" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_44,4)" identifier (argument_list "(uStack_44,4)" ( identifier , number_literal )))) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = (ulong)uVar1;" (assignment_expression "param_1[7] = (ulong)uVar1" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (return_statement "return param_1 + 4;" return (binary_expression "param_1 + 4" identifier + number_literal) ;) })))
(translation_unit "/* DWARF original prototype: Token * next_token(Lex * this) */\n\nToken * __thiscall gold::Lex::next_token(Lex *this)\n\n{\n  uint uVar1;\n  char *pcVar2;\n  char *pcVar3;\n  long lVar4;\n  Token local_48;\n  \n  uVar1 = this->first_token_;\n  if (uVar1 == 0) {\n    get_token(&local_48,this,&this->current_);\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);\n    (this->token_).value_ = local_48.value_;\n    (this->token_).value_length_ = local_48.value_length_;\n    (this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);\n    (this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);\n    (this->token_).charpos_ = local_48.charpos_;\n    if ((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }\n  }\n  else {\n    (this->token_).charpos_ = 0;\n    this->first_token_ = 0;\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);\n    (this->token_).value_ = (char *)0x0;\n    (this->token_).value_length_ = 0;\n    (this->token_).opcode_ = (int)(ulong)uVar1;\n    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);\n  }\n  return &this->token_;\n}\n\n" comment (ERROR "Token * __thiscall gold::Lex::next_token(Lex *this)" (binary_expression "Token * __thiscall gold::Lex::next_token(Lex *this" (binary_expression "Token * __thiscall" identifier * identifier) (ERROR "gold::Lex::next_token(Lex" identifier : : identifier : : identifier ( identifier) * identifier) )) (compound_statement "{\n  uint uVar1;\n  char *pcVar2;\n  char *pcVar3;\n  long lVar4;\n  Token local_48;\n  \n  uVar1 = this->first_token_;\n  if (uVar1 == 0) {\n    get_token(&local_48,this,&this->current_);\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);\n    (this->token_).value_ = local_48.value_;\n    (this->token_).value_length_ = local_48.value_length_;\n    (this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);\n    (this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);\n    (this->token_).charpos_ = local_48.charpos_;\n    if ((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }\n  }\n  else {\n    (this->token_).charpos_ = 0;\n    this->first_token_ = 0;\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);\n    (this->token_).value_ = (char *)0x0;\n    (this->token_).value_length_ = 0;\n    (this->token_).opcode_ = (int)(ulong)uVar1;\n    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);\n  }\n  return &this->token_;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "Token local_48;" type_identifier identifier ;) (expression_statement "uVar1 = this->first_token_;" (assignment_expression "uVar1 = this->first_token_" identifier = (field_expression "this->first_token_" identifier -> field_identifier)) ;) (if_statement "if (uVar1 == 0) {\n    get_token(&local_48,this,&this->current_);\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);\n    (this->token_).value_ = local_48.value_;\n    (this->token_).value_length_ = local_48.value_length_;\n    (this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);\n    (this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);\n    (this->token_).charpos_ = local_48.charpos_;\n    if ((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }\n  }\n  else {\n    (this->token_).charpos_ = 0;\n    this->first_token_ = 0;\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);\n    (this->token_).value_ = (char *)0x0;\n    (this->token_).value_length_ = 0;\n    (this->token_).opcode_ = (int)(ulong)uVar1;\n    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    get_token(&local_48,this,&this->current_);\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);\n    (this->token_).value_ = local_48.value_;\n    (this->token_).value_length_ = local_48.value_length_;\n    (this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);\n    (this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);\n    (this->token_).charpos_ = local_48.charpos_;\n    if ((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }\n  }" { (expression_statement "get_token(&local_48,this,&this->current_);" (call_expression "get_token(&local_48,this,&this->current_)" identifier (argument_list "(&local_48,this,&this->current_)" ( (pointer_expression "&local_48" & identifier) , identifier , (pointer_expression "&this->current_" & (field_expression "this->current_" identifier -> field_identifier)) ))) ;) (expression_statement "*(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_);" (assignment_expression "*(ulong *)&this->token_ = CONCAT44(local_48._4_4_,local_48.classification_)" (pointer_expression "*(ulong *)&this->token_" * (cast_expression "(ulong *)&this->token_" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->token_" & (field_expression "this->token_" identifier -> field_identifier)))) = (call_expression "CONCAT44(local_48._4_4_,local_48.classification_)" identifier (argument_list "(local_48._4_4_,local_48.classification_)" ( (field_expression "local_48._4_4_" identifier . field_identifier) , (field_expression "local_48.classification_" identifier . field_identifier) )))) ;) (expression_statement "(this->token_).value_ = local_48.value_;" (assignment_expression "(this->token_).value_ = local_48.value_" (field_expression "(this->token_).value_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (field_expression "local_48.value_" identifier . field_identifier)) ;) (expression_statement "(this->token_).value_length_ = local_48.value_length_;" (assignment_expression "(this->token_).value_length_ = local_48.value_length_" (field_expression "(this->token_).value_length_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (field_expression "local_48.value_length_" identifier . field_identifier)) ;) (expression_statement "(this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_);" (assignment_expression "(this->token_).opcode_ = (int)CONCAT44(local_48.lineno_,local_48.opcode_)" (field_expression "(this->token_).opcode_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)CONCAT44(local_48.lineno_,local_48.opcode_)" ( (type_descriptor "int" primitive_type) ) (call_expression "CONCAT44(local_48.lineno_,local_48.opcode_)" identifier (argument_list "(local_48.lineno_,local_48.opcode_)" ( (field_expression "local_48.lineno_" identifier . field_identifier) , (field_expression "local_48.opcode_" identifier . field_identifier) ))))) ;) (expression_statement "(this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20);" (assignment_expression "(this->token_).lineno_ = (int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20)" (field_expression "(this->token_).lineno_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20)" ( (binary_expression "CONCAT44(local_48.lineno_,local_48.opcode_) >> 0x20" (call_expression "CONCAT44(local_48.lineno_,local_48.opcode_)" identifier (argument_list "(local_48.lineno_,local_48.opcode_)" ( (field_expression "local_48.lineno_" identifier . field_identifier) , (field_expression "local_48.opcode_" identifier . field_identifier) ))) >> number_literal) )))) ;) (expression_statement "(this->token_).charpos_ = local_48.charpos_;" (assignment_expression "(this->token_).charpos_ = local_48.charpos_" (field_expression "(this->token_).charpos_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (field_expression "local_48.charpos_" identifier . field_identifier)) ;) (if_statement "if ((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }" if (parenthesized_expression "((local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_))" ( (binary_expression "(local_48.classification_ == TOKEN_EOF) &&\n       (pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)" (parenthesized_expression "(local_48.classification_ == TOKEN_EOF)" ( (binary_expression "local_48.classification_ == TOKEN_EOF" (field_expression "local_48.classification_" identifier . field_identifier) == identifier) )) && (parenthesized_expression "(pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_)" ( (comma_expression "pcVar2 = this->current_,\n       (ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_" (assignment_expression "pcVar2 = this->current_" identifier = (field_expression "this->current_" identifier -> field_identifier)) , (binary_expression "(ulong)((long)pcVar2 - (long)this->input_string_) < this->input_length_" (call_expression "(ulong)((long)pcVar2 - (long)this->input_string_)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pcVar2 - (long)this->input_string_)" ( (binary_expression "(long)pcVar2 - (long)this->input_string_" (cast_expression "(long)pcVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)this->input_string_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "this->input_string_" identifier -> field_identifier))) ))) < (field_expression "this->input_length_" identifier -> field_identifier))) ))) )) (compound_statement "{\n      pcVar3 = this->linestart_;\n      lVar4 = (ulong)(uint)this->lineno_ << 0x20;\n      *(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;\n      (this->token_).value_ = (char *)0x0;\n      (this->token_).value_length_ = 0;\n      (this->token_).opcode_ = (int)lVar4;\n      (this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);\n      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;\n    }" { (expression_statement "pcVar3 = this->linestart_;" (assignment_expression "pcVar3 = this->linestart_" identifier = (field_expression "this->linestart_" identifier -> field_identifier)) ;) (expression_statement "lVar4 = (ulong)(uint)this->lineno_ << 0x20;" (assignment_expression "lVar4 = (ulong)(uint)this->lineno_ << 0x20" identifier = (binary_expression "(ulong)(uint)this->lineno_ << 0x20" (cast_expression "(ulong)(uint)this->lineno_" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(uint)this->lineno_" ( (type_descriptor "uint" type_identifier) ) (field_expression "this->lineno_" identifier -> field_identifier))) << number_literal)) ;) (expression_statement "*(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20;" (assignment_expression "*(ulong *)&this->token_ = (ulong)(uint)local_48._4_4_ << 0x20" (pointer_expression "*(ulong *)&this->token_" * (cast_expression "(ulong *)&this->token_" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->token_" & (field_expression "this->token_" identifier -> field_identifier)))) = (binary_expression "(ulong)(uint)local_48._4_4_ << 0x20" (cast_expression "(ulong)(uint)local_48._4_4_" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(uint)local_48._4_4_" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_48._4_4_" identifier . field_identifier))) << number_literal)) ;) (expression_statement "(this->token_).value_ = (char *)0x0;" (assignment_expression "(this->token_).value_ = (char *)0x0" (field_expression "(this->token_).value_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(this->token_).value_length_ = 0;" (assignment_expression "(this->token_).value_length_ = 0" (field_expression "(this->token_).value_length_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "(this->token_).opcode_ = (int)lVar4;" (assignment_expression "(this->token_).opcode_ = (int)lVar4" (field_expression "(this->token_).opcode_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "(this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20);" (assignment_expression "(this->token_).lineno_ = (int)((ulong)lVar4 >> 0x20)" (field_expression "(this->token_).lineno_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)((ulong)lVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulong)lVar4 >> 0x20)" ( (binary_expression "(ulong)lVar4 >> 0x20" (cast_expression "(ulong)lVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "(this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;" (assignment_expression "(this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1" (field_expression "(this->token_).charpos_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (binary_expression "((int)pcVar2 - (int)pcVar3) + 1" (parenthesized_expression "((int)pcVar2 - (int)pcVar3)" ( (binary_expression "(int)pcVar2 - (int)pcVar3" (cast_expression "(int)pcVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )) + number_literal)) ;) })) }) (else_clause "else {\n    (this->token_).charpos_ = 0;\n    this->first_token_ = 0;\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);\n    (this->token_).value_ = (char *)0x0;\n    (this->token_).value_length_ = 0;\n    (this->token_).opcode_ = (int)(ulong)uVar1;\n    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);\n  }" else (compound_statement "{\n    (this->token_).charpos_ = 0;\n    this->first_token_ = 0;\n    *(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);\n    (this->token_).value_ = (char *)0x0;\n    (this->token_).value_length_ = 0;\n    (this->token_).opcode_ = (int)(ulong)uVar1;\n    (this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);\n  }" { (expression_statement "(this->token_).charpos_ = 0;" (assignment_expression "(this->token_).charpos_ = 0" (field_expression "(this->token_).charpos_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "this->first_token_ = 0;" (assignment_expression "this->first_token_ = 0" (field_expression "this->first_token_" identifier -> field_identifier) = number_literal) ;) (expression_statement "*(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4);" (assignment_expression "*(ulong *)&this->token_ = CONCAT44(local_48._4_4_,4)" (pointer_expression "*(ulong *)&this->token_" * (cast_expression "(ulong *)&this->token_" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->token_" & (field_expression "this->token_" identifier -> field_identifier)))) = (call_expression "CONCAT44(local_48._4_4_,4)" identifier (argument_list "(local_48._4_4_,4)" ( (field_expression "local_48._4_4_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "(this->token_).value_ = (char *)0x0;" (assignment_expression "(this->token_).value_ = (char *)0x0" (field_expression "(this->token_).value_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(this->token_).value_length_ = 0;" (assignment_expression "(this->token_).value_length_ = 0" (field_expression "(this->token_).value_length_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "(this->token_).opcode_ = (int)(ulong)uVar1;" (assignment_expression "(this->token_).opcode_ = (int)(ulong)uVar1" (field_expression "(this->token_).opcode_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)(ulong)uVar1" ( (type_descriptor "int" primitive_type) ) (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (expression_statement "(this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20);" (assignment_expression "(this->token_).lineno_ = (int)((ulong)uVar1 >> 0x20)" (field_expression "(this->token_).lineno_" (parenthesized_expression "(this->token_)" ( (field_expression "this->token_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(int)((ulong)uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulong)uVar1 >> 0x20)" ( (binary_expression "(ulong)uVar1 >> 0x20" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) )))) ;) }))) (return_statement "return &this->token_;" return (pointer_expression "&this->token_" & (field_expression "this->token_" identifier -> field_identifier)) ;) }))
(translation_unit "long * FUN_00211960(long *param_1)\n\n{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}\n\n" (function_definition "long * FUN_00211960(long *param_1)\n\n{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00211960(long *param_1)" * (function_declarator "FUN_00211960(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int local_48;" primitive_type identifier ;) (declaration "uint uStack_44;" type_identifier identifier ;) (declaration "long lStack_40;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uStack_30;" type_identifier identifier ;) (declaration "undefined4 uStack_2c;" type_identifier identifier ;) (declaration "undefined4 uStack_28;" type_identifier identifier ;) (expression_statement "uVar1 = *(uint *)((long)param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)((long)param_1 + 0x1c)" identifier = (pointer_expression "*(uint *)((long)param_1 + 0x1c)" * (cast_expression "(uint *)((long)param_1 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x1c)" ( (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }" { (expression_statement "FUN_00211250(&local_48,param_1,param_1 + 2);" (call_expression "FUN_00211250(&local_48,param_1,param_1 + 2)" identifier (argument_list "(&local_48,param_1,param_1 + 2)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "param_1 + 2" identifier + number_literal) ))) ;) (expression_statement "param_1[4] = CONCAT44(uStack_44,local_48);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,local_48)" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_44,local_48)" identifier (argument_list "(uStack_44,local_48)" ( identifier , identifier )))) ;) (expression_statement "param_1[5] = lStack_40;" (assignment_expression "param_1[5] = lStack_40" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = local_38;" (assignment_expression "param_1[6] = local_38" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[7] = CONCAT44(uStack_2c,uStack_30);" (assignment_expression "param_1[7] = CONCAT44(uStack_2c,uStack_30)" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_2c,uStack_30)" identifier (argument_list "(uStack_2c,uStack_30)" ( identifier , identifier )))) ;) (expression_statement "*(undefined4 *)(param_1 + 8) = uStack_28;" (assignment_expression "*(undefined4 *)(param_1 + 8) = uStack_28" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" if (parenthesized_expression "((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1]))" ( (binary_expression "(local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" (parenthesized_expression "(local_48 == 1)" ( (binary_expression "local_48 == 1" identifier == number_literal) )) && (parenthesized_expression "((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" ( (binary_expression "(ulong)(param_1[2] - *param_1) < (ulong)param_1[1]" (call_expression "(ulong)(param_1[2] - *param_1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - *param_1)" ( (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (pointer_expression "*param_1" * identifier)) ))) < (cast_expression "(ulong)param_1[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" { (expression_statement "param_1[4] = (ulong)uStack_44 << 0x20;" (assignment_expression "param_1[4] = (ulong)uStack_44 << 0x20" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "(ulong)uStack_44 << 0x20" (cast_expression "(ulong)uStack_44" ( (type_descriptor "ulong" type_identifier) ) identifier) << number_literal)) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;" (assignment_expression "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (binary_expression "(ulong)*(uint *)(param_1 + 9) << 0x20" (binary_expression "(ulong)*(uint *)(param_1 + 9)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_1 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;" (assignment_expression "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1" (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) )))) = (binary_expression "((int)param_1[2] - (int)param_1[10]) + 1" (parenthesized_expression "((int)param_1[2] - (int)param_1[10])" ( (binary_expression "(int)param_1[2] - (int)param_1[10]" (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) - (cast_expression "(int)param_1[10]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[10]" identifier [ number_literal ]))) )) + number_literal)) ;) })) }) (else_clause "else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" else (compound_statement "{\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)((long)param_1 + 0x1c) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x1c) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x1c)" * (cast_expression "(undefined4 *)((long)param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x1c)" ( (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[4] = CONCAT44(uStack_44,4);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,4)" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (call_expression "CONCAT44(uStack_44,4)" identifier (argument_list "(uStack_44,4)" ( identifier , number_literal )))) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = (ulong)uVar1;" (assignment_expression "param_1[7] = (ulong)uVar1" (subscript_expression "param_1[7]" identifier [ number_literal ]) = (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (return_statement "return param_1 + 4;" return (binary_expression "param_1 + 4" identifier + number_literal) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_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 (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - (pointer_expression * IDENT)) ))) < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) << LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) - (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) + LIT)) ;) })) }) (else_clause else (compound_statement { (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }))) (return_statement return (binary_expression IDENT + LIT) ;) })))
(function_definition "long * FUN_00211960(long *param_1)\n\n{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_00211960(long *param_1)" (* "*") (function_declarator "FUN_00211960(long *param_1)" (identifier "FUN_00211960") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")")))) (compound_statement "{\n  uint uVar1;\n  int local_48;\n  uint uStack_44;\n  long lStack_40;\n  long local_38;\n  undefined4 uStack_30;\n  undefined4 uStack_2c;\n  undefined4 uStack_28;\n  \n  uVar1 = *(uint *)((long)param_1 + 0x1c);\n  if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }\n  return param_1 + 4;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int local_48;" (primitive_type "int") (identifier "local_48") (; ";")) (declaration "uint uStack_44;" (type_identifier "uint") (identifier "uStack_44") (; ";")) (declaration "long lStack_40;" (sized_type_specifier "long" (long "long")) (identifier "lStack_40") (; ";")) (declaration "long local_38;" (sized_type_specifier "long" (long "long")) (identifier "local_38") (; ";")) (declaration "undefined4 uStack_30;" (type_identifier "undefined4") (identifier "uStack_30") (; ";")) (declaration "undefined4 uStack_2c;" (type_identifier "undefined4") (identifier "uStack_2c") (; ";")) (declaration "undefined4 uStack_28;" (type_identifier "undefined4") (identifier "uStack_28") (; ";")) (expression_statement "uVar1 = *(uint *)((long)param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)((long)param_1 + 0x1c)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)((long)param_1 + 0x1c)" (* "*") (cast_expression "(uint *)((long)param_1 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x1c)" (( "(") (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (if_statement "if (uVar1 == 0) {\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }\n  else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00211250(&local_48,param_1,param_1 + 2);\n    param_1[4] = CONCAT44(uStack_44,local_48);\n    param_1[5] = lStack_40;\n    param_1[6] = local_38;\n    param_1[7] = CONCAT44(uStack_2c,uStack_30);\n    *(undefined4 *)(param_1 + 8) = uStack_28;\n    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }\n  }" ({ "{") (expression_statement "FUN_00211250(&local_48,param_1,param_1 + 2);" (call_expression "FUN_00211250(&local_48,param_1,param_1 + 2)" (identifier "FUN_00211250") (argument_list "(&local_48,param_1,param_1 + 2)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "param_1") (, ",") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")"))) (; ";")) (expression_statement "param_1[4] = CONCAT44(uStack_44,local_48);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,local_48)" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (call_expression "CONCAT44(uStack_44,local_48)" (identifier "CONCAT44") (argument_list "(uStack_44,local_48)" (( "(") (identifier "uStack_44") (, ",") (identifier "local_48") () ")")))) (; ";")) (expression_statement "param_1[5] = lStack_40;" (assignment_expression "param_1[5] = lStack_40" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "lStack_40")) (; ";")) (expression_statement "param_1[6] = local_38;" (assignment_expression "param_1[6] = local_38" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "local_38")) (; ";")) (expression_statement "param_1[7] = CONCAT44(uStack_2c,uStack_30);" (assignment_expression "param_1[7] = CONCAT44(uStack_2c,uStack_30)" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (call_expression "CONCAT44(uStack_2c,uStack_30)" (identifier "CONCAT44") (argument_list "(uStack_2c,uStack_30)" (( "(") (identifier "uStack_2c") (, ",") (identifier "uStack_30") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 8) = uStack_28;" (assignment_expression "*(undefined4 *)(param_1 + 8) = uStack_28" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "uStack_28")) (; ";")) (if_statement "if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" (if "if") (parenthesized_expression "((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1]))" (( "(") (binary_expression "(local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" (parenthesized_expression "(local_48 == 1)" (( "(") (binary_expression "local_48 == 1" (identifier "local_48") (== "==") (number_literal "1")) () ")")) (&& "&&") (parenthesized_expression "((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])" (( "(") (binary_expression "(ulong)(param_1[2] - *param_1) < (ulong)param_1[1]" (call_expression "(ulong)(param_1[2] - *param_1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[2] - *param_1)" (( "(") (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (- "-") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")"))) (< "<") (cast_expression "(ulong)param_1[1]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) () ")"))) () ")")) (compound_statement "{\n      param_1[4] = (ulong)uStack_44 << 0x20;\n      param_1[5] = 0;\n      param_1[6] = 0;\n      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;\n      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;\n    }" ({ "{") (expression_statement "param_1[4] = (ulong)uStack_44 << 0x20;" (assignment_expression "param_1[4] = (ulong)uStack_44 << 0x20" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "(ulong)uStack_44 << 0x20" (cast_expression "(ulong)uStack_44" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uStack_44")) (<< "<<") (number_literal "0x20"))) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;" (assignment_expression "param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (binary_expression "(ulong)*(uint *)(param_1 + 9) << 0x20" (binary_expression "(ulong)*(uint *)(param_1 + 9)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(param_1 + 9)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")")))) (<< "<<") (number_literal "0x20"))) (; ";")) (expression_statement "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;" (assignment_expression "*(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1" (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")) () ")")))) (= "=") (binary_expression "((int)param_1[2] - (int)param_1[10]) + 1" (parenthesized_expression "((int)param_1[2] - (int)param_1[10])" (( "(") (binary_expression "(int)param_1[2] - (int)param_1[10]" (cast_expression "(int)param_1[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (- "-") (cast_expression "(int)param_1[10]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")))) () ")")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" (else "else") (compound_statement "{\n    *(undefined4 *)(param_1 + 8) = 0;\n    *(undefined4 *)((long)param_1 + 0x1c) = 0;\n    param_1[4] = CONCAT44(uStack_44,4);\n    param_1[5] = 0;\n    param_1[6] = 0;\n    param_1[7] = (ulong)uVar1;\n  }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)((long)param_1 + 0x1c) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x1c) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x1c)" (* "*") (cast_expression "(undefined4 *)((long)param_1 + 0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x1c)" (( "(") (binary_expression "(long)param_1 + 0x1c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[4] = CONCAT44(uStack_44,4);" (assignment_expression "param_1[4] = CONCAT44(uStack_44,4)" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (call_expression "CONCAT44(uStack_44,4)" (identifier "CONCAT44") (argument_list "(uStack_44,4)" (( "(") (identifier "uStack_44") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[7] = (ulong)uVar1;" (assignment_expression "param_1[7] = (ulong)uVar1" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1"))) (; ";")) (} "}")))) (return_statement "return param_1 + 4;" (return "return") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) (; ";")) (} "}")))

/* DWARF original prototype: Token * next_token(Lex * this) */

type_2 * __thiscall gold::Lex::next_token(Lex *this)

{
  type_1 var_1;
  char *pcVar2;
  char *pcVar3;
  long lVar4;
  type_2 local_48;
  
  var_1 = this->first_token_;
  if (var_1 == 0) {
    var_2(&local_48,this,&this->current_);
    *(type_3 *)&this->token_ = var_3(local_48._4_4_,local_48.classification_);
    (this->token_).value_ = local_48.value_;
    (this->token_).value_length_ = local_48.value_length_;
    (this->token_).opcode_ = (int)var_3(local_48.lineno_,local_48.opcode_);
    (this->token_).lineno_ = (int)(var_3(local_48.lineno_,local_48.opcode_) >> 0x20);
    (this->token_).charpos_ = local_48.charpos_;
    if ((local_48.classification_ == var_4) &&
       (pcVar2 = this->current_,
       (type_3)((long)pcVar2 - (long)this->input_string_) < this->input_length_)) {
      pcVar3 = this->linestart_;
      lVar4 = (type_3)(type_1)this->lineno_ << 0x20;
      *(type_3 *)&this->token_ = (type_3)(type_1)local_48._4_4_ << 0x20;
      (this->token_).value_ = (char *)0x0;
      (this->token_).value_length_ = 0;
      (this->token_).opcode_ = (int)lVar4;
      (this->token_).lineno_ = (int)((type_3)lVar4 >> 0x20);
      (this->token_).charpos_ = ((int)pcVar2 - (int)pcVar3) + 1;
    }
  }
  else {
    (this->token_).charpos_ = 0;
    this->first_token_ = 0;
    *(type_3 *)&this->token_ = var_3(local_48._4_4_,4);
    (this->token_).value_ = (char *)0x0;
    (this->token_).value_length_ = 0;
    (this->token_).opcode_ = (int)(type_3)var_1;
    (this->token_).lineno_ = (int)((type_3)var_1 >> 0x20);
  }
  return &this->token_;
}


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

long * MASKED(long *param_1)

{
  uint uVar1;
  int local_48;
  uint uStack_44;
  long lStack_40;
  long local_38;
  undefined4 uStack_30;
  undefined4 uStack_2c;
  undefined4 uStack_28;
  
  uVar1 = *(uint *)((long)param_1 + 0x1c);
  if (uVar1 == 0) {
    FUN_00211250(&local_48,param_1,param_1 + 2);
    param_1[4] = CONCAT44(uStack_44,local_48);
    param_1[5] = lStack_40;
    param_1[6] = local_38;
    param_1[7] = CONCAT44(uStack_2c,uStack_30);
    *(undefined4 *)(param_1 + 8) = uStack_28;
    if ((local_48 == 1) && ((ulong)(param_1[2] - *param_1) < (ulong)param_1[1])) {
      param_1[4] = (ulong)uStack_44 << 0x20;
      param_1[5] = 0;
      param_1[6] = 0;
      param_1[7] = (ulong)*(uint *)(param_1 + 9) << 0x20;
      *(int *)(param_1 + 8) = ((int)param_1[2] - (int)param_1[10]) + 1;
    }
  }
  else {
    *(undefined4 *)(param_1 + 8) = 0;
    *(undefined4 *)((long)param_1 + 0x1c) = 0;
    param_1[4] = CONCAT44(uStack_44,4);
    param_1[5] = 0;
    param_1[6] = 0;
    param_1[7] = (ulong)uVar1;
  }
  return param_1 + 4;
}

