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 1706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1717 String::cast(symbol->name())->StringShortPrint(accumulator); | 1717 String::cast(symbol->name())->StringShortPrint(accumulator); |
1718 } | 1718 } |
1719 accumulator->Add(">"); | 1719 accumulator->Add(">"); |
1720 break; | 1720 break; |
1721 } | 1721 } |
1722 case HEAP_NUMBER_TYPE: | 1722 case HEAP_NUMBER_TYPE: |
1723 accumulator->Add("<Number: "); | 1723 accumulator->Add("<Number: "); |
1724 HeapNumber::cast(this)->HeapNumberPrint(accumulator); | 1724 HeapNumber::cast(this)->HeapNumberPrint(accumulator); |
1725 accumulator->Put('>'); | 1725 accumulator->Put('>'); |
1726 break; | 1726 break; |
| 1727 case MUTABLE_HEAP_NUMBER_TYPE: |
| 1728 accumulator->Add("<MutableNumber: "); |
| 1729 HeapNumber::cast(this)->HeapNumberPrint(accumulator); |
| 1730 accumulator->Put('>'); |
| 1731 break; |
1727 case JS_PROXY_TYPE: | 1732 case JS_PROXY_TYPE: |
1728 accumulator->Add("<JSProxy>"); | 1733 accumulator->Add("<JSProxy>"); |
1729 break; | 1734 break; |
1730 case JS_FUNCTION_PROXY_TYPE: | 1735 case JS_FUNCTION_PROXY_TYPE: |
1731 accumulator->Add("<JSFunctionProxy>"); | 1736 accumulator->Add("<JSFunctionProxy>"); |
1732 break; | 1737 break; |
1733 case FOREIGN_TYPE: | 1738 case FOREIGN_TYPE: |
1734 accumulator->Add("<Foreign>"); | 1739 accumulator->Add("<Foreign>"); |
1735 break; | 1740 break; |
1736 case CELL_TYPE: | 1741 case CELL_TYPE: |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 Cell::BodyDescriptor::IterateBody(this, v); | 1845 Cell::BodyDescriptor::IterateBody(this, v); |
1841 break; | 1846 break; |
1842 case PROPERTY_CELL_TYPE: | 1847 case PROPERTY_CELL_TYPE: |
1843 PropertyCell::BodyDescriptor::IterateBody(this, v); | 1848 PropertyCell::BodyDescriptor::IterateBody(this, v); |
1844 break; | 1849 break; |
1845 case SYMBOL_TYPE: | 1850 case SYMBOL_TYPE: |
1846 Symbol::BodyDescriptor::IterateBody(this, v); | 1851 Symbol::BodyDescriptor::IterateBody(this, v); |
1847 break; | 1852 break; |
1848 | 1853 |
1849 case HEAP_NUMBER_TYPE: | 1854 case HEAP_NUMBER_TYPE: |
| 1855 case MUTABLE_HEAP_NUMBER_TYPE: |
1850 case FILLER_TYPE: | 1856 case FILLER_TYPE: |
1851 case BYTE_ARRAY_TYPE: | 1857 case BYTE_ARRAY_TYPE: |
1852 case FREE_SPACE_TYPE: | 1858 case FREE_SPACE_TYPE: |
1853 break; | 1859 break; |
1854 | 1860 |
1855 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ | 1861 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
1856 case EXTERNAL_##TYPE##_ARRAY_TYPE: \ | 1862 case EXTERNAL_##TYPE##_ARRAY_TYPE: \ |
1857 case FIXED_##TYPE##_ARRAY_TYPE: \ | 1863 case FIXED_##TYPE##_ARRAY_TYPE: \ |
1858 break; | 1864 break; |
1859 | 1865 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1896 } | 1902 } |
1897 if (u.bits.exp == 0) { | 1903 if (u.bits.exp == 0) { |
1898 // Detect +0, and -0 for IEEE double precision floating point. | 1904 // Detect +0, and -0 for IEEE double precision floating point. |
1899 if ((u.bits.man_low | u.bits.man_high) == 0) return false; | 1905 if ((u.bits.man_low | u.bits.man_high) == 0) return false; |
1900 } | 1906 } |
1901 return true; | 1907 return true; |
1902 } | 1908 } |
1903 | 1909 |
1904 | 1910 |
1905 void HeapNumber::HeapNumberPrint(FILE* out) { | 1911 void HeapNumber::HeapNumberPrint(FILE* out) { |
1906 PrintF(out, "%.16g", Number()); | 1912 PrintF(out, "%.16g", value()); |
1907 } | 1913 } |
1908 | 1914 |
1909 | 1915 |
1910 void HeapNumber::HeapNumberPrint(StringStream* accumulator) { | 1916 void HeapNumber::HeapNumberPrint(StringStream* accumulator) { |
1911 // The Windows version of vsnprintf can allocate when printing a %g string | 1917 // The Windows version of vsnprintf can allocate when printing a %g string |
1912 // into a buffer that may not be big enough. We don't want random memory | 1918 // into a buffer that may not be big enough. We don't want random memory |
1913 // allocation when producing post-crash stack traces, so we print into a | 1919 // allocation when producing post-crash stack traces, so we print into a |
1914 // buffer that is plenty big enough for any floating point number, then | 1920 // buffer that is plenty big enough for any floating point number, then |
1915 // print that using vsnprintf (which may truncate but never allocate if | 1921 // print that using vsnprintf (which may truncate but never allocate if |
1916 // there is no more space in the buffer). | 1922 // there is no more space in the buffer). |
1917 EmbeddedVector<char, 100> buffer; | 1923 EmbeddedVector<char, 100> buffer; |
1918 OS::SNPrintF(buffer, "%.16g", Number()); | 1924 OS::SNPrintF(buffer, "%.16g", value()); |
1919 accumulator->Add("%s", buffer.start()); | 1925 accumulator->Add("%s", buffer.start()); |
1920 } | 1926 } |
1921 | 1927 |
1922 | 1928 |
1923 String* JSReceiver::class_name() { | 1929 String* JSReceiver::class_name() { |
1924 if (IsJSFunction() && IsJSFunctionProxy()) { | 1930 if (IsJSFunction() && IsJSFunctionProxy()) { |
1925 return GetHeap()->function_class_string(); | 1931 return GetHeap()->function_class_string(); |
1926 } | 1932 } |
1927 if (map()->constructor()->IsJSFunction()) { | 1933 if (map()->constructor()->IsJSFunction()) { |
1928 JSFunction* constructor = JSFunction::cast(map()->constructor()); | 1934 JSFunction* constructor = JSFunction::cast(map()->constructor()); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2028 Representation representation = value->OptimalRepresentation(value_type); | 2034 Representation representation = value->OptimalRepresentation(value_type); |
2029 Handle<Map> new_map = CopyAddFieldDescriptor( | 2035 Handle<Map> new_map = CopyAddFieldDescriptor( |
2030 handle(object->map()), name, index, attributes, representation, flag); | 2036 handle(object->map()), name, index, attributes, representation, flag); |
2031 | 2037 |
2032 JSObject::MigrateToMap(object, new_map); | 2038 JSObject::MigrateToMap(object, new_map); |
2033 | 2039 |
2034 if (representation.IsDouble()) { | 2040 if (representation.IsDouble()) { |
2035 // Nothing more to be done. | 2041 // Nothing more to be done. |
2036 if (value->IsUninitialized()) return; | 2042 if (value->IsUninitialized()) return; |
2037 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(index)); | 2043 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(index)); |
| 2044 ASSERT(box->IsMutableHeapNumber()); |
2038 box->set_value(value->Number()); | 2045 box->set_value(value->Number()); |
2039 } else { | 2046 } else { |
2040 object->FastPropertyAtPut(index, *value); | 2047 object->FastPropertyAtPut(index, *value); |
2041 } | 2048 } |
2042 } | 2049 } |
2043 | 2050 |
2044 | 2051 |
2045 static MaybeObject* CopyAddConstantDescriptor(Map* map, | 2052 static MaybeObject* CopyAddConstantDescriptor(Map* map, |
2046 Name* name, | 2053 Name* name, |
2047 Object* value, | 2054 Object* value, |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2320 if (target_number_of_fields != number_of_fields) return true; | 2327 if (target_number_of_fields != number_of_fields) return true; |
2321 | 2328 |
2322 // If smi descriptors were replaced by double descriptors, rewrite. | 2329 // If smi descriptors were replaced by double descriptors, rewrite. |
2323 DescriptorArray* old_desc = instance_descriptors(); | 2330 DescriptorArray* old_desc = instance_descriptors(); |
2324 DescriptorArray* new_desc = target->instance_descriptors(); | 2331 DescriptorArray* new_desc = target->instance_descriptors(); |
2325 int limit = NumberOfOwnDescriptors(); | 2332 int limit = NumberOfOwnDescriptors(); |
2326 for (int i = 0; i < limit; i++) { | 2333 for (int i = 0; i < limit; i++) { |
2327 if (new_desc->GetDetails(i).representation().IsDouble() && | 2334 if (new_desc->GetDetails(i).representation().IsDouble() && |
2328 !old_desc->GetDetails(i).representation().IsDouble()) { | 2335 !old_desc->GetDetails(i).representation().IsDouble()) { |
2329 return true; | 2336 return true; |
| 2337 } else if (old_desc->GetDetails(i).representation().IsDouble() && |
| 2338 !new_desc->GetDetails(i).representation().IsDouble()) { |
| 2339 return true; |
2330 } | 2340 } |
2331 } | 2341 } |
2332 | 2342 |
2333 // If no fields were added, and no inobject properties were removed, setting | 2343 // If no fields were added, and no inobject properties were removed, setting |
2334 // the map is sufficient. | 2344 // the map is sufficient. |
2335 if (target_inobject == inobject_properties()) return false; | 2345 if (target_inobject == inobject_properties()) return false; |
2336 // In-object slack tracking may have reduced the object size of the new map. | 2346 // In-object slack tracking may have reduced the object size of the new map. |
2337 // In that case, succeed if all existing fields were inobject, and they still | 2347 // In that case, succeed if all existing fields were inobject, and they still |
2338 // fit within the new inobject size. | 2348 // fit within the new inobject size. |
2339 ASSERT(target_inobject < inobject_properties()); | 2349 ASSERT(target_inobject < inobject_properties()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2402 Object* raw_value = old_details.type() == CONSTANT | 2412 Object* raw_value = old_details.type() == CONSTANT |
2403 ? old_descriptors->GetValue(i) | 2413 ? old_descriptors->GetValue(i) |
2404 : object->RawFastPropertyAt(old_descriptors->GetFieldIndex(i)); | 2414 : object->RawFastPropertyAt(old_descriptors->GetFieldIndex(i)); |
2405 Handle<Object> value(raw_value, isolate); | 2415 Handle<Object> value(raw_value, isolate); |
2406 if (!old_details.representation().IsDouble() && | 2416 if (!old_details.representation().IsDouble() && |
2407 details.representation().IsDouble()) { | 2417 details.representation().IsDouble()) { |
2408 if (old_details.representation().IsNone()) { | 2418 if (old_details.representation().IsNone()) { |
2409 value = handle(Smi::FromInt(0), isolate); | 2419 value = handle(Smi::FromInt(0), isolate); |
2410 } | 2420 } |
2411 value = NewStorageFor(isolate, value, details.representation()); | 2421 value = NewStorageFor(isolate, value, details.representation()); |
| 2422 } else if (old_details.representation().IsDouble() && |
| 2423 !details.representation().IsDouble()) { |
| 2424 Handle<HeapNumber> old_value = Handle<HeapNumber>::cast(value); |
| 2425 value = isolate->factory()->NewHeapNumber(old_value->value()); |
2412 } | 2426 } |
2413 ASSERT(!(details.representation().IsDouble() && value->IsSmi())); | 2427 ASSERT(!(details.representation().IsDouble() && value->IsSmi())); |
2414 int target_index = new_descriptors->GetFieldIndex(i) - inobject; | 2428 int target_index = new_descriptors->GetFieldIndex(i) - inobject; |
2415 if (target_index < 0) target_index += total_size; | 2429 if (target_index < 0) target_index += total_size; |
2416 array->set(target_index, *value); | 2430 array->set(target_index, *value); |
2417 } | 2431 } |
2418 | 2432 |
2419 for (int i = old_nof; i < new_nof; i++) { | 2433 for (int i = old_nof; i < new_nof; i++) { |
2420 PropertyDetails details = new_descriptors->GetDetails(i); | 2434 PropertyDetails details = new_descriptors->GetDetails(i); |
2421 if (details.type() != FIELD) continue; | 2435 if (details.type() != FIELD) continue; |
2422 if (details.representation().IsDouble()) { | 2436 if (details.representation().IsDouble()) { |
2423 int target_index = new_descriptors->GetFieldIndex(i) - inobject; | 2437 int target_index = new_descriptors->GetFieldIndex(i) - inobject; |
2424 if (target_index < 0) target_index += total_size; | 2438 if (target_index < 0) target_index += total_size; |
2425 Handle<Object> box = isolate->factory()->NewHeapNumber(0); | 2439 Handle<Object> box = isolate->factory()->NewMutableHeapNumber(0); |
2426 array->set(target_index, *box); | 2440 array->set(target_index, *box); |
2427 } | 2441 } |
2428 } | 2442 } |
2429 | 2443 |
2430 // From here on we cannot fail and we shouldn't GC anymore. | 2444 // From here on we cannot fail and we shouldn't GC anymore. |
2431 DisallowHeapAllocation no_allocation; | 2445 DisallowHeapAllocation no_allocation; |
2432 | 2446 |
2433 // Copy (real) inobject properties. If necessary, stop at number_of_fields to | 2447 // Copy (real) inobject properties. If necessary, stop at number_of_fields to |
2434 // avoid overwriting |one_pointer_filler_map|. | 2448 // avoid overwriting |one_pointer_filler_map|. |
2435 int limit = Min(inobject, number_of_fields); | 2449 int limit = Min(inobject, number_of_fields); |
(...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3912 descriptors = transition_map->instance_descriptors(); | 3926 descriptors = transition_map->instance_descriptors(); |
3913 details = descriptors->GetDetails(descriptor); | 3927 details = descriptors->GetDetails(descriptor); |
3914 | 3928 |
3915 if (details.type() != FIELD) return value; | 3929 if (details.type() != FIELD) return value; |
3916 | 3930 |
3917 int field_index = descriptors->GetFieldIndex(descriptor); | 3931 int field_index = descriptors->GetFieldIndex(descriptor); |
3918 if (details.representation().IsDouble()) { | 3932 if (details.representation().IsDouble()) { |
3919 // Nothing more to be done. | 3933 // Nothing more to be done. |
3920 if (value->IsUninitialized()) return value; | 3934 if (value->IsUninitialized()) return value; |
3921 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(field_index)); | 3935 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(field_index)); |
| 3936 ASSERT(box->IsMutableHeapNumber()); |
3922 box->set_value(value->Number()); | 3937 box->set_value(value->Number()); |
3923 } else { | 3938 } else { |
3924 object->FastPropertyAtPut(field_index, *value); | 3939 object->FastPropertyAtPut(field_index, *value); |
3925 } | 3940 } |
3926 | 3941 |
3927 return value; | 3942 return value; |
3928 } | 3943 } |
3929 | 3944 |
3930 | 3945 |
3931 static void SetPropertyToField(LookupResult* lookup, | 3946 static void SetPropertyToField(LookupResult* lookup, |
3932 Handle<Name> name, | 3947 Handle<Name> name, |
3933 Handle<Object> value) { | 3948 Handle<Object> value) { |
3934 Representation representation = lookup->representation(); | 3949 Representation representation = lookup->representation(); |
3935 if (!value->FitsRepresentation(representation) || | 3950 if (!value->FitsRepresentation(representation) || |
3936 lookup->type() == CONSTANT) { | 3951 lookup->type() == CONSTANT) { |
3937 JSObject::GeneralizeFieldRepresentation(handle(lookup->holder()), | 3952 JSObject::GeneralizeFieldRepresentation(handle(lookup->holder()), |
3938 lookup->GetDescriptorIndex(), | 3953 lookup->GetDescriptorIndex(), |
3939 value->OptimalRepresentation(), | 3954 value->OptimalRepresentation(), |
3940 FORCE_FIELD); | 3955 FORCE_FIELD); |
3941 DescriptorArray* desc = lookup->holder()->map()->instance_descriptors(); | 3956 DescriptorArray* desc = lookup->holder()->map()->instance_descriptors(); |
3942 int descriptor = lookup->GetDescriptorIndex(); | 3957 int descriptor = lookup->GetDescriptorIndex(); |
3943 representation = desc->GetDetails(descriptor).representation(); | 3958 representation = desc->GetDetails(descriptor).representation(); |
3944 } | 3959 } |
3945 | 3960 |
3946 if (representation.IsDouble()) { | 3961 if (representation.IsDouble()) { |
3947 HeapNumber* storage = HeapNumber::cast(lookup->holder()->RawFastPropertyAt( | 3962 HeapNumber* storage = HeapNumber::cast(lookup->holder()->RawFastPropertyAt( |
3948 lookup->GetFieldIndex().field_index())); | 3963 lookup->GetFieldIndex().field_index())); |
| 3964 ASSERT(storage->IsMutableHeapNumber()); |
3949 storage->set_value(value->Number()); | 3965 storage->set_value(value->Number()); |
3950 return; | 3966 return; |
3951 } | 3967 } |
3952 | 3968 |
3953 lookup->holder()->FastPropertyAtPut( | 3969 lookup->holder()->FastPropertyAtPut( |
3954 lookup->GetFieldIndex().field_index(), *value); | 3970 lookup->GetFieldIndex().field_index(), *value); |
3955 } | 3971 } |
3956 | 3972 |
3957 | 3973 |
3958 static void ConvertAndSetLocalProperty(LookupResult* lookup, | 3974 static void ConvertAndSetLocalProperty(LookupResult* lookup, |
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4589 Handle<Object> value(descs->GetConstant(i), isolate); | 4605 Handle<Object> value(descs->GetConstant(i), isolate); |
4590 PropertyDetails d = PropertyDetails( | 4606 PropertyDetails d = PropertyDetails( |
4591 details.attributes(), NORMAL, i + 1); | 4607 details.attributes(), NORMAL, i + 1); |
4592 dictionary = NameDictionaryAdd(dictionary, key, value, d); | 4608 dictionary = NameDictionaryAdd(dictionary, key, value, d); |
4593 break; | 4609 break; |
4594 } | 4610 } |
4595 case FIELD: { | 4611 case FIELD: { |
4596 Handle<Name> key(descs->GetKey(i)); | 4612 Handle<Name> key(descs->GetKey(i)); |
4597 Handle<Object> value( | 4613 Handle<Object> value( |
4598 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate); | 4614 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate); |
| 4615 if (details.representation().IsDouble()) { |
| 4616 ASSERT(value->IsMutableHeapNumber()); |
| 4617 Handle<HeapNumber> old = Handle<HeapNumber>::cast(value); |
| 4618 value = isolate->factory()->NewHeapNumber(old->value()); |
| 4619 } |
4599 PropertyDetails d = | 4620 PropertyDetails d = |
4600 PropertyDetails(details.attributes(), NORMAL, i + 1); | 4621 PropertyDetails(details.attributes(), NORMAL, i + 1); |
4601 dictionary = NameDictionaryAdd(dictionary, key, value, d); | 4622 dictionary = NameDictionaryAdd(dictionary, key, value, d); |
4602 break; | 4623 break; |
4603 } | 4624 } |
4604 case CALLBACKS: { | 4625 case CALLBACKS: { |
4605 Handle<Name> key(descs->GetKey(i)); | 4626 Handle<Name> key(descs->GetKey(i)); |
4606 Handle<Object> value(descs->GetCallbacksObject(i), isolate); | 4627 Handle<Object> value(descs->GetCallbacksObject(i), isolate); |
4607 PropertyDetails d = PropertyDetails( | 4628 PropertyDetails d = PropertyDetails( |
4608 details.attributes(), CALLBACKS, i + 1); | 4629 details.attributes(), CALLBACKS, i + 1); |
(...skipping 2008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6617 | 6638 |
6618 | 6639 |
6619 Object* JSObject::SlowReverseLookup(Object* value) { | 6640 Object* JSObject::SlowReverseLookup(Object* value) { |
6620 if (HasFastProperties()) { | 6641 if (HasFastProperties()) { |
6621 int number_of_own_descriptors = map()->NumberOfOwnDescriptors(); | 6642 int number_of_own_descriptors = map()->NumberOfOwnDescriptors(); |
6622 DescriptorArray* descs = map()->instance_descriptors(); | 6643 DescriptorArray* descs = map()->instance_descriptors(); |
6623 for (int i = 0; i < number_of_own_descriptors; i++) { | 6644 for (int i = 0; i < number_of_own_descriptors; i++) { |
6624 if (descs->GetType(i) == FIELD) { | 6645 if (descs->GetType(i) == FIELD) { |
6625 Object* property = RawFastPropertyAt(descs->GetFieldIndex(i)); | 6646 Object* property = RawFastPropertyAt(descs->GetFieldIndex(i)); |
6626 if (descs->GetDetails(i).representation().IsDouble()) { | 6647 if (descs->GetDetails(i).representation().IsDouble()) { |
6627 ASSERT(property->IsHeapNumber()); | 6648 ASSERT(property->IsMutableHeapNumber()); |
6628 if (value->IsNumber() && property->Number() == value->Number()) { | 6649 if (value->IsNumber() && property->Number() == value->Number()) { |
6629 return descs->GetKey(i); | 6650 return descs->GetKey(i); |
6630 } | 6651 } |
6631 } else if (property == value) { | 6652 } else if (property == value) { |
6632 return descs->GetKey(i); | 6653 return descs->GetKey(i); |
6633 } | 6654 } |
6634 } else if (descs->GetType(i) == CONSTANT) { | 6655 } else if (descs->GetType(i) == CONSTANT) { |
6635 if (descs->GetConstant(i) == value) { | 6656 if (descs->GetConstant(i) == value) { |
6636 return descs->GetKey(i); | 6657 return descs->GetKey(i); |
6637 } | 6658 } |
(...skipping 9725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16363 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16384 #define ERROR_MESSAGES_TEXTS(C, T) T, |
16364 static const char* error_messages_[] = { | 16385 static const char* error_messages_[] = { |
16365 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16386 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
16366 }; | 16387 }; |
16367 #undef ERROR_MESSAGES_TEXTS | 16388 #undef ERROR_MESSAGES_TEXTS |
16368 return error_messages_[reason]; | 16389 return error_messages_[reason]; |
16369 } | 16390 } |
16370 | 16391 |
16371 | 16392 |
16372 } } // namespace v8::internal | 16393 } } // namespace v8::internal |
OLD | NEW |