| Index: src/runtime.cc | 
| diff --git a/src/runtime.cc b/src/runtime.cc | 
| index 5ec33895e44d50f568edeff1b0c944fd4eff5b53..3bae87d5a4f8427431ded12014bab11b667a85b0 100644 | 
| --- a/src/runtime.cc | 
| +++ b/src/runtime.cc | 
| @@ -5186,11 +5186,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIEscape) { | 
| ASSERT(args.length() == 1); | 
| CONVERT_ARG_HANDLE_CHECKED(String, source, 0); | 
| Handle<String> string = FlattenGetString(source); | 
| -  String::FlatContent content = string->GetFlatContent(); | 
| -  ASSERT(content.IsFlat()); | 
| -  Handle<String> result = | 
| -      content.IsAscii() ? URIEscape::Escape<uint8_t>(isolate, source) | 
| -                        : URIEscape::Escape<uc16>(isolate, source); | 
| +  ASSERT(string->IsFlat()); | 
| +  Handle<String> result = string->IsOneByteRepresentationUnderneath() | 
| +      ? URIEscape::Escape<uint8_t>(isolate, source) | 
| +      : URIEscape::Escape<uc16>(isolate, source); | 
| if (result.is_null()) return Failure::OutOfMemoryException(0x12); | 
| return *result; | 
| } | 
| @@ -5201,10 +5200,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) { | 
| ASSERT(args.length() == 1); | 
| CONVERT_ARG_HANDLE_CHECKED(String, source, 0); | 
| Handle<String> string = FlattenGetString(source); | 
| -  String::FlatContent content = string->GetFlatContent(); | 
| -  ASSERT(content.IsFlat()); | 
| -  return content.IsAscii() ? *URIUnescape::Unescape<uint8_t>(isolate, source) | 
| -                           : *URIUnescape::Unescape<uc16>(isolate, source); | 
| +  ASSERT(string->IsFlat()); | 
| +  return string->IsOneByteRepresentationUnderneath() | 
| +      ? *URIUnescape::Unescape<uint8_t>(isolate, source) | 
| +      : *URIUnescape::Unescape<uc16>(isolate, source); | 
| } | 
|  | 
|  | 
| @@ -5733,6 +5732,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToArray) { | 
| if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 
| } | 
| elements = Handle<FixedArray>(FixedArray::cast(obj), isolate); | 
| +    AssertNoAllocation no_gc; | 
| String::FlatContent content = s->GetFlatContent(); | 
| if (content.IsAscii()) { | 
| Vector<const uint8_t> chars = content.ToOneByteVector(); | 
| @@ -6588,6 +6588,7 @@ static Object* FlatStringCompare(String* x, String* y) { | 
| equal_prefix_result = Smi::FromInt(LESS); | 
| } | 
| int r; | 
| +  AssertNoAllocation no_gc; | 
| String::FlatContent x_content = x->GetFlatContent(); | 
| String::FlatContent y_content = y->GetFlatContent(); | 
| if (x_content.IsAscii()) { | 
| @@ -12835,6 +12836,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_Log) { | 
| ASSERT(args.length() == 2); | 
| CONVERT_ARG_CHECKED(String, format, 0); | 
| CONVERT_ARG_CHECKED(JSArray, elms, 1); | 
| +  AssertNoAllocation no_gc; | 
| String::FlatContent format_content = format->GetFlatContent(); | 
| RUNTIME_ASSERT(format_content.IsAscii()); | 
| Vector<const uint8_t> chars = format_content.ToOneByteVector(); | 
|  |