| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1175 return true; // An Ape, an ABCBook. | 1175 return true; // An Ape, an ABCBook. |
| 1176 } else if ((c1 == 0 || (c1 >= 'A' && c1 <= 'Z')) && | 1176 } else if ((c1 == 0 || (c1 >= 'A' && c1 <= 'Z')) && |
| 1177 (c0 == 'F' || c0 == 'H' || c0 == 'M' || c0 == 'N' || c0 == 'R' || | 1177 (c0 == 'F' || c0 == 'H' || c0 == 'M' || c0 == 'N' || c0 == 'R' || |
| 1178 c0 == 'S' || c0 == 'X')) { | 1178 c0 == 'S' || c0 == 'X')) { |
| 1179 return true; // An MP3File, an M. | 1179 return true; // An MP3File, an M. |
| 1180 } | 1180 } |
| 1181 return false; | 1181 return false; |
| 1182 } | 1182 } |
| 1183 | 1183 |
| 1184 | 1184 |
| 1185 Handle<String> String::SlowFlatten(Handle<ConsString> cons, |
| 1186 PretenureFlag pretenure) { |
| 1187 ASSERT(AllowHeapAllocation::IsAllowed()); |
| 1188 ASSERT(cons->second()->length() != 0); |
| 1189 Isolate* isolate = cons->GetIsolate(); |
| 1190 int length = cons->length(); |
| 1191 PretenureFlag tenure = isolate->heap()->InNewSpace(*cons) ? pretenure |
| 1192 : TENURED; |
| 1193 Handle<SeqString> result; |
| 1194 if (cons->IsOneByteRepresentation()) { |
| 1195 Handle<SeqOneByteString> flat = isolate->factory()->NewRawOneByteString( |
| 1196 length, tenure).ToHandleChecked(); |
| 1197 DisallowHeapAllocation no_gc; |
| 1198 WriteToFlat(*cons, flat->GetChars(), 0, length); |
| 1199 result = flat; |
| 1200 } else { |
| 1201 Handle<SeqTwoByteString> flat = isolate->factory()->NewRawTwoByteString( |
| 1202 length, tenure).ToHandleChecked(); |
| 1203 DisallowHeapAllocation no_gc; |
| 1204 WriteToFlat(*cons, flat->GetChars(), 0, length); |
| 1205 result = flat; |
| 1206 } |
| 1207 cons->set_first(*result); |
| 1208 cons->set_second(isolate->heap()->empty_string()); |
| 1209 return result; |
| 1210 } |
| 1211 |
| 1212 |
| 1185 MaybeObject* String::SlowTryFlatten(PretenureFlag pretenure) { | 1213 MaybeObject* String::SlowTryFlatten(PretenureFlag pretenure) { |
| 1186 #ifdef DEBUG | 1214 #ifdef DEBUG |
| 1187 // Do not attempt to flatten in debug mode when allocation is not | 1215 // Do not attempt to flatten in debug mode when allocation is not |
| 1188 // allowed. This is to avoid an assertion failure when allocating. | 1216 // allowed. This is to avoid an assertion failure when allocating. |
| 1189 // Flattening strings is the only case where we always allow | 1217 // Flattening strings is the only case where we always allow |
| 1190 // allocation because no GC is performed if the allocation fails. | 1218 // allocation because no GC is performed if the allocation fails. |
| 1191 if (!AllowHeapAllocation::IsAllowed()) return this; | 1219 if (!AllowHeapAllocation::IsAllowed()) return this; |
| 1192 #endif | 1220 #endif |
| 1193 | 1221 |
| 1194 Heap* heap = GetHeap(); | 1222 Heap* heap = GetHeap(); |
| (...skipping 5186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6381 attributes, | 6409 attributes, |
| 6382 access_control); | 6410 access_control); |
| 6383 return; | 6411 return; |
| 6384 } | 6412 } |
| 6385 | 6413 |
| 6386 // Make sure that the top context does not change when doing callbacks or | 6414 // Make sure that the top context does not change when doing callbacks or |
| 6387 // interceptor calls. | 6415 // interceptor calls. |
| 6388 AssertNoContextChange ncc(isolate); | 6416 AssertNoContextChange ncc(isolate); |
| 6389 | 6417 |
| 6390 // Try to flatten before operating on the string. | 6418 // Try to flatten before operating on the string. |
| 6391 if (name->IsString()) String::cast(*name)->TryFlatten(); | 6419 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
| 6392 | 6420 |
| 6393 if (!JSObject::CanSetCallback(object, name)) return; | 6421 if (!JSObject::CanSetCallback(object, name)) return; |
| 6394 | 6422 |
| 6395 uint32_t index = 0; | 6423 uint32_t index = 0; |
| 6396 bool is_element = name->AsArrayIndex(&index); | 6424 bool is_element = name->AsArrayIndex(&index); |
| 6397 | 6425 |
| 6398 Handle<Object> old_value = isolate->factory()->the_hole_value(); | 6426 Handle<Object> old_value = isolate->factory()->the_hole_value(); |
| 6399 bool is_observed = object->map()->is_observed() && | 6427 bool is_observed = object->map()->is_observed() && |
| 6400 *name != isolate->heap()->hidden_string(); | 6428 *name != isolate->heap()->hidden_string(); |
| 6401 bool preexists = false; | 6429 bool preexists = false; |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6569 if (proto->IsNull()) return object; | 6597 if (proto->IsNull()) return object; |
| 6570 ASSERT(proto->IsJSGlobalObject()); | 6598 ASSERT(proto->IsJSGlobalObject()); |
| 6571 return SetAccessor(Handle<JSObject>::cast(proto), info); | 6599 return SetAccessor(Handle<JSObject>::cast(proto), info); |
| 6572 } | 6600 } |
| 6573 | 6601 |
| 6574 // Make sure that the top context does not change when doing callbacks or | 6602 // Make sure that the top context does not change when doing callbacks or |
| 6575 // interceptor calls. | 6603 // interceptor calls. |
| 6576 AssertNoContextChange ncc(isolate); | 6604 AssertNoContextChange ncc(isolate); |
| 6577 | 6605 |
| 6578 // Try to flatten before operating on the string. | 6606 // Try to flatten before operating on the string. |
| 6579 if (name->IsString()) FlattenString(Handle<String>::cast(name)); | 6607 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
| 6580 | 6608 |
| 6581 if (!JSObject::CanSetCallback(object, name)) { | 6609 if (!JSObject::CanSetCallback(object, name)) { |
| 6582 return factory->undefined_value(); | 6610 return factory->undefined_value(); |
| 6583 } | 6611 } |
| 6584 | 6612 |
| 6585 uint32_t index = 0; | 6613 uint32_t index = 0; |
| 6586 bool is_element = name->AsArrayIndex(&index); | 6614 bool is_element = name->AsArrayIndex(&index); |
| 6587 | 6615 |
| 6588 if (is_element) { | 6616 if (is_element) { |
| 6589 if (object->IsJSArray()) return factory->undefined_value(); | 6617 if (object->IsJSArray()) return factory->undefined_value(); |
| (...skipping 10121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16711 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16739 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16712 static const char* error_messages_[] = { | 16740 static const char* error_messages_[] = { |
| 16713 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16741 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16714 }; | 16742 }; |
| 16715 #undef ERROR_MESSAGES_TEXTS | 16743 #undef ERROR_MESSAGES_TEXTS |
| 16716 return error_messages_[reason]; | 16744 return error_messages_[reason]; |
| 16717 } | 16745 } |
| 16718 | 16746 |
| 16719 | 16747 |
| 16720 } } // namespace v8::internal | 16748 } } // namespace v8::internal |
| OLD | NEW |