summaryrefslogtreecommitdiffstats
path: root/src/regexp-macro-assembler.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-11-30 16:03:39 +0000
committerBen Murdoch <benm@google.com>2011-12-02 17:28:02 +0000
commit69a99ed0b2b2ef69d393c371b03db3a98aaf880e (patch)
tree6438154d0f3ab526b9206f8860fa4db5cf073c11 /src/regexp-macro-assembler.cc
parent3fb3ca8c7ca439d408449a395897395c0faae8d1 (diff)
downloadandroid_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.cc16
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,