diff options
author | Ben Murdoch <benm@google.com> | 2011-11-30 16:03:39 +0000 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-12-02 17:28:02 +0000 |
commit | 69a99ed0b2b2ef69d393c371b03db3a98aaf880e (patch) | |
tree | 6438154d0f3ab526b9206f8860fa4db5cf073c11 /src/regexp-macro-assembler.cc | |
parent | 3fb3ca8c7ca439d408449a395897395c0faae8d1 (diff) | |
download | android_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.tar.gz android_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.tar.bz2 android_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.zip |
Upgrade to V8 3.5
Merge V8 3.5.10.24
Simple merge required updates to makefiles only.
Bug: 5688872
Change-Id: I0acdb9a1a53919d84e9a7525308e8371739d2f06
Diffstat (limited to 'src/regexp-macro-assembler.cc')
-rw-r--r-- | src/regexp-macro-assembler.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/regexp-macro-assembler.cc b/src/regexp-macro-assembler.cc index 55782431..f91ea934 100644 --- a/src/regexp-macro-assembler.cc +++ b/src/regexp-macro-assembler.cc @@ -120,27 +120,31 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Match( String* subject_ptr = *subject; // Character offsets into string. int start_offset = previous_index; - int end_offset = subject_ptr->length(); + int char_length = subject_ptr->length() - start_offset; + int slice_offset = 0; - // The string has been flattened, so it it is a cons string it contains the + // The string has been flattened, so if it is a cons string it contains the // full string in the first part. if (StringShape(subject_ptr).IsCons()) { ASSERT_EQ(0, ConsString::cast(subject_ptr)->second()->length()); subject_ptr = ConsString::cast(subject_ptr)->first(); + } else if (StringShape(subject_ptr).IsSliced()) { + SlicedString* slice = SlicedString::cast(subject_ptr); + subject_ptr = slice->parent(); + slice_offset = slice->offset(); } // Ensure that an underlying string has the same ascii-ness. bool is_ascii = subject_ptr->IsAsciiRepresentation(); ASSERT(subject_ptr->IsExternalString() || subject_ptr->IsSeqString()); // String is now either Sequential or External int char_size_shift = is_ascii ? 0 : 1; - int char_length = end_offset - start_offset; const byte* input_start = - StringCharacterPosition(subject_ptr, start_offset); + StringCharacterPosition(subject_ptr, start_offset + slice_offset); int byte_length = char_length << char_size_shift; const byte* input_end = input_start + byte_length; Result res = Execute(*regexp_code, - subject_ptr, + *subject, start_offset, input_start, input_end, @@ -152,7 +156,7 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Match( NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Execute( Code* code, - String* input, + String* input, // This needs to be the unpacked (sliced, cons) string. int start_offset, const byte* input_start, const byte* input_end, |