| Index: src/jsregexp.cc
|
| diff --git a/src/jsregexp.cc b/src/jsregexp.cc
|
| index 35b3996720dd0c657f9675b8d22201a819e9233d..54046b2219c174b46ab5a7722e1ed6487368c276 100644
|
| --- a/src/jsregexp.cc
|
| +++ b/src/jsregexp.cc
|
| @@ -95,10 +95,12 @@ static JSRegExp::Flags RegExpFlagsFromString(Handle<String> str) {
|
| }
|
|
|
|
|
| -static inline void ThrowRegExpException(Handle<JSRegExp> re,
|
| - Handle<String> pattern,
|
| - Handle<String> error_text,
|
| - const char* message) {
|
| +MUST_USE_RESULT
|
| +static inline MaybeHandle<Object> ThrowRegExpException(
|
| + Handle<JSRegExp> re,
|
| + Handle<String> pattern,
|
| + Handle<String> error_text,
|
| + const char* message) {
|
| Isolate* isolate = re->GetIsolate();
|
| Factory* factory = isolate->factory();
|
| Handle<FixedArray> elements = factory->NewFixedArray(2);
|
| @@ -106,7 +108,7 @@ static inline void ThrowRegExpException(Handle<JSRegExp> re,
|
| elements->set(1, *error_text);
|
| Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
|
| Handle<Object> regexp_err = factory->NewSyntaxError(message, array);
|
| - isolate->Throw(*regexp_err);
|
| + return isolate->Throw<Object>(regexp_err);
|
| }
|
|
|
|
|
| @@ -167,9 +169,9 @@ static bool HasFewDifferentCharacters(Handle<String> pattern) {
|
| // Generic RegExp methods. Dispatches to implementation specific methods.
|
|
|
|
|
| -Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
| - Handle<String> pattern,
|
| - Handle<String> flag_str) {
|
| +MaybeHandle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
| + Handle<String> pattern,
|
| + Handle<String> flag_str) {
|
| Isolate* isolate = re->GetIsolate();
|
| Zone zone(isolate);
|
| JSRegExp::Flags flags = RegExpFlagsFromString(flag_str);
|
| @@ -192,11 +194,10 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
| if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
|
| &parse_result, &zone)) {
|
| // Throw an exception if we fail to parse the pattern.
|
| - ThrowRegExpException(re,
|
| - pattern,
|
| - parse_result.error,
|
| - "malformed_regexp");
|
| - return Handle<Object>::null();
|
| + return ThrowRegExpException(re,
|
| + pattern,
|
| + parse_result.error,
|
| + "malformed_regexp");
|
| }
|
|
|
| bool has_been_compiled = false;
|
| @@ -212,8 +213,11 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
| parse_result.capture_count == 0) {
|
| RegExpAtom* atom = parse_result.tree->AsAtom();
|
| Vector<const uc16> atom_pattern = atom->data();
|
| - Handle<String> atom_string =
|
| - isolate->factory()->NewStringFromTwoByte(atom_pattern);
|
| + Handle<String> atom_string;
|
| + ASSIGN_RETURN_ON_EXCEPTION(
|
| + isolate, atom_string,
|
| + isolate->factory()->NewStringFromTwoByte(atom_pattern),
|
| + Object);
|
| if (!HasFewDifferentCharacters(atom_string)) {
|
| AtomCompile(re, pattern, flags, atom_string);
|
| has_been_compiled = true;
|
| @@ -465,9 +469,8 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re,
|
| &zone);
|
| if (result.error_message != NULL) {
|
| // Unable to compile regexp.
|
| - Handle<String> error_message =
|
| - isolate->factory()->NewStringFromUtf8(CStrVector(result.error_message));
|
| - ASSERT(!error_message.is_null());
|
| + Handle<String> error_message = isolate->factory()->NewStringFromUtf8(
|
| + CStrVector(result.error_message)).ToHandleChecked();
|
| CreateRegExpErrorObjectAndThrow(re, is_ascii, error_message, isolate);
|
| return false;
|
| }
|
|
|