| Index: src/jsregexp.cc
 | 
| ===================================================================
 | 
| --- src/jsregexp.cc	(revision 1519)
 | 
| +++ src/jsregexp.cc	(working copy)
 | 
| @@ -55,27 +55,6 @@
 | 
|  namespace v8 { namespace internal {
 | 
|  
 | 
|  
 | 
| -String* RegExpImpl::last_ascii_string_ = NULL;
 | 
| -String* RegExpImpl::two_byte_cached_string_ = NULL;
 | 
| -
 | 
| -
 | 
| -void RegExpImpl::NewSpaceCollectionPrologue() {
 | 
| -  // The two byte string is always in the old space.  The Ascii string may be
 | 
| -  // in either place.  If it is in the old space we don't need to do anything.
 | 
| -  if (Heap::InNewSpace(last_ascii_string_)) {
 | 
| -    // Invalidate the cache.
 | 
| -    last_ascii_string_ = NULL;
 | 
| -    two_byte_cached_string_ = NULL;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -void RegExpImpl::OldSpaceCollectionPrologue() {
 | 
| -  last_ascii_string_ = NULL;
 | 
| -  two_byte_cached_string_ = NULL;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  Handle<Object> RegExpImpl::CreateRegExpLiteral(Handle<JSFunction> constructor,
 | 
|                                                 Handle<String> pattern,
 | 
|                                                 Handle<String> flags,
 | 
| @@ -92,55 +71,10 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -// Converts a source string to a 16 bit flat string or a SlicedString containing
 | 
| -// a 16 bit flat string).
 | 
| -Handle<String> RegExpImpl::CachedStringToTwoByte(Handle<String> subject) {
 | 
| -  if (*subject == last_ascii_string_) {
 | 
| -    ASSERT(two_byte_cached_string_ != NULL);
 | 
| -    return Handle<String>(String::cast(two_byte_cached_string_));
 | 
| -  }
 | 
| -  Handle<String> two_byte_string = StringToTwoByte(subject);
 | 
| -  last_ascii_string_ = *subject;
 | 
| -  two_byte_cached_string_ = *two_byte_string;
 | 
| -  return two_byte_string;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// Converts a source string to a 16 bit flat string or a SlicedString containing
 | 
| -// a 16 bit flat string).
 | 
| -Handle<String> RegExpImpl::StringToTwoByte(Handle<String> pattern) {
 | 
| -  StringShape shape(*pattern);
 | 
| -  if (!pattern->IsFlat(shape)) {
 | 
| -    FlattenString(pattern);
 | 
| -    shape = StringShape(*pattern);
 | 
| -  }
 | 
| -  Handle<String> flat_string(shape.IsCons() ?
 | 
| -    String::cast(ConsString::cast(*pattern)->first()) :
 | 
| -    *pattern);
 | 
| -  ASSERT(flat_string->IsString());
 | 
| -  StringShape flat_shape(*flat_string);
 | 
| -  ASSERT(!flat_shape.IsCons());
 | 
| -  ASSERT(flat_shape.IsSequential() ||
 | 
| -         flat_shape.IsSliced() ||
 | 
| -         flat_shape.IsExternal());
 | 
| -  if (!flat_shape.IsAsciiRepresentation()) {
 | 
| -    return flat_string;
 | 
| -  }
 | 
| -
 | 
| -  int len = flat_string->length(flat_shape);
 | 
| -  Handle<String> two_byte_string =
 | 
| -    Factory::NewRawTwoByteString(len, TENURED);
 | 
| -  uc16* dest = SeqTwoByteString::cast(*two_byte_string)->GetChars();
 | 
| -  String::WriteToFlat(*flat_string, flat_shape, dest, 0, len);
 | 
| -  return two_byte_string;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  static JSRegExp::Flags RegExpFlagsFromString(Handle<String> str) {
 | 
|    int flags = JSRegExp::NONE;
 | 
| -  StringShape shape(*str);
 | 
| -  for (int i = 0; i < str->length(shape); i++) {
 | 
| -    switch (str->Get(shape, i)) {
 | 
| +  for (int i = 0; i < str->length(); i++) {
 | 
| +    switch (str->Get(i)) {
 | 
|        case 'i':
 | 
|          flags |= JSRegExp::IGNORE_CASE;
 | 
|          break;
 | 
| @@ -421,7 +355,7 @@
 | 
|    JSRegExp::Flags flags = re->GetFlags();
 | 
|  
 | 
|    Handle<String> pattern(re->Pattern());
 | 
| -  if (!pattern->IsFlat(StringShape(*pattern))) {
 | 
| +  if (!pattern->IsFlat()) {
 | 
|      FlattenString(pattern);
 | 
|    }
 | 
|  
 | 
| @@ -552,7 +486,7 @@
 | 
|    }
 | 
|  #endif
 | 
|  
 | 
| -  if (!subject->IsFlat(StringShape(*subject))) {
 | 
| +  if (!subject->IsFlat()) {
 | 
|      FlattenString(subject);
 | 
|    }
 | 
|  
 | 
| @@ -590,7 +524,7 @@
 | 
|    int result_length = 0;
 | 
|    Handle<Object> matches;
 | 
|  
 | 
| -  if (!subject->IsFlat(StringShape(*subject))) {
 | 
| +  if (!subject->IsFlat()) {
 | 
|      FlattenString(subject);
 | 
|    }
 | 
|  
 | 
| @@ -659,9 +593,8 @@
 | 
|                                              int previous_index,
 | 
|                                              int* offsets_vector,
 | 
|                                              int offsets_vector_length) {
 | 
| -  StringShape shape(*subject);
 | 
| -  ASSERT(subject->IsFlat(shape));
 | 
| -  bool is_ascii = shape.IsAsciiRepresentation();
 | 
| +  ASSERT(subject->IsFlat());
 | 
| +  bool is_ascii = StringShape(*subject).IsAsciiRepresentation();
 | 
|    bool rc;
 | 
|  
 | 
|    Handle<String> original_subject = subject;
 | 
| 
 |