
void __regparm3 codeApplyAffinity(Parse *pParse,int base,int n,char *zAff)

{
  int iVar1;
  
  if ((zAff != (char *)0x0) && (0 < n)) {
    if (*zAff == 'A') {
      iVar1 = (base + 1) - (int)zAff;
      do {
        base = (int)(zAff + iVar1);
        zAff = zAff + 1;
        n = n + -1;
        if (n == 0) {
          return;
        }
      } while (*zAff == 'A');
    }
    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {
    }
    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);
    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);
    return;
  }
  return;
}



int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)

{
  int iVar1;
  
  if ((param_4 != (char *)0x0) && (0 < param_3)) {
    if (*param_4 == 'A') {
      iVar1 = (param_2 + 1) - (int)param_4;
      do {
        param_4 = param_4 + 1;
        param_3 = param_3 + -1;
        if (param_3 == 0) {
          return iVar1;
        }
      } while (*param_4 == 'A');
    }
    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {
    }
    FUN_00065e80(param_3,0);
    iVar1 = FUN_000533f0();
    return iVar1;
  }
  return param_1;
}


PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,dword ptr [ESP + 0x10]
TEST ESI,ESI
JZ 0x00066350
MOV EBX,ECX
TEST ECX,ECX
JLE 0x00066350
CMP byte ptr [ESI],0x41
MOV EDI,EAX
JNZ 0x0006638e
LEA EAX,[EDX + 0x1]
SUB EAX,ESI
JMP 0x00066345
CMP byte ptr [ESI],0x41
JNZ 0x0006635b
LEA ECX,[ESI + EAX*0x1]
ADD ESI,0x1
SUB EBX,0x1
JNZ 0x00066340
POP EBX
POP ESI
POP EDI
RET
SUB EBX,0x1
CMP EBX,0x1
JZ 0x00066367
CMP byte ptr [ESI + EBX*0x1 + -0x1],0x41
JZ 0x00066358
SUB ESP,0x8
MOV EDX,0x5b
MOV EAX,EDI
PUSH 0x0
PUSH EBX
CALL 0x00065e80
ADD ESP,0x10
MOV ECX,ESI
MOV dword ptr [ESP + 0x10],EBX
MOV EDX,EAX
POP EBX
MOV EAX,EDI
POP ESI
POP EDI
JMP 0x000533f0
MOV ECX,EDX
JMP 0x0006635b
(translation_unit "int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)\n\n{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}\n\n" (function_definition "int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)\n\n{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00066320(int param_1,int param_2,int param_3,char *param_4)" identifier (parameter_list "(int param_1,int param_2,int param_3,char *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (if_statement "if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" if (parenthesized_expression "((param_4 != (char *)0x0) && (0 < param_3))" ( (binary_expression "(param_4 != (char *)0x0) && (0 < param_3)" (parenthesized_expression "(param_4 != (char *)0x0)" ( (binary_expression "param_4 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) ))) )) (compound_statement "{\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" { (if_statement "if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" if (parenthesized_expression "(*param_4 == 'A')" ( (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" * identifier) == (char_literal "'A'" ' character ')) )) (compound_statement "{\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" { (expression_statement "iVar1 = (param_2 + 1) - (int)param_4;" (assignment_expression "iVar1 = (param_2 + 1) - (int)param_4" identifier = (binary_expression "(param_2 + 1) - (int)param_4" (parenthesized_expression "(param_2 + 1)" ( (binary_expression "param_2 + 1" identifier + number_literal) )) - (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');" do (compound_statement "{\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      }" { (expression_statement "param_4 = param_4 + 1;" (assignment_expression "param_4 = param_4 + 1" identifier = (binary_expression "param_4 + 1" identifier + number_literal)) ;) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (if_statement "if (param_3 == 0) {\n          return iVar1;\n        }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n          return iVar1;\n        }" { (return_statement "return iVar1;" return identifier ;) })) }) while (parenthesized_expression "(*param_4 == 'A')" ( (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" * identifier) == (char_literal "'A'" ' character ')) )) ;) })) (for_statement "for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }" for ( ; (parenthesized_expression "(param_3 != 1 && (param_4[param_3 + -1] == 'A'))" ( (binary_expression "param_3 != 1 && (param_4[param_3 + -1] == 'A')" (binary_expression "param_3 != 1" identifier != number_literal) && (parenthesized_expression "(param_4[param_3 + -1] == 'A')" ( (binary_expression "param_4[param_3 + -1] == 'A'" (subscript_expression "param_4[param_3 + -1]" identifier [ (binary_expression "param_3 + -1" identifier + number_literal) ]) == (char_literal "'A'" ' character ')) ))) )) ; (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ) (compound_statement "{\n    }" { })) (expression_statement "FUN_00065e80(param_3,0);" (call_expression "FUN_00065e80(param_3,0)" identifier (argument_list "(param_3,0)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = FUN_000533f0();" (assignment_expression "iVar1 = FUN_000533f0()" identifier = (call_expression "FUN_000533f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar1;" return identifier ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "void __regparm3 codeApplyAffinity(Parse *pParse,int base,int n,char *zAff)\n\n{\n  int iVar1;\n  \n  if ((zAff != (char *)0x0) && (0 < n)) {\n    if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }\n    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }\n    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);\n    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);\n    return;\n  }\n  return;\n}\n\n" (function_definition "void __regparm3 codeApplyAffinity(Parse *pParse,int base,int n,char *zAff)\n\n{\n  int iVar1;\n  \n  if ((zAff != (char *)0x0) && (0 < n)) {\n    if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }\n    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }\n    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);\n    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);\n    return;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "codeApplyAffinity(Parse *pParse,int base,int n,char *zAff)" identifier (parameter_list "(Parse *pParse,int base,int n,char *zAff)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "int base" primitive_type identifier) , (parameter_declaration "int n" primitive_type identifier) , (parameter_declaration "char *zAff" primitive_type (pointer_declarator "*zAff" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  \n  if ((zAff != (char *)0x0) && (0 < n)) {\n    if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }\n    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }\n    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);\n    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (if_statement "if ((zAff != (char *)0x0) && (0 < n)) {\n    if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }\n    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }\n    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);\n    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);\n    return;\n  }" if (parenthesized_expression "((zAff != (char *)0x0) && (0 < n))" ( (binary_expression "(zAff != (char *)0x0) && (0 < n)" (parenthesized_expression "(zAff != (char *)0x0)" ( (binary_expression "zAff != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < n)" ( (binary_expression "0 < n" number_literal < identifier) ))) )) (compound_statement "{\n    if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }\n    for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }\n    iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);\n    sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);\n    return;\n  }" { (if_statement "if (*zAff == 'A') {\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }" if (parenthesized_expression "(*zAff == 'A')" ( (binary_expression "*zAff == 'A'" (pointer_expression "*zAff" * identifier) == (char_literal "'A'" ' character ')) )) (compound_statement "{\n      iVar1 = (base + 1) - (int)zAff;\n      do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');\n    }" { (expression_statement "iVar1 = (base + 1) - (int)zAff;" (assignment_expression "iVar1 = (base + 1) - (int)zAff" identifier = (binary_expression "(base + 1) - (int)zAff" (parenthesized_expression "(base + 1)" ( (binary_expression "base + 1" identifier + number_literal) )) - (cast_expression "(int)zAff" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      } while (*zAff == 'A');" do (compound_statement "{\n        base = (int)(zAff + iVar1);\n        zAff = zAff + 1;\n        n = n + -1;\n        if (n == 0) {\n          return;\n        }\n      }" { (expression_statement "base = (int)(zAff + iVar1);" (assignment_expression "base = (int)(zAff + iVar1)" identifier = (cast_expression "(int)(zAff + iVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(zAff + iVar1)" ( (binary_expression "zAff + iVar1" identifier + identifier) )))) ;) (expression_statement "zAff = zAff + 1;" (assignment_expression "zAff = zAff + 1" identifier = (binary_expression "zAff + 1" identifier + number_literal)) ;) (expression_statement "n = n + -1;" (assignment_expression "n = n + -1" identifier = (binary_expression "n + -1" identifier + number_literal)) ;) (if_statement "if (n == 0) {\n          return;\n        }" if (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "(*zAff == 'A')" ( (binary_expression "*zAff == 'A'" (pointer_expression "*zAff" * identifier) == (char_literal "'A'" ' character ')) )) ;) })) (for_statement "for (; (n != 1 && (zAff[n + -1] == 'A')); n = n + -1) {\n    }" for ( ; (parenthesized_expression "(n != 1 && (zAff[n + -1] == 'A'))" ( (binary_expression "n != 1 && (zAff[n + -1] == 'A')" (binary_expression "n != 1" identifier != number_literal) && (parenthesized_expression "(zAff[n + -1] == 'A')" ( (binary_expression "zAff[n + -1] == 'A'" (subscript_expression "zAff[n + -1]" identifier [ (binary_expression "n + -1" identifier + number_literal) ]) == (char_literal "'A'" ' character ')) ))) )) ; (assignment_expression "n = n + -1" identifier = (binary_expression "n + -1" identifier + number_literal)) ) (compound_statement "{\n    }" { })) (expression_statement "iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0);" (assignment_expression "iVar1 = sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0)" identifier = (call_expression "sqlite3VdbeAddOp3((Vdbe *)pParse,0x5b,base,n,0)" identifier (argument_list "((Vdbe *)pParse,0x5b,base,n,0)" ( (cast_expression "(Vdbe *)pParse" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal , identifier , identifier , number_literal )))) ;) (expression_statement "sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n);" (call_expression "sqlite3VdbeChangeP4((Vdbe *)pParse,iVar1,zAff,n)" identifier (argument_list "((Vdbe *)pParse,iVar1,zAff,n)" ( (cast_expression "(Vdbe *)pParse" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)\n\n{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}\n\n" (function_definition "int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)\n\n{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00066320(int param_1,int param_2,int param_3,char *param_4)" identifier (parameter_list "(int param_1,int param_2,int param_3,char *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (if_statement "if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" if (parenthesized_expression "((param_4 != (char *)0x0) && (0 < param_3))" ( (binary_expression "(param_4 != (char *)0x0) && (0 < param_3)" (parenthesized_expression "(param_4 != (char *)0x0)" ( (binary_expression "param_4 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) ))) )) (compound_statement "{\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" { (if_statement "if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" if (parenthesized_expression "(*param_4 == 'A')" ( (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" * identifier) == (char_literal "'A'" ' character ')) )) (compound_statement "{\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" { (expression_statement "iVar1 = (param_2 + 1) - (int)param_4;" (assignment_expression "iVar1 = (param_2 + 1) - (int)param_4" identifier = (binary_expression "(param_2 + 1) - (int)param_4" (parenthesized_expression "(param_2 + 1)" ( (binary_expression "param_2 + 1" identifier + number_literal) )) - (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');" do (compound_statement "{\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      }" { (expression_statement "param_4 = param_4 + 1;" (assignment_expression "param_4 = param_4 + 1" identifier = (binary_expression "param_4 + 1" identifier + number_literal)) ;) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (if_statement "if (param_3 == 0) {\n          return iVar1;\n        }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n          return iVar1;\n        }" { (return_statement "return iVar1;" return identifier ;) })) }) while (parenthesized_expression "(*param_4 == 'A')" ( (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" * identifier) == (char_literal "'A'" ' character ')) )) ;) })) (for_statement "for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }" for ( ; (parenthesized_expression "(param_3 != 1 && (param_4[param_3 + -1] == 'A'))" ( (binary_expression "param_3 != 1 && (param_4[param_3 + -1] == 'A')" (binary_expression "param_3 != 1" identifier != number_literal) && (parenthesized_expression "(param_4[param_3 + -1] == 'A')" ( (binary_expression "param_4[param_3 + -1] == 'A'" (subscript_expression "param_4[param_3 + -1]" identifier [ (binary_expression "param_3 + -1" identifier + number_literal) ]) == (char_literal "'A'" ' character ')) ))) )) ; (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ) (compound_statement "{\n    }" { })) (expression_statement "FUN_00065e80(param_3,0);" (call_expression "FUN_00065e80(param_3,0)" identifier (argument_list "(param_3,0)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = FUN_000533f0();" (assignment_expression "iVar1 = FUN_000533f0()" identifier = (call_expression "FUN_000533f0()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar1;" return identifier ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) ;) })) (for_statement for ( ; (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) == (char_literal ' character ')) ))) )) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })) (return_statement return IDENT ;) })))
(function_definition "int __regparm3 FUN_00066320(int param_1,int param_2,int param_3,char *param_4)\n\n{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00066320(int param_1,int param_2,int param_3,char *param_4)" (identifier "FUN_00066320") (parameter_list "(int param_1,int param_2,int param_3,char *param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "char *param_4" (primitive_type "char") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int iVar1;\n  \n  if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }\n  return param_1;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (if_statement "if ((param_4 != (char *)0x0) && (0 < param_3)) {\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" (if "if") (parenthesized_expression "((param_4 != (char *)0x0) && (0 < param_3))" (( "(") (binary_expression "(param_4 != (char *)0x0) && (0 < param_3)" (parenthesized_expression "(param_4 != (char *)0x0)" (( "(") (binary_expression "param_4 != (char *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")"))) () ")")) (compound_statement "{\n    if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }\n    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }\n    FUN_00065e80(param_3,0);\n    iVar1 = FUN_000533f0();\n    return iVar1;\n  }" ({ "{") (if_statement "if (*param_4 == 'A') {\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" (if "if") (parenthesized_expression "(*param_4 == 'A')" (( "(") (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (== "==") (char_literal "'A'" (' "'") (character "A") (' "'"))) () ")")) (compound_statement "{\n      iVar1 = (param_2 + 1) - (int)param_4;\n      do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');\n    }" ({ "{") (expression_statement "iVar1 = (param_2 + 1) - (int)param_4;" (assignment_expression "iVar1 = (param_2 + 1) - (int)param_4" (identifier "iVar1") (= "=") (binary_expression "(param_2 + 1) - (int)param_4" (parenthesized_expression "(param_2 + 1)" (( "(") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) () ")")) (- "-") (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4")))) (; ";")) (do_statement "do {\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      } while (*param_4 == 'A');" (do "do") (compound_statement "{\n        param_4 = param_4 + 1;\n        param_3 = param_3 + -1;\n        if (param_3 == 0) {\n          return iVar1;\n        }\n      }" ({ "{") (expression_statement "param_4 = param_4 + 1;" (assignment_expression "param_4 = param_4 + 1" (identifier "param_4") (= "=") (binary_expression "param_4 + 1" (identifier "param_4") (+ "+") (number_literal "1"))) (; ";")) (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"))) (; ";")) (if_statement "if (param_3 == 0) {\n          return iVar1;\n        }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return iVar1;\n        }" ({ "{") (return_statement "return iVar1;" (return "return") (identifier "iVar1") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(*param_4 == 'A')" (( "(") (binary_expression "*param_4 == 'A'" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (== "==") (char_literal "'A'" (' "'") (character "A") (' "'"))) () ")")) (; ";")) (} "}"))) (for_statement "for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {\n    }" (for "for") (( "(") (; ";") (parenthesized_expression "(param_3 != 1 && (param_4[param_3 + -1] == 'A'))" (( "(") (binary_expression "param_3 != 1 && (param_4[param_3 + -1] == 'A')" (binary_expression "param_3 != 1" (identifier "param_3") (!= "!=") (number_literal "1")) (&& "&&") (parenthesized_expression "(param_4[param_3 + -1] == 'A')" (( "(") (binary_expression "param_4[param_3 + -1] == 'A'" (subscript_expression "param_4[param_3 + -1]" (identifier "param_4") ([ "[") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1")) (] "]")) (== "==") (char_literal "'A'" (' "'") (character "A") (' "'"))) () ")"))) () ")")) (; ";") (assignment_expression "param_3 = param_3 + -1" (identifier "param_3") (= "=") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n    }" ({ "{") (} "}"))) (expression_statement "FUN_00065e80(param_3,0);" (call_expression "FUN_00065e80(param_3,0)" (identifier "FUN_00065e80") (argument_list "(param_3,0)" (( "(") (identifier "param_3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar1 = FUN_000533f0();" (assignment_expression "iVar1 = FUN_000533f0()" (identifier "iVar1") (= "=") (call_expression "FUN_000533f0()" (identifier "FUN_000533f0") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return iVar1;" (return "return") (identifier "iVar1") (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

void __regparm3 function_1(type_1 *pParse,int var_3,int var_2,char *var_1)

{
  int var_4;
  
  if ((var_1 != (char *)0x0) && (0 < var_2)) {
    if (*var_1 == 'A') {
      var_4 = (var_3 + 1) - (int)var_1;
      do {
        var_3 = (int)(var_1 + var_4);
        var_1 = var_1 + 1;
        var_2 = var_2 + -1;
        if (var_2 == 0) {
          return;
        }
      } while (*var_1 == 'A');
    }
    for (; (var_2 != 1 && (var_1[var_2 + -1] == 'A')); var_2 = var_2 + -1) {
    }
    var_4 = var_5((type_2 *)pParse,0x5b,var_3,var_2,0);
    var_6((type_2 *)pParse,var_4,var_1,var_2);
    return;
  }
  return;
}


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

int __regparm3 MASKED(int param_1,int param_2,int param_3,char *param_4)

{
  int iVar1;
  
  if ((param_4 != (char *)0x0) && (0 < param_3)) {
    if (*param_4 == 'A') {
      iVar1 = (param_2 + 1) - (int)param_4;
      do {
        param_4 = param_4 + 1;
        param_3 = param_3 + -1;
        if (param_3 == 0) {
          return iVar1;
        }
      } while (*param_4 == 'A');
    }
    for (; (param_3 != 1 && (param_4[param_3 + -1] == 'A')); param_3 = param_3 + -1) {
    }
    FUN_00065e80(param_3,0);
    iVar1 = FUN_000533f0();
    return iVar1;
  }
  return param_1;
}

