
/* std::ctype<wchar_t>::do_scan_is(unsigned short, wchar_t const*, wchar_t const*) const */

wchar_t * __thiscall
std::ctype<wchar_t>::do_scan_is
          (ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)

{
  char cVar1;
  
  if (param_2 < param_3) {
    do {
      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);
      if (cVar1 != '\0') {
        return param_2;
      }
      param_2 = param_2 + 1;
    } while (param_2 < param_3);
  }
  return param_2;
}



undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)

{
  char cVar1;
  
  if (param_3 < param_4) {
    do {
      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);
      if (cVar1 != '\0') {
        return param_3;
      }
      param_3 = param_3 + 1;
    } while (param_3 < param_4);
  }
  return param_3;
}


PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x8
CMP RDX,RCX
JNC 0x002d7a0a
MOV R12,RCX
MOV RBX,RDX
MOV RBP,RDI
MOVZX R13D,SI
JMP 0x002d79e9
ADD RBX,0x4
CMP R12,RBX
JBE 0x002d79fc
MOV RAX,qword ptr [RBP]
MOV EDX,dword ptr [RBX]
MOV ESI,R13D
MOV RDI,RBP
CALL qword ptr [RAX + 0x10]
TEST AL,AL
JZ 0x002d79e0
ADD RSP,0x8
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
RET
MOV RBX,RDX
JMP 0x002d79fc
(translation_unit "undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)\n\n{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}\n\n" (function_definition "undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)\n\n{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" type_identifier (pointer_declarator "* FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" * (function_declarator "FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" identifier (parameter_list "(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined2 param_2" type_identifier identifier) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" if (parenthesized_expression "(param_3 < param_4)" ( (binary_expression "param_3 < param_4" identifier < identifier) )) (compound_statement "{\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" { (do_statement "do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);" do (compound_statement "{\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    }" { (expression_statement "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);" (assignment_expression "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" identifier = (call_expression "(**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_2,*param_3)" ( identifier , identifier , (pointer_expression "*param_3" * identifier) )))) ;) (if_statement "if (cVar1 != '\0') {\n        return param_3;\n      }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return param_3;\n      }" { (return_statement "return param_3;" return identifier ;) })) (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 < param_4)" ( (binary_expression "param_3 < param_4" identifier < identifier) )) ;) })) (return_statement "return param_3;" return identifier ;) })))
(translation_unit "/* std::ctype<wchar_t>::do_scan_is(unsigned short, wchar_t const*, wchar_t const*) const */\n\nwchar_t * __thiscall\nstd::ctype<wchar_t>::do_scan_is\n          (ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)\n\n{\n  char cVar1;\n  \n  if (param_2 < param_3) {\n    do {\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    } while (param_2 < param_3);\n  }\n  return param_2;\n}\n\n" comment (ERROR "wchar_t * __thiscall\nstd::ctype<wchar_t>::do_scan_is\n          (ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)" (binary_expression "wchar_t * __thiscall\nstd::ctype<wchar_t>::do_scan_is\n          (ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)" (binary_expression "wchar_t * __thiscall\nstd::ctype<wchar_t" (binary_expression "wchar_t * __thiscall" identifier * identifier) (ERROR "std::ctype" identifier : : identifier) < identifier) > (ERROR "::" : :) (call_expression "do_scan_is\n          (ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)" identifier (argument_list "(ctype<wchar_t> *this,ushort param_1,wchar_t *param_2,wchar_t *param_3)" ( (binary_expression "ctype<wchar_t> *this" (binary_expression "ctype<wchar_t" identifier < identifier) > (pointer_expression "*this" * identifier)) , (ERROR "ushort" identifier) identifier , (binary_expression "wchar_t *param_2" identifier * identifier) , (binary_expression "wchar_t *param_3" identifier * identifier) ))))) (compound_statement "{\n  char cVar1;\n  \n  if (param_2 < param_3) {\n    do {\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    } while (param_2 < param_3);\n  }\n  return param_2;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (param_2 < param_3) {\n    do {\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    } while (param_2 < param_3);\n  }" if (parenthesized_expression "(param_2 < param_3)" ( (binary_expression "param_2 < param_3" identifier < identifier) )) (compound_statement "{\n    do {\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    } while (param_2 < param_3);\n  }" { (do_statement "do {\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    } while (param_2 < param_3);" do (compound_statement "{\n      cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);\n      if (cVar1 != '\0') {\n        return param_2;\n      }\n      param_2 = param_2 + 1;\n    }" { (expression_statement "cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2);" (assignment_expression "cVar1 = (**(code **)(*(long *)this + 0x10))(this,param_1,*param_2)" identifier = (call_expression "(**(code **)(*(long *)this + 0x10))(this,param_1,*param_2)" (parenthesized_expression "(**(code **)(*(long *)this + 0x10))" ( (pointer_expression "**(code **)(*(long *)this + 0x10)" * (pointer_expression "*(code **)(*(long *)this + 0x10)" * (cast_expression "(code **)(*(long *)this + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)this + 0x10)" ( (binary_expression "*(long *)this + 0x10" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(this,param_1,*param_2)" ( identifier , identifier , (pointer_expression "*param_2" * identifier) )))) ;) (if_statement "if (cVar1 != '\0') {\n        return param_2;\n      }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return param_2;\n      }" { (return_statement "return param_2;" return identifier ;) })) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 < param_3)" ( (binary_expression "param_2 < param_3" identifier < identifier) )) ;) })) (return_statement "return param_2;" return identifier ;) }))
(translation_unit "undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)\n\n{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}\n\n" (function_definition "undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)\n\n{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" type_identifier (pointer_declarator "* FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" * (function_declarator "FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" identifier (parameter_list "(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined2 param_2" type_identifier identifier) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" if (parenthesized_expression "(param_3 < param_4)" ( (binary_expression "param_3 < param_4" identifier < identifier) )) (compound_statement "{\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" { (do_statement "do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);" do (compound_statement "{\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    }" { (expression_statement "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);" (assignment_expression "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" identifier = (call_expression "(**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_2,*param_3)" ( identifier , identifier , (pointer_expression "*param_3" * identifier) )))) ;) (if_statement "if (cVar1 != '\0') {\n        return param_3;\n      }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return param_3;\n      }" { (return_statement "return param_3;" return identifier ;) })) (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 < param_4)" ( (binary_expression "param_3 < param_4" identifier < identifier) )) ;) })) (return_statement "return param_3;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT , (pointer_expression * IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (return_statement return IDENT ;) })))
(function_definition "undefined4 * FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)\n\n{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" (type_identifier "undefined4") (pointer_declarator "* FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" (* "*") (function_declarator "FUN_002d79c0(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" (identifier "FUN_002d79c0") (parameter_list "(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined2 param_2" (type_identifier "undefined2") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 *param_4" (type_identifier "undefined4") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")")))) (compound_statement "{\n  char cVar1;\n  \n  if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }\n  return param_3;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (if_statement "if (param_3 < param_4) {\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" (if "if") (parenthesized_expression "(param_3 < param_4)" (( "(") (binary_expression "param_3 < param_4" (identifier "param_3") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n    do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);\n  }" ({ "{") (do_statement "do {\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    } while (param_3 < param_4);" (do "do") (compound_statement "{\n      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);\n      if (cVar1 != '\0') {\n        return param_3;\n      }\n      param_3 = param_3 + 1;\n    }" ({ "{") (expression_statement "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);" (assignment_expression "cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" (identifier "cVar1") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(param_1,param_2,*param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")")))) (; ";")) (if_statement "if (cVar1 != '\0') {\n        return param_3;\n      }" (if "if") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return param_3;\n      }" ({ "{") (return_statement "return param_3;" (return "return") (identifier "param_3") (; ";")) (} "}"))) (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" (identifier "param_3") (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 < param_4)" (( "(") (binary_expression "param_3 < param_4" (identifier "param_3") (< "<") (identifier "param_4")) () ")")) (; ";")) (} "}"))) (return_statement "return param_3;" (return "return") (identifier "param_3") (; ";")) (} "}")))

/* std::ctype<wchar_t>::do_scan_is(unsigned short, wchar_t const*, wchar_t const*) const */

wchar_t * __thiscall
std::ctype<wchar_t>::do_scan_is
          (ctype<wchar_t> *this,ushort param_1,wchar_t *var_1,wchar_t *var_2)

{
  char var_3;
  
  if (var_1 < var_2) {
    do {
      var_3 = (**(type_1 **)(*(long *)this + 0x10))(this,param_1,*var_1);
      if (var_3 != '\0') {
        return var_1;
      }
      var_1 = var_1 + 1;
    } while (var_1 < var_2);
  }
  return var_1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (return_statement (identifier)))))

undefined4 * MASKED(long *param_1,undefined2 param_2,undefined4 *param_3,undefined4 *param_4)

{
  char cVar1;
  
  if (param_3 < param_4) {
    do {
      cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3);
      if (cVar1 != '\0') {
        return param_3;
      }
      param_3 = param_3 + 1;
    } while (param_3 < param_4);
  }
  return param_3;
}

