/[pcre]/code/trunk/pcre_jit_test.c
ViewVC logotype

Diff of /code/trunk/pcre_jit_test.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1112 by chpe, Tue Oct 16 15:57:09 2012 UTC revision 1139 by zherczeg, Fri Oct 19 09:05:46 2012 UTC
# Line 95  int main(void) Line 95  int main(void)
95  #elif defined SUPPORT_PCRE16  #elif defined SUPPORT_PCRE16
96          pcre16_config(PCRE_CONFIG_JIT, &jit);          pcre16_config(PCRE_CONFIG_JIT, &jit);
97  #elif defined SUPPORT_PCRE32  #elif defined SUPPORT_PCRE32
98          pcre32_config(PCRE_CONFIG_JIT, &jit);          pcre32_config(PCRE_CONFIG_JIT, &jit);
99  #endif  #endif
100          if (!jit) {          if (!jit) {
101                  printf("JIT must be enabled to run pcre_jit_test\n");                  printf("JIT must be enabled to run pcre_jit_test\n");
# Line 724  static const unsigned char *tables(int m Line 724  static const unsigned char *tables(int m
724          pcre16 *regex;          pcre16 *regex;
725          PCRE_UCHAR16 null_str[1] = { 0 };          PCRE_UCHAR16 null_str[1] = { 0 };
726  #elif defined SUPPORT_PCRE32  #elif defined SUPPORT_PCRE32
727          pcre32 *regex;          pcre32 *regex;
728          PCRE_UCHAR32 null_str[1] = { 0 };          PCRE_UCHAR32 null_str[1] = { 0 };
729  #endif  #endif
730    
731          if (mode) {          if (mode) {
# Line 752  static const unsigned char *tables(int m Line 752  static const unsigned char *tables(int m
752                  pcre16_free(regex);                  pcre16_free(regex);
753          }          }
754  #elif defined SUPPORT_PCRE32  #elif defined SUPPORT_PCRE32
755          regex = pcre32_compile(null_str, 0, &errorptr, &erroroffset, NULL);          regex = pcre32_compile(null_str, 0, &errorptr, &erroroffset, NULL);
756          if (regex) {          if (regex) {
757                  pcre32_fullinfo(regex, NULL, PCRE_INFO_DEFAULT_TABLES, &default_tables);                  pcre32_fullinfo(regex, NULL, PCRE_INFO_DEFAULT_TABLES, &default_tables);
758                  pcre32_free(regex);                  pcre32_free(regex);
759          }          }
760  #endif  #endif
761          /* Shouldn't ever happen. */          /* Shouldn't ever happen. */
762          if (!default_tables)          if (!default_tables)
# Line 789  static pcre16_jit_stack* callback16(void Line 789  static pcre16_jit_stack* callback16(void
789  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
790  static pcre32_jit_stack* callback32(void *arg)  static pcre32_jit_stack* callback32(void *arg)
791  {  {
792          return (pcre32_jit_stack *)arg;          return (pcre32_jit_stack *)arg;
793  }  }
794  #endif  #endif
795    
# Line 834  static void setstack16(pcre16_extra *ext Line 834  static void setstack16(pcre16_extra *ext
834  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
835  static void setstack32(pcre32_extra *extra)  static void setstack32(pcre32_extra *extra)
836  {  {
837          static pcre32_jit_stack *stack;          static pcre32_jit_stack *stack;
838    
839          if (!extra) {          if (!extra) {
840                  if (stack)                  if (stack)
841                          pcre32_jit_stack_free(stack);                          pcre32_jit_stack_free(stack);
842                  stack = NULL;                  stack = NULL;
843                  return;                  return;
844          }          }
845    
846          if (!stack)          if (!stack)
847                  stack = pcre32_jit_stack_alloc(1, 1024 * 1024);                  stack = pcre32_jit_stack_alloc(1, 1024 * 1024);
848          /* Extra can be NULL. */          /* Extra can be NULL. */
849          pcre32_assign_jit_stack(extra, callback32, stack);          pcre32_assign_jit_stack(extra, callback32, stack);
850  }  }
851  #endif /* SUPPORT_PCRE8 */  #endif /* SUPPORT_PCRE8 */
852    
# Line 855  static void setstack32(pcre32_extra *ext Line 855  static void setstack32(pcre32_extra *ext
855  static int convert_utf8_to_utf16(const char *input, PCRE_UCHAR16 *output, int *offsetmap, int max_length)  static int convert_utf8_to_utf16(const char *input, PCRE_UCHAR16 *output, int *offsetmap, int max_length)
856  {  {
857          unsigned char *iptr = (unsigned char*)input;          unsigned char *iptr = (unsigned char*)input;
858          PCRE_UCHAR16 *optr = output;          PCRE_UCHAR16 *optr = output;
859          unsigned int c;          unsigned int c;
860    
861          if (max_length == 0)          if (max_length == 0)
# Line 926  static int regtest_offsetmap16[REGTEST_M Line 926  static int regtest_offsetmap16[REGTEST_M
926    
927  static int convert_utf8_to_utf32(const char *input, PCRE_UCHAR32 *output, int *offsetmap, int max_length)  static int convert_utf8_to_utf32(const char *input, PCRE_UCHAR32 *output, int *offsetmap, int max_length)
928  {  {
929          unsigned char *iptr = (unsigned char*)input;          unsigned char *iptr = (unsigned char*)input;
930          PCRE_UCHAR32 *optr = output;          PCRE_UCHAR32 *optr = output;
931          unsigned int c;          unsigned int c;
932    
933          if (max_length == 0)          if (max_length == 0)
934                  return 0;                  return 0;
935    
936          while (*iptr && max_length > 1) {          while (*iptr && max_length > 1) {
937                  c = 0;                  c = 0;
938                  if (offsetmap)                  if (offsetmap)
939                          *offsetmap++ = (int)(iptr - (unsigned char*)input);                          *offsetmap++ = (int)(iptr - (unsigned char*)input);
940    
941                  if (!(*iptr & 0x80))                  if (!(*iptr & 0x80))
942                          c = *iptr++;                          c = *iptr++;
943                  else if (!(*iptr & 0x20)) {                  else if (!(*iptr & 0x20)) {
944                          c = ((iptr[0] & 0x1f) << 6) | (iptr[1] & 0x3f);                          c = ((iptr[0] & 0x1f) << 6) | (iptr[1] & 0x3f);
945                          iptr += 2;                          iptr += 2;
946                  } else if (!(*iptr & 0x10)) {                  } else if (!(*iptr & 0x10)) {
947                          c = ((iptr[0] & 0x0f) << 12) | ((iptr[1] & 0x3f) << 6) | (iptr[2] & 0x3f);                          c = ((iptr[0] & 0x0f) << 12) | ((iptr[1] & 0x3f) << 6) | (iptr[2] & 0x3f);
948                          iptr += 3;                          iptr += 3;
949                  } else if (!(*iptr & 0x08)) {                  } else if (!(*iptr & 0x08)) {
950                          c = ((iptr[0] & 0x07) << 18) | ((iptr[1] & 0x3f) << 12) | ((iptr[2] & 0x3f) << 6) | (iptr[3] & 0x3f);                          c = ((iptr[0] & 0x07) << 18) | ((iptr[1] & 0x3f) << 12) | ((iptr[2] & 0x3f) << 6) | (iptr[3] & 0x3f);
951                          iptr += 4;                          iptr += 4;
952                  }                  }
953    
954                  *optr++ = c;                  *optr++ = c;
955                  max_length--;                  max_length--;
956          }          }
957          if (offsetmap)          if (offsetmap)
958                  *offsetmap = (int)(iptr - (unsigned char*)input);                  *offsetmap = (int)(iptr - (unsigned char*)input);
959          *optr = 0;          *optr = 0;
960          return (int)(optr - output);          return (int)(optr - output);
961  }  }
962    
963  static int copy_char8_to_char32(const char *input, PCRE_UCHAR32 *output, int max_length)  static int copy_char8_to_char32(const char *input, PCRE_UCHAR32 *output, int max_length)
964  {  {
965          unsigned char *iptr = (unsigned char*)input;          unsigned char *iptr = (unsigned char*)input;
966          PCRE_UCHAR32 *optr = output;          PCRE_UCHAR32 *optr = output;
967    
968          if (max_length == 0)          if (max_length == 0)
969                  return 0;                  return 0;
970    
971          while (*iptr && max_length > 1) {          while (*iptr && max_length > 1) {
972                  *optr++ = *iptr++;                  *optr++ = *iptr++;
973                  max_length--;                  max_length--;
974          }          }
975          *optr = '\0';          *optr = '\0';
976          return (int)(optr - output);          return (int)(optr - output);
977  }  }
978    
979  #define REGTEST_MAX_LENGTH32 4096  #define REGTEST_MAX_LENGTH32 4096
# Line 1005  static int regression_tests(void) Line 1005  static int regression_tests(void)
1005          int successful_row = 0;          int successful_row = 0;
1006          int counter = 0;          int counter = 0;
1007          int study_mode;          int study_mode;
1008          int utf = 0, ucp = 0;          int utf = 0, ucp = 0;
1009          int disabled_flags = 0;          int disabled_flags = 0;
1010  #ifdef SUPPORT_PCRE8  #ifdef SUPPORT_PCRE8
1011          pcre *re8;          pcre *re8;
1012          pcre_extra *extra8;          pcre_extra *extra8;
# Line 1027  static int regression_tests(void) Line 1027  static int regression_tests(void)
1027          int length16;          int length16;
1028  #endif  #endif
1029  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1030          pcre32 *re32;          pcre32 *re32;
1031          pcre32_extra *extra32;          pcre32_extra *extra32;
1032          pcre32_extra dummy_extra32;          pcre32_extra dummy_extra32;
1033          int ovector32_1[32];          int ovector32_1[32];
1034          int ovector32_2[32];          int ovector32_2[32];
1035          int return_value32[2];          int return_value32[2];
1036          PCRE_UCHAR32 *mark32_1, *mark32_2;          PCRE_UCHAR32 *mark32_1, *mark32_2;
1037          int length32;          int length32;
1038  #endif  #endif
1039    
1040          /* This test compares the behaviour of interpreter and JIT. Although disabling          /* This test compares the behaviour of interpreter and JIT. Although disabling
# Line 1046  static int regression_tests(void) Line 1046  static int regression_tests(void)
1046  #elif defined SUPPORT_PCRE16  #elif defined SUPPORT_PCRE16
1047          pcre16_config(PCRE_CONFIG_JITTARGET, &cpu_info);          pcre16_config(PCRE_CONFIG_JITTARGET, &cpu_info);
1048  #elif defined SUPPORT_PCRE32  #elif defined SUPPORT_PCRE32
1049          pcre32_config(PCRE_CONFIG_JITTARGET, &cpu_info);          pcre32_config(PCRE_CONFIG_JITTARGET, &cpu_info);
1050  #endif  #endif
1051    
1052          printf("Running JIT regression tests\n");          printf("Running JIT regression tests\n");
# Line 1056  static int regression_tests(void) Line 1056  static int regression_tests(void)
1056          pcre_config(PCRE_CONFIG_UTF8, &utf);          pcre_config(PCRE_CONFIG_UTF8, &utf);
1057          pcre_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);          pcre_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);
1058  #elif defined SUPPORT_PCRE16  #elif defined SUPPORT_PCRE16
1059          pcre16_config(PCRE_CONFIG_UTF16, &utf);          pcre16_config(PCRE_CONFIG_UTF16, &utf);
1060          pcre16_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);          pcre16_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);
1061  #elif defined SUPPORT_PCRE16  #elif defined SUPPORT_PCRE16
1062          pcre32_config(PCRE_CONFIG_UTF32, &utf);          pcre32_config(PCRE_CONFIG_UTF32, &utf);
1063          pcre32_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);          pcre32_config(PCRE_CONFIG_UNICODE_PROPERTIES, &ucp);
1064  #endif  #endif
1065    
1066          if (!utf)          if (!utf)
# Line 1074  static int regression_tests(void) Line 1074  static int regression_tests(void)
1074          printf("  in 16 bit mode with UTF-16 %s and ucp %s:\n", utf ? "enabled" : "disabled", ucp ? "enabled" : "disabled");          printf("  in 16 bit mode with UTF-16 %s and ucp %s:\n", utf ? "enabled" : "disabled", ucp ? "enabled" : "disabled");
1075  #endif  #endif
1076  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1077          printf("  in 32 bit mode with UTF-32 %s and ucp %s:\n", utf ? "enabled" : "disabled", ucp ? "enabled" : "disabled");          printf("  in 32 bit mode with UTF-32 %s and ucp %s:\n", utf ? "enabled" : "disabled", ucp ? "enabled" : "disabled");
1078  #endif  #endif
1079    
1080          while (current->pattern) {          while (current->pattern) {
# Line 1150  static int regression_tests(void) Line 1150  static int regression_tests(void)
1150                          }                          }
1151                          extra16->flags |= PCRE_EXTRA_MARK;                          extra16->flags |= PCRE_EXTRA_MARK;
1152                  } else if (((utf && ucp) || is_ascii_pattern) && !(current->start_offset & F_NO16))                  } else if (((utf && ucp) || is_ascii_pattern) && !(current->start_offset & F_NO16))
1153                          printf("\n16 bit: Cannot compile pattern \"%s\": %s\n", current->pattern, error);                          printf("\n16 bit: Cannot compile pattern \"%s\": %s\n", current->pattern, error);
1154  #endif  #endif
1155  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1156                  if ((current->flags & PCRE_UTF32) || (current->start_offset & F_FORCECONV))                  if ((current->flags & PCRE_UTF32) || (current->start_offset & F_FORCECONV))
1157                          convert_utf8_to_utf32(current->pattern, regtest_buf32, NULL, REGTEST_MAX_LENGTH32);                          convert_utf8_to_utf32(current->pattern, regtest_buf32, NULL, REGTEST_MAX_LENGTH32);
1158                  else                  else
1159                          copy_char8_to_char32(current->pattern, regtest_buf32, REGTEST_MAX_LENGTH32);                          copy_char8_to_char32(current->pattern, regtest_buf32, REGTEST_MAX_LENGTH32);
1160    
1161                  re32 = NULL;                  re32 = NULL;
1162                  if (!(current->start_offset & F_NO32))                  if (!(current->start_offset & F_NO32))
1163                          re32 = pcre32_compile(regtest_buf32,                          re32 = pcre32_compile(regtest_buf32,
1164                                  current->flags & ~(PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD | disabled_flags),                                  current->flags & ~(PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD | disabled_flags),
1165                                  &error, &err_offs, tables(0));                                  &error, &err_offs, tables(0));
1166    
1167                  extra32 = NULL;                  extra32 = NULL;
1168                  if (re32) {                  if (re32) {
1169                          error = NULL;                          error = NULL;
1170                          extra32 = pcre32_study(re32, study_mode, &error);                          extra32 = pcre32_study(re32, study_mode, &error);
1171                          if (!extra32) {                          if (!extra32) {
1172                                  printf("\n32 bit: Cannot study pattern: %s\n", current->pattern);                                  printf("\n32 bit: Cannot study pattern: %s\n", current->pattern);
1173                                  pcre32_free(re32);                                  pcre32_free(re32);
1174                                  re32 = NULL;                                  re32 = NULL;
1175                          }                          }
1176                          if (!(extra32->flags & PCRE_EXTRA_EXECUTABLE_JIT)) {                          if (!(extra32->flags & PCRE_EXTRA_EXECUTABLE_JIT)) {
1177                                  printf("\n32 bit: JIT compiler does not support: %s\n", current->pattern);                                  printf("\n32 bit: JIT compiler does not support: %s\n", current->pattern);
1178                                  pcre32_free_study(extra32);                                  pcre32_free_study(extra32);
1179                                  pcre32_free(re32);                                  pcre32_free(re32);
1180                                  re32 = NULL;                                  re32 = NULL;
1181                          }                          }
1182                          extra32->flags |= PCRE_EXTRA_MARK;                          extra32->flags |= PCRE_EXTRA_MARK;
1183                  } else if (((utf && ucp) || is_ascii_pattern) && !(current->start_offset & F_NO32))                  } else if (((utf && ucp) || is_ascii_pattern) && !(current->start_offset & F_NO32))
1184                          printf("\n32 bit: Cannot compile pattern \"%s\": %s\n", current->pattern, error);                          printf("\n32 bit: Cannot compile pattern \"%s\": %s\n", current->pattern, error);
1185  #endif  #endif
1186    
1187                  counter++;                  counter++;
# Line 1193  static int regression_tests(void) Line 1193  static int regression_tests(void)
1193                          setstack16(NULL);                          setstack16(NULL);
1194  #endif  #endif
1195  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1196                          setstack32(NULL);                          setstack32(NULL);
1197  #endif  #endif
1198                  }                  }
1199    
# Line 1246  static int regression_tests(void) Line 1246  static int regression_tests(void)
1246  #endif  #endif
1247    
1248  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1249                  return_value32[0] = -1000;                  return_value32[0] = -1000;
1250                  return_value32[1] = -1000;                  return_value32[1] = -1000;
1251                  for (i = 0; i < 32; ++i)                  for (i = 0; i < 32; ++i)
1252                          ovector32_1[i] = -2;                          ovector32_1[i] = -2;
1253                  for (i = 0; i < 32; ++i)                  for (i = 0; i < 32; ++i)
1254                          ovector32_2[i] = -2;                          ovector32_2[i] = -2;
1255                  if (re32) {                  if (re32) {
1256                          mark32_1 = NULL;                          mark32_1 = NULL;
1257                          mark32_2 = NULL;                          mark32_2 = NULL;
1258                          setstack32(extra32);                          setstack32(extra32);
1259                          if ((current->flags & PCRE_UTF32) || (current->start_offset & F_FORCECONV))                          if ((current->flags & PCRE_UTF32) || (current->start_offset & F_FORCECONV))
1260                                  length32 = convert_utf8_to_utf32(current->input, regtest_buf32, regtest_offsetmap32, REGTEST_MAX_LENGTH32);                                  length32 = convert_utf8_to_utf32(current->input, regtest_buf32, regtest_offsetmap32, REGTEST_MAX_LENGTH32);
1261                          else                          else
1262                                  length32 = copy_char8_to_char32(current->input, regtest_buf32, REGTEST_MAX_LENGTH32);                                  length32 = copy_char8_to_char32(current->input, regtest_buf32, REGTEST_MAX_LENGTH32);
1263                          extra32->mark = &mark32_1;                          extra32->mark = &mark32_1;
1264                          return_value32[0] = pcre32_exec(re32, extra32, regtest_buf32, length32, current->start_offset & OFFSET_MASK,                          return_value32[0] = pcre32_exec(re32, extra32, regtest_buf32, length32, current->start_offset & OFFSET_MASK,
1265                                  current->flags & (PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD), ovector32_1, 32);                                  current->flags & (PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD), ovector32_1, 32);
1266                          memset(&dummy_extra32, 0, sizeof(pcre32_extra));                          memset(&dummy_extra32, 0, sizeof(pcre32_extra));
1267                          dummy_extra32.flags = PCRE_EXTRA_MARK;                          dummy_extra32.flags = PCRE_EXTRA_MARK;
1268                          dummy_extra32.mark = &mark32_2;                          dummy_extra32.mark = &mark32_2;
1269                          return_value32[1] = pcre32_exec(re32, &dummy_extra32, regtest_buf32, length32, current->start_offset & OFFSET_MASK,                          return_value32[1] = pcre32_exec(re32, &dummy_extra32, regtest_buf32, length32, current->start_offset & OFFSET_MASK,
1270                                  current->flags & (PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD), ovector32_2, 32);                                  current->flags & (PCRE_NOTBOL | PCRE_NOTEOL | PCRE_NOTEMPTY | PCRE_NOTEMPTY_ATSTART | PCRE_PARTIAL_SOFT | PCRE_PARTIAL_HARD), ovector32_2, 32);
1271                  }                  }
1272  #endif  #endif
1273    
1274                  /* printf("[%d-%d-%d|%d-%d|%d-%d|%d-%d]%s",                  /* printf("[%d-%d-%d|%d-%d|%d-%d|%d-%d]%s",
1275                   *        return_value8[0], return_value16[0],                          return_value8[0], return_value16[0],
1276                   *        ovector8_1[0], ovector8_1[1],                          ovector8_1[0], ovector8_1[1],
1277                   *        ovector16_1[0], ovector16_1[1],                          ovector16_1[0], ovector16_1[1],
1278                   *        ovector32_1[0], ovector32_1[1],                          ovector32_1[0], ovector32_1[1],
1279                   *        (current->flags & PCRE_CASELESS) ? "C" : ""); */                          (current->flags & PCRE_CASELESS) ? "C" : ""); */
1280    
1281                  /* If F_DIFF is set, just run the test, but do not compare the results.                  /* If F_DIFF is set, just run the test, but do not compare the results.
1282                  Segfaults can still be captured. */                  Segfaults can still be captured. */
# Line 1285  static int regression_tests(void) Line 1285  static int regression_tests(void)
1285                  if (!(current->start_offset & F_DIFF)) {                  if (!(current->start_offset & F_DIFF)) {
1286  #if defined SUPPORT_UTF && ((defined(SUPPORT_PCRE8) + defined(SUPPORT_PCRE16) + defined(SUPPORT_PCRE32)) >= 2)  #if defined SUPPORT_UTF && ((defined(SUPPORT_PCRE8) + defined(SUPPORT_PCRE16) + defined(SUPPORT_PCRE32)) >= 2)
1287                          if (!(current->start_offset & F_FORCECONV)) {                          if (!(current->start_offset & F_FORCECONV)) {
1288                                  int return_value;                                  int return_value;
1289    
1290                                  /* All results must be the same. */                                  /* All results must be the same. */
1291  #ifdef SUPPORT_PCRE8  #ifdef SUPPORT_PCRE8
1292                                  if ((return_value = return_value8[0]) != return_value8[1]) {                                  if ((return_value = return_value8[0]) != return_value8[1]) {
1293                                          printf("\n8 bit: Return value differs(J8:%d,I8:%d): [%d] '%s' @ '%s'\n",                                          printf("\n8 bit: Return value differs(J8:%d,I8:%d): [%d] '%s' @ '%s'\n",
1294                                                  return_value8[0], return_value8[1], total, current->pattern, current->input);                                                  return_value8[0], return_value8[1], total, current->pattern, current->input);
1295                                          is_successful = 0;                                          is_successful = 0;
1296                                  } else                                  } else
1297  #endif  #endif
1298  #ifdef SUPPORT_PCRE16  #ifdef SUPPORT_PCRE16
1299                                  if ((return_value = return_value16[0]) != return_value16[1]) {                                  if ((return_value = return_value16[0]) != return_value16[1]) {
1300                                          printf("\n16 bit: Return value differs(J16:%d,I16:%d): [%d] '%s' @ '%s'\n",                                          printf("\n16 bit: Return value differs(J16:%d,I16:%d): [%d] '%s' @ '%s'\n",
1301                                                  return_value16[0], return_value16[1], total, current->pattern, current->input);                                                  return_value16[0], return_value16[1], total, current->pattern, current->input);
1302                                          is_successful = 0;                                          is_successful = 0;
1303                                  } else                                  } else
1304  #endif  #endif
1305  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1306                                  if ((return_value = return_value32[0]) != return_value32[1]) {                                  if ((return_value = return_value32[0]) != return_value32[1]) {
1307                                          printf("\n32 bit: Return value differs(J32:%d,I32:%d): [%d] '%s' @ '%s'\n",                                          printf("\n32 bit: Return value differs(J32:%d,I32:%d): [%d] '%s' @ '%s'\n",
1308                                                  return_value32[0], return_value32[1], total, current->pattern, current->input);                                                  return_value32[0], return_value32[1], total, current->pattern, current->input);
1309                                          is_successful = 0;                                          is_successful = 0;
1310                                  } else                                  } else
1311  #endif  #endif
1312  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE16  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE16
1313                                  if (return_value8[0] != return_value16[0]) {                                  if (return_value8[0] != return_value16[0]) {
1314                                          printf("\n8 and 16 bit: Return value differs(J8:%d,J16:%d): [%d] '%s' @ '%s'\n",                                          printf("\n8 and 16 bit: Return value differs(J8:%d,J16:%d): [%d] '%s' @ '%s'\n",
1315                                                  return_value8[0], return_value16[0],                                                  return_value8[0], return_value16[0],
1316                                                  total, current->pattern, current->input);                                                  total, current->pattern, current->input);
1317                                          is_successful = 0;                                          is_successful = 0;
1318                                  } else                                  } else
1319  #endif  #endif
1320  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE32  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE32
1321                                  if (return_value8[0] != return_value32[0]) {                                  if (return_value8[0] != return_value32[0]) {
1322                                          printf("\n8 and 32 bit: Return value differs(J8:%d,J32:%d): [%d] '%s' @ '%s'\n",                                          printf("\n8 and 32 bit: Return value differs(J8:%d,J32:%d): [%d] '%s' @ '%s'\n",
1323                                                  return_value8[0], return_value32[0],                                                  return_value8[0], return_value32[0],
1324                                                  total, current->pattern, current->input);                                                  total, current->pattern, current->input);
1325                                          is_successful = 0;                                          is_successful = 0;
1326                                  } else                                  } else
1327  #endif  #endif
1328  #if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE32  #if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE32
1329                                  if (return_value16[0] != return_value32[0]) {                                  if (return_value16[0] != return_value32[0]) {
1330                                          printf("\n16 and 32 bit: Return value differs(J16:%d,J32:%d): [%d] '%s' @ '%s'\n",                                          printf("\n16 and 32 bit: Return value differs(J16:%d,J32:%d): [%d] '%s' @ '%s'\n",
1331                                                  return_value16[0], return_value32[0],                                                  return_value16[0], return_value32[0],
1332                                                  total, current->pattern, current->input);                                                  total, current->pattern, current->input);
1333                                          is_successful = 0;                                          is_successful = 0;
1334                                  } else                                  } else
1335  #endif  #endif
1336                                  if (return_value >= 0 || return_value == PCRE_ERROR_PARTIAL) {                                  if (return_value >= 0 || return_value == PCRE_ERROR_PARTIAL) {
1337                                          if (return_value == PCRE_ERROR_PARTIAL) {                                          if (return_value == PCRE_ERROR_PARTIAL) {
# Line 1340  static int regression_tests(void) Line 1340  static int regression_tests(void)
1340                                                  return_value *= 2;                                                  return_value *= 2;
1341                                          }                                          }
1342  #ifdef SUPPORT_PCRE8  #ifdef SUPPORT_PCRE8
1343                                          return_value8[0] = return_value;                                          return_value8[0] = return_value;
1344  #endif  #endif
1345  #ifdef SUPPORT_PCRE16  #ifdef SUPPORT_PCRE16
1346                                          return_value16[0] = return_value;                                          return_value16[0] = return_value;
1347  #endif  #endif
1348  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1349                                          return_value32[0] = return_value;                                          return_value32[0] = return_value;
1350  #endif  #endif
1351                                          /* Transform back the results. */                                          /* Transform back the results. */
1352                                          if (current->flags & PCRE_UTF8) {                                          if (current->flags & PCRE_UTF8) {
# Line 1359  static int regression_tests(void) Line 1359  static int regression_tests(void)
1359                                                  }                                                  }
1360  #endif  #endif
1361  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1362                                                  for (i = 0; i < return_value; ++i) {                                                  for (i = 0; i < return_value; ++i) {
1363                                                          if (ovector32_1[i] >= 0)                                                          if (ovector32_1[i] >= 0)
1364                                                                  ovector32_1[i] = regtest_offsetmap32[ovector32_1[i]];                                                                  ovector32_1[i] = regtest_offsetmap32[ovector32_1[i]];
1365                                                          if (ovector32_2[i] >= 0)                                                          if (ovector32_2[i] >= 0)
1366                                                                  ovector32_2[i] = regtest_offsetmap32[ovector32_2[i]];                                                                  ovector32_2[i] = regtest_offsetmap32[ovector32_2[i]];
1367                                                  }                                                  }
1368  #endif  #endif
1369                                          }                                          }
1370    
1371                                          for (i = 0; i < return_value; ++i) {                                          for (i = 0; i < return_value; ++i) {
1372  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE16  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE16
# Line 1378  static int regression_tests(void) Line 1378  static int regression_tests(void)
1378                                                  }                                                  }
1379  #endif  #endif
1380  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE32  #if defined SUPPORT_PCRE8 && defined SUPPORT_PCRE32
1381                                                  if (ovector8_1[i] != ovector8_2[i] || ovector8_1[i] != ovector32_1[i] || ovector8_1[i] != ovector32_2[i]) {                                                  if (ovector8_1[i] != ovector8_2[i] || ovector8_1[i] != ovector32_1[i] || ovector8_1[i] != ovector32_2[i]) {
1382                                                          printf("\n8 and 32 bit: Ovector[%d] value differs(J8:%d,I8:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \n",                                                          printf("\n8 and 32 bit: Ovector[%d] value differs(J8:%d,I8:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \n",
1383                                                                  i, ovector8_1[i], ovector8_2[i], ovector32_1[i], ovector32_2[i],                                                                  i, ovector8_1[i], ovector8_2[i], ovector32_1[i], ovector32_2[i],
1384                                                                  total, current->pattern, current->input);                                                                  total, current->pattern, current->input);
1385                                                          is_successful = 0;                                                          is_successful = 0;
1386                                                  }                                                  }
1387  #endif  #endif
1388  #if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE16  #if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE16
1389                                                  if (ovector16_1[i] != ovector16_2[i] || ovector16_1[i] != ovector16_1[i] || ovector16_1[i] != ovector16_2[i]) {                                                  if (ovector16_1[i] != ovector16_2[i] || ovector16_1[i] != ovector16_1[i] || ovector16_1[i] != ovector16_2[i]) {
1390                                                          printf("\n16 and 16 bit: Ovector[%d] value differs(J16:%d,I16:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \n",                                                          printf("\n16 and 16 bit: Ovector[%d] value differs(J16:%d,I16:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \n",
1391                                                                  i, ovector16_1[i], ovector16_2[i], ovector16_1[i], ovector16_2[i],                                                                  i, ovector16_1[i], ovector16_2[i], ovector16_1[i], ovector16_2[i],
1392                                                                  total, current->pattern, current->input);                                                                  total, current->pattern, current->input);
1393                                                          is_successful = 0;                                                          is_successful = 0;
1394                                                  }                                                  }
1395  #endif  #endif
1396                                          }                                          }
1397                                  }                                  }
1398                          } else                          } else
1399  #endif /* more than one of SUPPORT_PCRE8, SUPPORT_PCRE16 and SUPPORT_PCRE32 */  #endif /* more than one of SUPPORT_PCRE8, SUPPORT_PCRE16 and SUPPORT_PCRE32 */
1400                          {                          {
1401                                  /* Only the 8 bit and 16 bit results must be equal. */                                  /* Only the 8 bit and 16 bit results must be equal. */
1402  #ifdef SUPPORT_PCRE8  #ifdef SUPPORT_PCRE8
1403                                  if (return_value8[0] != return_value8[1]) {                                  if (return_value8[0] != return_value8[1]) {
# Line 1440  static int regression_tests(void) Line 1440  static int regression_tests(void)
1440  #endif  #endif
1441    
1442  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1443                                  if (return_value32[0] != return_value32[1]) {                                  if (return_value32[0] != return_value32[1]) {
1444                                          printf("\n32 bit: Return value differs(%d:%d): [%d] '%s' @ '%s'\n",                                          printf("\n32 bit: Return value differs(%d:%d): [%d] '%s' @ '%s'\n",
1445                                                  return_value32[0], return_value32[1], total, current->pattern, current->input);                                                  return_value32[0], return_value32[1], total, current->pattern, current->input);
1446                                          is_successful = 0;                                          is_successful = 0;
1447                                  } else if (return_value32[0] >= 0 || return_value32[0] == PCRE_ERROR_PARTIAL) {                                  } else if (return_value32[0] >= 0 || return_value32[0] == PCRE_ERROR_PARTIAL) {
1448                                          if (return_value32[0] == PCRE_ERROR_PARTIAL)                                          if (return_value32[0] == PCRE_ERROR_PARTIAL)
1449                                                  return_value32[0] = 2;                                                  return_value32[0] = 2;
1450                                          else                                          else
1451                                                  return_value32[0] *= 2;                                                  return_value32[0] *= 2;
1452    
1453                                          for (i = 0; i < return_value32[0]; ++i)                                          for (i = 0; i < return_value32[0]; ++i)
1454                                                  if (ovector32_1[i] != ovector32_2[i]) {                                                  if (ovector32_1[i] != ovector32_2[i]) {
1455                                                          printf("\n32 bit: Ovector[%d] value differs(%d:%d): [%d] '%s' @ '%s'\n",                                                          printf("\n32 bit: Ovector[%d] value differs(%d:%d): [%d] '%s' @ '%s'\n",
1456                                                                  i, ovector32_1[i], ovector32_2[i], total, current->pattern, current->input);                                                                  i, ovector32_1[i], ovector32_2[i], total, current->pattern, current->input);
1457                                                          is_successful = 0;                                                          is_successful = 0;
1458                                                  }                                                  }
1459                                  }                                  }
1460  #endif  #endif
1461                          }                          }
1462                  }                  }
1463    
1464                  if (is_successful) {                  if (is_successful) {
# Line 1493  static int regression_tests(void) Line 1493  static int regression_tests(void)
1493                          }                          }
1494  #endif  #endif
1495  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1496                          if (!(current->start_offset & F_NO32) && ((utf && ucp) || is_ascii_input)) {                          if (!(current->start_offset & F_NO32) && ((utf && ucp) || is_ascii_input)) {
1497                                  if (return_value32[0] < 0 && !(current->start_offset & F_NOMATCH)) {                                  if (return_value32[0] < 0 && !(current->start_offset & F_NOMATCH)) {
1498                                          printf("32 bit: Test should match: [%d] '%s' @ '%s'\n",                                          printf("32 bit: Test should match: [%d] '%s' @ '%s'\n",
1499                                                  total, current->pattern, current->input);                                                  total, current->pattern, current->input);
1500                                          is_successful = 0;                                          is_successful = 0;
1501                                  }                                  }
1502    
1503                                  if (return_value32[0] >= 0 && (current->start_offset & F_NOMATCH)) {                                  if (return_value32[0] >= 0 && (current->start_offset & F_NOMATCH)) {
1504                                          printf("32 bit: Test should not match: [%d] '%s' @ '%s'\n",                                          printf("32 bit: Test should not match: [%d] '%s' @ '%s'\n",
1505                                                  total, current->pattern, current->input);                                                  total, current->pattern, current->input);
1506                                          is_successful = 0;                                          is_successful = 0;
1507                                  }                                  }
1508                          }                          }
1509  #endif  #endif
1510                  }                  }
1511    
# Line 1525  static int regression_tests(void) Line 1525  static int regression_tests(void)
1525                          }                          }
1526  #endif  #endif
1527  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1528                          if (mark32_1 != mark32_2) {                          if (mark32_1 != mark32_2) {
1529                                  printf("32 bit: Mark value mismatch: [%d] '%s' @ '%s'\n",                                  printf("32 bit: Mark value mismatch: [%d] '%s' @ '%s'\n",
1530                                          total, current->pattern, current->input);                                          total, current->pattern, current->input);
1531                                  is_successful = 0;                                  is_successful = 0;
1532                          }                          }
1533  #endif  #endif
1534                  }                  }
1535    
# Line 1546  static int regression_tests(void) Line 1546  static int regression_tests(void)
1546                  }                  }
1547  #endif  #endif
1548  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1549                  if (re32) {                  if (re32) {
1550                          pcre32_free_study(extra32);                          pcre32_free_study(extra32);
1551                          pcre32_free(re32);                          pcre32_free(re32);
1552                  }                  }
1553  #endif  #endif
1554    
1555                  if (is_successful) {                  if (is_successful) {
# Line 1574  static int regression_tests(void) Line 1574  static int regression_tests(void)
1574          setstack16(NULL);          setstack16(NULL);
1575  #endif  #endif
1576  #ifdef SUPPORT_PCRE32  #ifdef SUPPORT_PCRE32
1577          setstack32(NULL);          setstack32(NULL);
1578  #endif  #endif
1579    
1580          if (total == successful) {          if (total == successful) {

Legend:
Removed from v.1112  
changed lines
  Added in v.1139

  ViewVC Help
Powered by ViewVC 1.1.5