
/* DWARF original prototype: uint64_t integer_value(Token * this) */

uint64_t __thiscall gold::Token::integer_value(Token *this)

{
  size_t sVar1;
  ulonglong uVar2;
  byte bVar3;
  long lVar4;
  size_t sVar5;
  char *end;
  
  if (this->classification_ != TOKEN_INTEGER) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");
  }
  sVar1 = this->value_length_;
  lVar4 = 0x100000;
  bVar3 = this->value_[sVar1 - 1] & 0xdf;
  sVar5 = sVar1 - 1;
  if ((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)) {
    lVar4 = 0x400;
    sVar5 = sVar1 - 1;
  }
  uVar2 = strtoull(this->value_,&end,0);
  if ((long)end - (long)this->value_ == sVar5) {
    return uVar2 * lVar4;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value");
}



long FUN_002636d0(int *param_1)

{
  long lVar1;
  ulonglong uVar2;
  byte bVar3;
  long lVar4;
  long lVar5;
  char *local_20;
  
  if (*param_1 != 5) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");
  }
  lVar1 = *(long *)(param_1 + 4);
  lVar4 = 0x100000;
  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;
  lVar5 = lVar1 + -1;
  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {
    lVar4 = 0x400;
    lVar5 = lVar1 + -1;
  }
  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);
  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {
    return uVar2 * lVar4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");
}


PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x10
CMP dword ptr [RDI],0x5
JNZ 0x0026373f
MOV RCX,qword ptr [RDI + 0x10]
MOV RBP,RDI
MOV RDI,qword ptr [RDI + 0x8]
MOV EBX,0x100000
MOVZX EDX,byte ptr [RDI + RCX*0x1 + -0x1]
LEA R12,[RCX + -0x1]
AND EDX,0xffffffdf
CMP DL,0x4d
JNZ 0x00263728
XOR EDX,EDX
LEA RSI,[RSP + 0x8]
CALL 0x00147900
MOV RDX,qword ptr [RSP + 0x8]
SUB RDX,qword ptr [RBP + 0x8]
CMP RDX,R12
JNZ 0x00263757
ADD RSP,0x10
IMUL RAX,RBX
POP RBX
POP RBP
POP R12
RET
CMP DL,0x4b
MOV EBX,0x1
MOV EAX,0x400
CMOVZ RBX,RAX
CMOVNZ R12,RCX
JMP 0x002636fe
LEA RDX,[0x386038]
MOV ESI,0xad
LEA RDI,[0x38521c]
CALL 0x0017c650
LEA RDX,[0x386038]
MOV ESI,0xc0
LEA RDI,[0x38521c]
CALL 0x0017c650
(translation_unit "long FUN_002636d0(int *param_1)\n\n{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}\n\n" (function_definition "long FUN_002636d0(int *param_1)\n\n{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002636d0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "char *local_20;" primitive_type (pointer_declarator "*local_20" * identifier) ;) (if_statement "if (*param_1 != 5) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" if (parenthesized_expression "(*param_1 != 5)" ( (binary_expression "*param_1 != 5" (pointer_expression "*param_1" * identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/script.cc",0xad,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xad,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xad,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 4);" (assignment_expression "lVar1 = *(long *)(param_1 + 4)" identifier = (pointer_expression "*(long *)(param_1 + 4)" * (cast_expression "(long *)(param_1 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "lVar4 = 0x100000;" (assignment_expression "lVar4 = 0x100000" identifier = number_literal) ;) (expression_statement "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;" (assignment_expression "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" identifier = (binary_expression "(*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" (subscript_expression "(*(char **)(param_1 + 2))[lVar1 + -1]" (parenthesized_expression "(*(char **)(param_1 + 2))" ( (pointer_expression "*(char **)(param_1 + 2)" * (cast_expression "(char **)(param_1 + 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) )) [ (binary_expression "lVar1 + -1" identifier + number_literal) ]) & number_literal)) ;) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ;) (if_statement "if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" if (parenthesized_expression "((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b))" ( (binary_expression "(bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" (parenthesized_expression "(bVar3 != 0x4d)" ( (binary_expression "bVar3 != 0x4d" identifier != number_literal) )) && (parenthesized_expression "(lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" ( (comma_expression "lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar4 = 1" identifier = number_literal) , (comma_expression "lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar5 = lVar1" identifier = identifier) , (binary_expression "bVar3 == 0x4b" identifier == number_literal))) ))) )) (compound_statement "{\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" { (expression_statement "lVar4 = 0x400;" (assignment_expression "lVar4 = 0x400" identifier = number_literal) ;) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ;) })) (expression_statement "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);" (assignment_expression "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0)" identifier = (call_expression "strtoull(*(char **)(param_1 + 2),&local_20,0)" identifier (argument_list "(*(char **)(param_1 + 2),&local_20,0)" ( (pointer_expression "*(char **)(param_1 + 2)" * (cast_expression "(char **)(param_1 + 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) , (pointer_expression "&local_20" & identifier) , number_literal )))) ;) (if_statement "if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }" if (parenthesized_expression "((long)local_20 - *(long *)(param_1 + 2) == lVar5)" ( (binary_expression "(long)local_20 - *(long *)(param_1 + 2) == lVar5" (binary_expression "(long)local_20 - *(long *)(param_1 + 2)" (cast_expression "(long)local_20" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (pointer_expression "*(long *)(param_1 + 2)" * (cast_expression "(long *)(param_1 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) ))))) == identifier) )) (compound_statement "{\n    return uVar2 * lVar4;\n  }" { (return_statement "return uVar2 * lVar4;" return (binary_expression "uVar2 * lVar4" identifier * identifier) ;) })) comment (expression_statement "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xc0,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })))
(translation_unit "/* DWARF original prototype: uint64_t integer_value(Token * this) */\n\nuint64_t __thiscall gold::Token::integer_value(Token *this)\n\n{\n  size_t sVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  size_t sVar5;\n  char *end;\n  \n  if (this->classification_ != TOKEN_INTEGER) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");\n  }\n  sVar1 = this->value_length_;\n  lVar4 = 0x100000;\n  bVar3 = this->value_[sVar1 - 1] & 0xdf;\n  sVar5 = sVar1 - 1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    sVar5 = sVar1 - 1;\n  }\n  uVar2 = strtoull(this->value_,&end,0);\n  if ((long)end - (long)this->value_ == sVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value");\n}\n\n" comment (function_definition "uint64_t __thiscall gold::Token::integer_value(Token *this)\n\n{\n  size_t sVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  size_t sVar5;\n  char *end;\n  \n  if (this->classification_ != TOKEN_INTEGER) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");\n  }\n  sVar1 = this->value_length_;\n  lVar4 = 0x100000;\n  bVar3 = this->value_[sVar1 - 1] & 0xdf;\n  sVar5 = sVar1 - 1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    sVar5 = sVar1 - 1;\n  }\n  uVar2 = strtoull(this->value_,&end,0);\n  if ((long)end - (long)this->value_ == sVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Token::" identifier : : identifier : :) (function_declarator "integer_value(Token *this)" identifier (parameter_list "(Token *this)" ( (parameter_declaration "Token *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  size_t sVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  size_t sVar5;\n  char *end;\n  \n  if (this->classification_ != TOKEN_INTEGER) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");\n  }\n  sVar1 = this->value_length_;\n  lVar4 = 0x100000;\n  bVar3 = this->value_[sVar1 - 1] & 0xdf;\n  sVar5 = sVar1 - 1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    sVar5 = sVar1 - 1;\n  }\n  uVar2 = strtoull(this->value_,&end,0);\n  if ((long)end - (long)this->value_ == sVar5) {\n    return uVar2 * lVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value");\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "char *end;" primitive_type (pointer_declarator "*end" * identifier) ;) (if_statement "if (this->classification_ != TOKEN_INTEGER) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");\n  }" if (parenthesized_expression "(this->classification_ != TOKEN_INTEGER)" ( (binary_expression "this->classification_ != TOKEN_INTEGER" (field_expression "this->classification_" identifier -> field_identifier) != identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/script.cc",0xad,"integer_value");" (call_expression "do_gold_unreachable("../../gold/script.cc",0xad,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xad,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })) (expression_statement "sVar1 = this->value_length_;" (assignment_expression "sVar1 = this->value_length_" identifier = (field_expression "this->value_length_" identifier -> field_identifier)) ;) (expression_statement "lVar4 = 0x100000;" (assignment_expression "lVar4 = 0x100000" identifier = number_literal) ;) (expression_statement "bVar3 = this->value_[sVar1 - 1] & 0xdf;" (assignment_expression "bVar3 = this->value_[sVar1 - 1] & 0xdf" identifier = (binary_expression "this->value_[sVar1 - 1] & 0xdf" (subscript_expression "this->value_[sVar1 - 1]" (field_expression "this->value_" identifier -> field_identifier) [ (binary_expression "sVar1 - 1" identifier - number_literal) ]) & number_literal)) ;) (expression_statement "sVar5 = sVar1 - 1;" (assignment_expression "sVar5 = sVar1 - 1" identifier = (binary_expression "sVar1 - 1" identifier - number_literal)) ;) (if_statement "if ((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    sVar5 = sVar1 - 1;\n  }" if (parenthesized_expression "((bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b))" ( (binary_expression "(bVar3 != 0x4d) && (lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)" (parenthesized_expression "(bVar3 != 0x4d)" ( (binary_expression "bVar3 != 0x4d" identifier != number_literal) )) && (parenthesized_expression "(lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b)" ( (comma_expression "lVar4 = 1, sVar5 = sVar1, bVar3 == 0x4b" (assignment_expression "lVar4 = 1" identifier = number_literal) , (comma_expression "sVar5 = sVar1, bVar3 == 0x4b" (assignment_expression "sVar5 = sVar1" identifier = identifier) , (binary_expression "bVar3 == 0x4b" identifier == number_literal))) ))) )) (compound_statement "{\n    lVar4 = 0x400;\n    sVar5 = sVar1 - 1;\n  }" { (expression_statement "lVar4 = 0x400;" (assignment_expression "lVar4 = 0x400" identifier = number_literal) ;) (expression_statement "sVar5 = sVar1 - 1;" (assignment_expression "sVar5 = sVar1 - 1" identifier = (binary_expression "sVar1 - 1" identifier - number_literal)) ;) })) (expression_statement "uVar2 = strtoull(this->value_,&end,0);" (assignment_expression "uVar2 = strtoull(this->value_,&end,0)" identifier = (call_expression "strtoull(this->value_,&end,0)" identifier (argument_list "(this->value_,&end,0)" ( (field_expression "this->value_" identifier -> field_identifier) , (pointer_expression "&end" & identifier) , number_literal )))) ;) (if_statement "if ((long)end - (long)this->value_ == sVar5) {\n    return uVar2 * lVar4;\n  }" if (parenthesized_expression "((long)end - (long)this->value_ == sVar5)" ( (binary_expression "(long)end - (long)this->value_ == sVar5" (binary_expression "(long)end - (long)this->value_" (cast_expression "(long)end" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)this->value_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "this->value_" identifier -> field_identifier))) == identifier) )) (compound_statement "{\n    return uVar2 * lVar4;\n  }" { (return_statement "return uVar2 * lVar4;" return (binary_expression "uVar2 * lVar4" identifier * identifier) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value");" (call_expression "do_gold_unreachable("../../gold/script.cc",0xc0,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xc0,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })))
(translation_unit "long FUN_002636d0(int *param_1)\n\n{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    \n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}\n\n" (function_definition "long FUN_002636d0(int *param_1)\n\n{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    \n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002636d0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    \n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "char *local_20;" primitive_type (pointer_declarator "*local_20" * identifier) ;) (if_statement "if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" if (parenthesized_expression "(*param_1 != 5)" ( (binary_expression "*param_1 != 5" (pointer_expression "*param_1" * identifier) != number_literal) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" { (expression_statement "FUN_0017c650("../../gold/script.cc",0xad,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xad,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xad,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 4);" (assignment_expression "lVar1 = *(long *)(param_1 + 4)" identifier = (pointer_expression "*(long *)(param_1 + 4)" * (cast_expression "(long *)(param_1 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "lVar4 = 0x100000;" (assignment_expression "lVar4 = 0x100000" identifier = number_literal) ;) (expression_statement "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;" (assignment_expression "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" identifier = (binary_expression "(*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" (subscript_expression "(*(char **)(param_1 + 2))[lVar1 + -1]" (parenthesized_expression "(*(char **)(param_1 + 2))" ( (pointer_expression "*(char **)(param_1 + 2)" * (cast_expression "(char **)(param_1 + 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) )) [ (binary_expression "lVar1 + -1" identifier + number_literal) ]) & number_literal)) ;) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ;) (if_statement "if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" if (parenthesized_expression "((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b))" ( (binary_expression "(bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" (parenthesized_expression "(bVar3 != 0x4d)" ( (binary_expression "bVar3 != 0x4d" identifier != number_literal) )) && (parenthesized_expression "(lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" ( (comma_expression "lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar4 = 1" identifier = number_literal) , (comma_expression "lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar5 = lVar1" identifier = identifier) , (binary_expression "bVar3 == 0x4b" identifier == number_literal))) ))) )) (compound_statement "{\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" { (expression_statement "lVar4 = 0x400;" (assignment_expression "lVar4 = 0x400" identifier = number_literal) ;) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ;) })) (expression_statement "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);" (assignment_expression "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0)" identifier = (call_expression "strtoull(*(char **)(param_1 + 2),&local_20,0)" identifier (argument_list "(*(char **)(param_1 + 2),&local_20,0)" ( (pointer_expression "*(char **)(param_1 + 2)" * (cast_expression "(char **)(param_1 + 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) , (pointer_expression "&local_20" & identifier) , number_literal )))) ;) (if_statement "if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }" if (parenthesized_expression "((long)local_20 - *(long *)(param_1 + 2) == lVar5)" ( (binary_expression "(long)local_20 - *(long *)(param_1 + 2) == lVar5" (binary_expression "(long)local_20 - *(long *)(param_1 + 2)" (cast_expression "(long)local_20" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (pointer_expression "*(long *)(param_1 + 2)" * (cast_expression "(long *)(param_1 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) ))))) == identifier) )) (compound_statement "{\n    return uVar2 * lVar4;\n  }" { (return_statement "return uVar2 * lVar4;" return (binary_expression "uVar2 * lVar4" identifier * identifier) ;) })) (expression_statement "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value")" identifier (argument_list "("../../gold/script.cc",0xc0,"integer_value")" ( (string_literal ""../../gold/script.cc"" " string_content ") , number_literal , (string_literal ""integer_value"" " string_content ") ))) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) [ (binary_expression IDENT + LIT) ]) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT == LIT))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression & IDENT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == IDENT) )) (compound_statement { (return_statement return (binary_expression IDENT * IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "long FUN_002636d0(int *param_1)\n\n{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    \n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_002636d0(int *param_1)" (identifier "FUN_002636d0") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  long lVar1;\n  ulonglong uVar2;\n  byte bVar3;\n  long lVar4;\n  long lVar5;\n  char *local_20;\n  \n  if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }\n  lVar1 = *(long *)(param_1 + 4);\n  lVar4 = 0x100000;\n  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;\n  lVar5 = lVar1 + -1;\n  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }\n  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);\n  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }\n                    \n  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "ulonglong uVar2;" (type_identifier "ulonglong") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "char *local_20;" (primitive_type "char") (pointer_declarator "*local_20" (* "*") (identifier "local_20")) (; ";")) (if_statement "if (*param_1 != 5) {\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" (if "if") (parenthesized_expression "(*param_1 != 5)" (( "(") (binary_expression "*param_1 != 5" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/script.cc",0xad,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xad,"integer_value")" (identifier "FUN_0017c650") (argument_list "("../../gold/script.cc",0xad,"integer_value")" (( "(") (string_literal ""../../gold/script.cc"" (" """) (string_content "../../gold/script.cc") (" """)) (, ",") (number_literal "0xad") (, ",") (string_literal ""integer_value"" (" """) (string_content "integer_value") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar1 = *(long *)(param_1 + 4);" (assignment_expression "lVar1 = *(long *)(param_1 + 4)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(param_1 + 4)" (* "*") (cast_expression "(long *)(param_1 + 4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "lVar4 = 0x100000;" (assignment_expression "lVar4 = 0x100000" (identifier "lVar4") (= "=") (number_literal "0x100000")) (; ";")) (expression_statement "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;" (assignment_expression "bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" (identifier "bVar3") (= "=") (binary_expression "(*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf" (subscript_expression "(*(char **)(param_1 + 2))[lVar1 + -1]" (parenthesized_expression "(*(char **)(param_1 + 2))" (( "(") (pointer_expression "*(char **)(param_1 + 2)" (* "*") (cast_expression "(char **)(param_1 + 2)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) () ")")) ([ "[") (binary_expression "lVar1 + -1" (identifier "lVar1") (+ "+") (number_literal "-1")) (] "]")) (& "&") (number_literal "0xdf"))) (; ";")) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" (identifier "lVar5") (= "=") (binary_expression "lVar1 + -1" (identifier "lVar1") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" (if "if") (parenthesized_expression "((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b))" (( "(") (binary_expression "(bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" (parenthesized_expression "(bVar3 != 0x4d)" (( "(") (binary_expression "bVar3 != 0x4d" (identifier "bVar3") (!= "!=") (number_literal "0x4d")) () ")")) (&& "&&") (parenthesized_expression "(lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)" (( "(") (comma_expression "lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar4 = 1" (identifier "lVar4") (= "=") (number_literal "1")) (, ",") (comma_expression "lVar5 = lVar1, bVar3 == 0x4b" (assignment_expression "lVar5 = lVar1" (identifier "lVar5") (= "=") (identifier "lVar1")) (, ",") (binary_expression "bVar3 == 0x4b" (identifier "bVar3") (== "==") (number_literal "0x4b")))) () ")"))) () ")")) (compound_statement "{\n    lVar4 = 0x400;\n    lVar5 = lVar1 + -1;\n  }" ({ "{") (expression_statement "lVar4 = 0x400;" (assignment_expression "lVar4 = 0x400" (identifier "lVar4") (= "=") (number_literal "0x400")) (; ";")) (expression_statement "lVar5 = lVar1 + -1;" (assignment_expression "lVar5 = lVar1 + -1" (identifier "lVar5") (= "=") (binary_expression "lVar1 + -1" (identifier "lVar1") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (expression_statement "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);" (assignment_expression "uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0)" (identifier "uVar2") (= "=") (call_expression "strtoull(*(char **)(param_1 + 2),&local_20,0)" (identifier "strtoull") (argument_list "(*(char **)(param_1 + 2),&local_20,0)" (( "(") (pointer_expression "*(char **)(param_1 + 2)" (* "*") (cast_expression "(char **)(param_1 + 2)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (, ",") (pointer_expression "&local_20" (& "&") (identifier "local_20")) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {\n    return uVar2 * lVar4;\n  }" (if "if") (parenthesized_expression "((long)local_20 - *(long *)(param_1 + 2) == lVar5)" (( "(") (binary_expression "(long)local_20 - *(long *)(param_1 + 2) == lVar5" (binary_expression "(long)local_20 - *(long *)(param_1 + 2)" (cast_expression "(long)local_20" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_20")) (- "-") (pointer_expression "*(long *)(param_1 + 2)" (* "*") (cast_expression "(long *)(param_1 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")"))))) (== "==") (identifier "lVar5")) () ")")) (compound_statement "{\n    return uVar2 * lVar4;\n  }" ({ "{") (return_statement "return uVar2 * lVar4;" (return "return") (binary_expression "uVar2 * lVar4" (identifier "uVar2") (* "*") (identifier "lVar4")) (; ";")) (} "}"))) (expression_statement "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");" (call_expression "FUN_0017c650("../../gold/script.cc",0xc0,"integer_value")" (identifier "FUN_0017c650") (argument_list "("../../gold/script.cc",0xc0,"integer_value")" (( "(") (string_literal ""../../gold/script.cc"" (" """) (string_content "../../gold/script.cc") (" """)) (, ",") (number_literal "0xc0") (, ",") (string_literal ""integer_value"" (" """) (string_content "integer_value") (" """)) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: uint64_t integer_value(Token * this) */

uint64_t __thiscall gold::type_1::function_1(type_1 *this)

{
  size_t var_3;
  type_2 var_7;
  type_3 var_4;
  long var_8;
  size_t var_6;
  char *end;
  
  if (this->classification_ != var_1) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/script.cc",0xad,"integer_value");
  }
  var_3 = this->value_length_;
  var_8 = 0x100000;
  var_4 = this->value_[var_3 - 1] & 0xdf;
  var_6 = var_3 - 1;
  if ((var_4 != 0x4d) && (var_8 = 1, var_6 = var_3, var_4 == 0x4b)) {
    var_8 = 0x400;
    var_6 = var_3 - 1;
  }
  var_7 = var_5(this->value_,&end,0);
  if ((long)end - (long)this->value_ == var_6) {
    return var_7 * var_8;
  }
                    /* WARNING: Subroutine does not return */
  var_2("../../gold/script.cc",0xc0,"integer_value");
}


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

long MASKED(int *param_1)

{
  long lVar1;
  ulonglong uVar2;
  byte bVar3;
  long lVar4;
  long lVar5;
  char *local_20;
  
  if (*param_1 != 5) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/script.cc",0xad,"integer_value");
  }
  lVar1 = *(long *)(param_1 + 4);
  lVar4 = 0x100000;
  bVar3 = (*(char **)(param_1 + 2))[lVar1 + -1] & 0xdf;
  lVar5 = lVar1 + -1;
  if ((bVar3 != 0x4d) && (lVar4 = 1, lVar5 = lVar1, bVar3 == 0x4b)) {
    lVar4 = 0x400;
    lVar5 = lVar1 + -1;
  }
  uVar2 = strtoull(*(char **)(param_1 + 2),&local_20,0);
  if ((long)local_20 - *(long *)(param_1 + 2) == lVar5) {
    return uVar2 * lVar4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/script.cc",0xc0,"integer_value");
}

