Index: src/regexp/regexp-macro-assembler.cc |
diff --git a/src/regexp/regexp-macro-assembler.cc b/src/regexp/regexp-macro-assembler.cc |
index 0a7f5c1b9e295727ac672cc008adee0dbfc41ed6..73797e4416b8b198e3c13df50b56587bd6c04fa3 100644 |
--- a/src/regexp/regexp-macro-assembler.cc |
+++ b/src/regexp/regexp-macro-assembler.cc |
@@ -133,6 +133,8 @@ const byte* NativeRegExpMacroAssembler::StringCharacterPosition( |
} else if (subject->IsSlicedString()) { |
start_index += SlicedString::cast(subject)->offset(); |
subject = SlicedString::cast(subject)->parent(); |
+ } else if (subject->IsThinString()) { |
+ subject = ThinString::cast(subject)->actual(); |
} |
DCHECK(start_index >= 0); |
DCHECK(start_index <= subject->length()); |
@@ -239,6 +241,9 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Match( |
subject_ptr = slice->parent(); |
slice_offset = slice->offset(); |
} |
+ if (StringShape(subject_ptr).IsThin()) { |
+ subject_ptr = ThinString::cast(subject_ptr)->actual(); |
+ } |
// Ensure that an underlying string has the same representation. |
bool is_one_byte = subject_ptr->IsOneByteRepresentation(); |
DCHECK(subject_ptr->IsExternalString() || subject_ptr->IsSeqString()); |