static RegExData* open(JNIEnv* env, jclass clazz, jstring pattern, jint flags) { flags = flags | UREGEX_ERROR_ON_UNKNOWN_ESCAPES; RegExData* data = (RegExData*)calloc(sizeof(RegExData), 1); UErrorCode status = U_ZERO_ERROR; UParseError error; error.offset = -1; jchar const * patternRaw; int patternLen = env->GetStringLength(pattern); if (patternLen == 0) { data->regex = uregex_open(&EMPTY_STRING, -1, flags, &error, &status); } else { jchar const * patternRaw = env->GetStringChars(pattern, NULL); data->regex = uregex_open(patternRaw, patternLen, flags, &error, &status); env->ReleaseStringChars(pattern, patternRaw); } if (!U_SUCCESS(status)) { _close(env, clazz, data); throwPatternSyntaxException(env, status, pattern, error); data = NULL; } return data; }
static jint Pattern_compileImpl(JNIEnv* env, jclass, jstring javaRegex, jint flags) { flags |= UREGEX_ERROR_ON_UNKNOWN_ESCAPES; UErrorCode status = U_ZERO_ERROR; UParseError error; error.offset = -1; ScopedJavaUnicodeString regex(env, javaRegex); UnicodeString& regexString(regex.unicodeString()); RegexPattern* result = RegexPattern::compile(regexString, flags, error, status); if (!U_SUCCESS(status)) { throwPatternSyntaxException(env, status, javaRegex, error); } return static_cast<jint>(reinterpret_cast<uintptr_t>(result)); }