Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: src/objects.cc

Issue 211333002: Replace HeapNumber as doublebox with an explicit MutableHeapNumber. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 1710 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 String::cast(symbol->name())->StringShortPrint(accumulator); 1721 String::cast(symbol->name())->StringShortPrint(accumulator);
1722 } 1722 }
1723 accumulator->Add(">"); 1723 accumulator->Add(">");
1724 break; 1724 break;
1725 } 1725 }
1726 case HEAP_NUMBER_TYPE: 1726 case HEAP_NUMBER_TYPE:
1727 accumulator->Add("<Number: "); 1727 accumulator->Add("<Number: ");
1728 HeapNumber::cast(this)->HeapNumberPrint(accumulator); 1728 HeapNumber::cast(this)->HeapNumberPrint(accumulator);
1729 accumulator->Put('>'); 1729 accumulator->Put('>');
1730 break; 1730 break;
1731 case MUTABLE_HEAP_NUMBER_TYPE:
1732 accumulator->Add("<MutableNumber: ");
1733 HeapNumber::cast(this)->HeapNumberPrint(accumulator);
1734 accumulator->Put('>');
1735 break;
1731 case JS_PROXY_TYPE: 1736 case JS_PROXY_TYPE:
1732 accumulator->Add("<JSProxy>"); 1737 accumulator->Add("<JSProxy>");
1733 break; 1738 break;
1734 case JS_FUNCTION_PROXY_TYPE: 1739 case JS_FUNCTION_PROXY_TYPE:
1735 accumulator->Add("<JSFunctionProxy>"); 1740 accumulator->Add("<JSFunctionProxy>");
1736 break; 1741 break;
1737 case FOREIGN_TYPE: 1742 case FOREIGN_TYPE:
1738 accumulator->Add("<Foreign>"); 1743 accumulator->Add("<Foreign>");
1739 break; 1744 break;
1740 case CELL_TYPE: 1745 case CELL_TYPE:
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1844 Cell::BodyDescriptor::IterateBody(this, v); 1849 Cell::BodyDescriptor::IterateBody(this, v);
1845 break; 1850 break;
1846 case PROPERTY_CELL_TYPE: 1851 case PROPERTY_CELL_TYPE:
1847 PropertyCell::BodyDescriptor::IterateBody(this, v); 1852 PropertyCell::BodyDescriptor::IterateBody(this, v);
1848 break; 1853 break;
1849 case SYMBOL_TYPE: 1854 case SYMBOL_TYPE:
1850 Symbol::BodyDescriptor::IterateBody(this, v); 1855 Symbol::BodyDescriptor::IterateBody(this, v);
1851 break; 1856 break;
1852 1857
1853 case HEAP_NUMBER_TYPE: 1858 case HEAP_NUMBER_TYPE:
1859 case MUTABLE_HEAP_NUMBER_TYPE:
1854 case FILLER_TYPE: 1860 case FILLER_TYPE:
1855 case BYTE_ARRAY_TYPE: 1861 case BYTE_ARRAY_TYPE:
1856 case FREE_SPACE_TYPE: 1862 case FREE_SPACE_TYPE:
1857 break; 1863 break;
1858 1864
1859 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 1865 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
1860 case EXTERNAL_##TYPE##_ARRAY_TYPE: \ 1866 case EXTERNAL_##TYPE##_ARRAY_TYPE: \
1861 case FIXED_##TYPE##_ARRAY_TYPE: \ 1867 case FIXED_##TYPE##_ARRAY_TYPE: \
1862 break; 1868 break;
1863 1869
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1900 } 1906 }
1901 if (u.bits.exp == 0) { 1907 if (u.bits.exp == 0) {
1902 // Detect +0, and -0 for IEEE double precision floating point. 1908 // Detect +0, and -0 for IEEE double precision floating point.
1903 if ((u.bits.man_low | u.bits.man_high) == 0) return false; 1909 if ((u.bits.man_low | u.bits.man_high) == 0) return false;
1904 } 1910 }
1905 return true; 1911 return true;
1906 } 1912 }
1907 1913
1908 1914
1909 void HeapNumber::HeapNumberPrint(FILE* out) { 1915 void HeapNumber::HeapNumberPrint(FILE* out) {
1910 PrintF(out, "%.16g", Number()); 1916 PrintF(out, "%.16g", value());
1911 } 1917 }
1912 1918
1913 1919
1914 void HeapNumber::HeapNumberPrint(StringStream* accumulator) { 1920 void HeapNumber::HeapNumberPrint(StringStream* accumulator) {
1915 // The Windows version of vsnprintf can allocate when printing a %g string 1921 // The Windows version of vsnprintf can allocate when printing a %g string
1916 // into a buffer that may not be big enough. We don't want random memory 1922 // into a buffer that may not be big enough. We don't want random memory
1917 // allocation when producing post-crash stack traces, so we print into a 1923 // allocation when producing post-crash stack traces, so we print into a
1918 // buffer that is plenty big enough for any floating point number, then 1924 // buffer that is plenty big enough for any floating point number, then
1919 // print that using vsnprintf (which may truncate but never allocate if 1925 // print that using vsnprintf (which may truncate but never allocate if
1920 // there is no more space in the buffer). 1926 // there is no more space in the buffer).
1921 EmbeddedVector<char, 100> buffer; 1927 EmbeddedVector<char, 100> buffer;
1922 OS::SNPrintF(buffer, "%.16g", Number()); 1928 OS::SNPrintF(buffer, "%.16g", value());
1923 accumulator->Add("%s", buffer.start()); 1929 accumulator->Add("%s", buffer.start());
1924 } 1930 }
1925 1931
1926 1932
1927 String* JSReceiver::class_name() { 1933 String* JSReceiver::class_name() {
1928 if (IsJSFunction() && IsJSFunctionProxy()) { 1934 if (IsJSFunction() && IsJSFunctionProxy()) {
1929 return GetHeap()->function_class_string(); 1935 return GetHeap()->function_class_string();
1930 } 1936 }
1931 if (map()->constructor()->IsJSFunction()) { 1937 if (map()->constructor()->IsJSFunction()) {
1932 JSFunction* constructor = JSFunction::cast(map()->constructor()); 1938 JSFunction* constructor = JSFunction::cast(map()->constructor());
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 Representation representation = value->OptimalRepresentation(value_type); 2038 Representation representation = value->OptimalRepresentation(value_type);
2033 Handle<Map> new_map = CopyAddFieldDescriptor( 2039 Handle<Map> new_map = CopyAddFieldDescriptor(
2034 handle(object->map()), name, index, attributes, representation, flag); 2040 handle(object->map()), name, index, attributes, representation, flag);
2035 2041
2036 JSObject::MigrateToMap(object, new_map); 2042 JSObject::MigrateToMap(object, new_map);
2037 2043
2038 if (representation.IsDouble()) { 2044 if (representation.IsDouble()) {
2039 // Nothing more to be done. 2045 // Nothing more to be done.
2040 if (value->IsUninitialized()) return; 2046 if (value->IsUninitialized()) return;
2041 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(index)); 2047 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(index));
2048 ASSERT(box->IsMutableHeapNumber());
2042 box->set_value(value->Number()); 2049 box->set_value(value->Number());
2043 } else { 2050 } else {
2044 object->FastPropertyAtPut(index, *value); 2051 object->FastPropertyAtPut(index, *value);
2045 } 2052 }
2046 } 2053 }
2047 2054
2048 2055
2049 static MaybeObject* CopyAddConstantDescriptor(Map* map, 2056 static MaybeObject* CopyAddConstantDescriptor(Map* map,
2050 Name* name, 2057 Name* name,
2051 Object* value, 2058 Object* value,
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
2324 if (target_number_of_fields != number_of_fields) return true; 2331 if (target_number_of_fields != number_of_fields) return true;
2325 2332
2326 // If smi descriptors were replaced by double descriptors, rewrite. 2333 // If smi descriptors were replaced by double descriptors, rewrite.
2327 DescriptorArray* old_desc = instance_descriptors(); 2334 DescriptorArray* old_desc = instance_descriptors();
2328 DescriptorArray* new_desc = target->instance_descriptors(); 2335 DescriptorArray* new_desc = target->instance_descriptors();
2329 int limit = NumberOfOwnDescriptors(); 2336 int limit = NumberOfOwnDescriptors();
2330 for (int i = 0; i < limit; i++) { 2337 for (int i = 0; i < limit; i++) {
2331 if (new_desc->GetDetails(i).representation().IsDouble() && 2338 if (new_desc->GetDetails(i).representation().IsDouble() &&
2332 !old_desc->GetDetails(i).representation().IsDouble()) { 2339 !old_desc->GetDetails(i).representation().IsDouble()) {
2333 return true; 2340 return true;
2341 } else if (old_desc->GetDetails(i).representation().IsDouble() &&
2342 !new_desc->GetDetails(i).representation().IsDouble()) {
2343 return true;
2334 } 2344 }
2335 } 2345 }
2336 2346
2337 // If no fields were added, and no inobject properties were removed, setting 2347 // If no fields were added, and no inobject properties were removed, setting
2338 // the map is sufficient. 2348 // the map is sufficient.
2339 if (target_inobject == inobject_properties()) return false; 2349 if (target_inobject == inobject_properties()) return false;
2340 // In-object slack tracking may have reduced the object size of the new map. 2350 // In-object slack tracking may have reduced the object size of the new map.
2341 // In that case, succeed if all existing fields were inobject, and they still 2351 // In that case, succeed if all existing fields were inobject, and they still
2342 // fit within the new inobject size. 2352 // fit within the new inobject size.
2343 ASSERT(target_inobject < inobject_properties()); 2353 ASSERT(target_inobject < inobject_properties());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2406 Object* raw_value = old_details.type() == CONSTANT 2416 Object* raw_value = old_details.type() == CONSTANT
2407 ? old_descriptors->GetValue(i) 2417 ? old_descriptors->GetValue(i)
2408 : object->RawFastPropertyAt(old_descriptors->GetFieldIndex(i)); 2418 : object->RawFastPropertyAt(old_descriptors->GetFieldIndex(i));
2409 Handle<Object> value(raw_value, isolate); 2419 Handle<Object> value(raw_value, isolate);
2410 if (!old_details.representation().IsDouble() && 2420 if (!old_details.representation().IsDouble() &&
2411 details.representation().IsDouble()) { 2421 details.representation().IsDouble()) {
2412 if (old_details.representation().IsNone()) { 2422 if (old_details.representation().IsNone()) {
2413 value = handle(Smi::FromInt(0), isolate); 2423 value = handle(Smi::FromInt(0), isolate);
2414 } 2424 }
2415 value = NewStorageFor(isolate, value, details.representation()); 2425 value = NewStorageFor(isolate, value, details.representation());
2426 } else if (old_details.representation().IsDouble() &&
2427 !details.representation().IsDouble()) {
2428 Handle<HeapNumber> old_value = Handle<HeapNumber>::cast(value);
2429 value = isolate->factory()->NewHeapNumber(old_value->value());
2416 } 2430 }
2417 ASSERT(!(details.representation().IsDouble() && value->IsSmi())); 2431 ASSERT(!(details.representation().IsDouble() && value->IsSmi()));
2418 int target_index = new_descriptors->GetFieldIndex(i) - inobject; 2432 int target_index = new_descriptors->GetFieldIndex(i) - inobject;
2419 if (target_index < 0) target_index += total_size; 2433 if (target_index < 0) target_index += total_size;
2420 array->set(target_index, *value); 2434 array->set(target_index, *value);
2421 } 2435 }
2422 2436
2423 for (int i = old_nof; i < new_nof; i++) { 2437 for (int i = old_nof; i < new_nof; i++) {
2424 PropertyDetails details = new_descriptors->GetDetails(i); 2438 PropertyDetails details = new_descriptors->GetDetails(i);
2425 if (details.type() != FIELD) continue; 2439 if (details.type() != FIELD) continue;
2426 if (details.representation().IsDouble()) { 2440 if (details.representation().IsDouble()) {
2427 int target_index = new_descriptors->GetFieldIndex(i) - inobject; 2441 int target_index = new_descriptors->GetFieldIndex(i) - inobject;
2428 if (target_index < 0) target_index += total_size; 2442 if (target_index < 0) target_index += total_size;
2429 Handle<Object> box = isolate->factory()->NewHeapNumber(0); 2443 Handle<Object> box = isolate->factory()->NewHeapNumber(0, MUTABLE);
2430 array->set(target_index, *box); 2444 array->set(target_index, *box);
2431 } 2445 }
2432 } 2446 }
2433 2447
2434 // From here on we cannot fail and we shouldn't GC anymore. 2448 // From here on we cannot fail and we shouldn't GC anymore.
2435 DisallowHeapAllocation no_allocation; 2449 DisallowHeapAllocation no_allocation;
2436 2450
2437 // Copy (real) inobject properties. If necessary, stop at number_of_fields to 2451 // Copy (real) inobject properties. If necessary, stop at number_of_fields to
2438 // avoid overwriting |one_pointer_filler_map|. 2452 // avoid overwriting |one_pointer_filler_map|.
2439 int limit = Min(inobject, number_of_fields); 2453 int limit = Min(inobject, number_of_fields);
(...skipping 1475 matching lines...) Expand 10 before | Expand all | Expand 10 after
3915 descriptors = transition_map->instance_descriptors(); 3929 descriptors = transition_map->instance_descriptors();
3916 details = descriptors->GetDetails(descriptor); 3930 details = descriptors->GetDetails(descriptor);
3917 3931
3918 if (details.type() != FIELD) return value; 3932 if (details.type() != FIELD) return value;
3919 3933
3920 int field_index = descriptors->GetFieldIndex(descriptor); 3934 int field_index = descriptors->GetFieldIndex(descriptor);
3921 if (details.representation().IsDouble()) { 3935 if (details.representation().IsDouble()) {
3922 // Nothing more to be done. 3936 // Nothing more to be done.
3923 if (value->IsUninitialized()) return value; 3937 if (value->IsUninitialized()) return value;
3924 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(field_index)); 3938 HeapNumber* box = HeapNumber::cast(object->RawFastPropertyAt(field_index));
3939 ASSERT(box->IsMutableHeapNumber());
3925 box->set_value(value->Number()); 3940 box->set_value(value->Number());
3926 } else { 3941 } else {
3927 object->FastPropertyAtPut(field_index, *value); 3942 object->FastPropertyAtPut(field_index, *value);
3928 } 3943 }
3929 3944
3930 return value; 3945 return value;
3931 } 3946 }
3932 3947
3933 3948
3934 static void SetPropertyToField(LookupResult* lookup, 3949 static void SetPropertyToField(LookupResult* lookup,
3935 Handle<Name> name, 3950 Handle<Name> name,
3936 Handle<Object> value) { 3951 Handle<Object> value) {
3937 Representation representation = lookup->representation(); 3952 Representation representation = lookup->representation();
3938 if (!value->FitsRepresentation(representation) || 3953 if (!value->FitsRepresentation(representation) ||
3939 lookup->type() == CONSTANT) { 3954 lookup->type() == CONSTANT) {
3940 JSObject::GeneralizeFieldRepresentation(handle(lookup->holder()), 3955 JSObject::GeneralizeFieldRepresentation(handle(lookup->holder()),
3941 lookup->GetDescriptorIndex(), 3956 lookup->GetDescriptorIndex(),
3942 value->OptimalRepresentation(), 3957 value->OptimalRepresentation(),
3943 FORCE_FIELD); 3958 FORCE_FIELD);
3944 DescriptorArray* desc = lookup->holder()->map()->instance_descriptors(); 3959 DescriptorArray* desc = lookup->holder()->map()->instance_descriptors();
3945 int descriptor = lookup->GetDescriptorIndex(); 3960 int descriptor = lookup->GetDescriptorIndex();
3946 representation = desc->GetDetails(descriptor).representation(); 3961 representation = desc->GetDetails(descriptor).representation();
3947 } 3962 }
3948 3963
3949 if (representation.IsDouble()) { 3964 if (representation.IsDouble()) {
3950 HeapNumber* storage = HeapNumber::cast(lookup->holder()->RawFastPropertyAt( 3965 HeapNumber* storage = HeapNumber::cast(lookup->holder()->RawFastPropertyAt(
3951 lookup->GetFieldIndex().field_index())); 3966 lookup->GetFieldIndex().field_index()));
3967 ASSERT(storage->IsMutableHeapNumber());
3952 storage->set_value(value->Number()); 3968 storage->set_value(value->Number());
3953 return; 3969 return;
3954 } 3970 }
3955 3971
3956 lookup->holder()->FastPropertyAtPut( 3972 lookup->holder()->FastPropertyAtPut(
3957 lookup->GetFieldIndex().field_index(), *value); 3973 lookup->GetFieldIndex().field_index(), *value);
3958 } 3974 }
3959 3975
3960 3976
3961 static void ConvertAndSetLocalProperty(LookupResult* lookup, 3977 static void ConvertAndSetLocalProperty(LookupResult* lookup,
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
4592 Handle<Object> value(descs->GetConstant(i), isolate); 4608 Handle<Object> value(descs->GetConstant(i), isolate);
4593 PropertyDetails d = PropertyDetails( 4609 PropertyDetails d = PropertyDetails(
4594 details.attributes(), NORMAL, i + 1); 4610 details.attributes(), NORMAL, i + 1);
4595 dictionary = NameDictionaryAdd(dictionary, key, value, d); 4611 dictionary = NameDictionaryAdd(dictionary, key, value, d);
4596 break; 4612 break;
4597 } 4613 }
4598 case FIELD: { 4614 case FIELD: {
4599 Handle<Name> key(descs->GetKey(i)); 4615 Handle<Name> key(descs->GetKey(i));
4600 Handle<Object> value( 4616 Handle<Object> value(
4601 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate); 4617 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate);
4618 if (details.representation().IsDouble()) {
4619 ASSERT(value->IsMutableHeapNumber());
4620 Handle<HeapNumber> old = Handle<HeapNumber>::cast(value);
4621 value = isolate->factory()->NewHeapNumber(old->value());
4622 }
4602 PropertyDetails d = 4623 PropertyDetails d =
4603 PropertyDetails(details.attributes(), NORMAL, i + 1); 4624 PropertyDetails(details.attributes(), NORMAL, i + 1);
4604 dictionary = NameDictionaryAdd(dictionary, key, value, d); 4625 dictionary = NameDictionaryAdd(dictionary, key, value, d);
4605 break; 4626 break;
4606 } 4627 }
4607 case CALLBACKS: { 4628 case CALLBACKS: {
4608 Handle<Name> key(descs->GetKey(i)); 4629 Handle<Name> key(descs->GetKey(i));
4609 Handle<Object> value(descs->GetCallbacksObject(i), isolate); 4630 Handle<Object> value(descs->GetCallbacksObject(i), isolate);
4610 PropertyDetails d = PropertyDetails( 4631 PropertyDetails d = PropertyDetails(
4611 details.attributes(), CALLBACKS, i + 1); 4632 details.attributes(), CALLBACKS, i + 1);
(...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after
5634 } 5655 }
5635 5656
5636 5657
5637 Handle<JSObject> JSObject::Copy(Handle<JSObject> object) { 5658 Handle<JSObject> JSObject::Copy(Handle<JSObject> object) {
5638 Isolate* isolate = object->GetIsolate(); 5659 Isolate* isolate = object->GetIsolate();
5639 CALL_HEAP_FUNCTION(isolate, 5660 CALL_HEAP_FUNCTION(isolate,
5640 isolate->heap()->CopyJSObject(*object), JSObject); 5661 isolate->heap()->CopyJSObject(*object), JSObject);
5641 } 5662 }
5642 5663
5643 5664
5665 Handle<Object> JSObject::FastPropertyAt(Handle<JSObject> object,
5666 Representation representation,
5667 int index) {
5668 Isolate* isolate = object->GetIsolate();
5669 CALL_HEAP_FUNCTION(isolate,
5670 object->FastPropertyAt(representation, index), Object);
5671 }
5672
5673
5644 template<class ContextObject> 5674 template<class ContextObject>
5645 class JSObjectWalkVisitor { 5675 class JSObjectWalkVisitor {
5646 public: 5676 public:
5647 JSObjectWalkVisitor(ContextObject* site_context, bool copying, 5677 JSObjectWalkVisitor(ContextObject* site_context, bool copying,
5648 JSObject::DeepCopyHints hints) 5678 JSObject::DeepCopyHints hints)
5649 : site_context_(site_context), 5679 : site_context_(site_context),
5650 copying_(copying), 5680 copying_(copying),
5651 hints_(hints) {} 5681 hints_(hints) {}
5652 5682
5653 Handle<JSObject> StructureWalk(Handle<JSObject> object); 5683 Handle<JSObject> StructureWalk(Handle<JSObject> object);
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after
6623 6653
6624 6654
6625 Object* JSObject::SlowReverseLookup(Object* value) { 6655 Object* JSObject::SlowReverseLookup(Object* value) {
6626 if (HasFastProperties()) { 6656 if (HasFastProperties()) {
6627 int number_of_own_descriptors = map()->NumberOfOwnDescriptors(); 6657 int number_of_own_descriptors = map()->NumberOfOwnDescriptors();
6628 DescriptorArray* descs = map()->instance_descriptors(); 6658 DescriptorArray* descs = map()->instance_descriptors();
6629 for (int i = 0; i < number_of_own_descriptors; i++) { 6659 for (int i = 0; i < number_of_own_descriptors; i++) {
6630 if (descs->GetType(i) == FIELD) { 6660 if (descs->GetType(i) == FIELD) {
6631 Object* property = RawFastPropertyAt(descs->GetFieldIndex(i)); 6661 Object* property = RawFastPropertyAt(descs->GetFieldIndex(i));
6632 if (descs->GetDetails(i).representation().IsDouble()) { 6662 if (descs->GetDetails(i).representation().IsDouble()) {
6633 ASSERT(property->IsHeapNumber()); 6663 ASSERT(property->IsMutableHeapNumber());
6634 if (value->IsNumber() && property->Number() == value->Number()) { 6664 if (value->IsNumber() && property->Number() == value->Number()) {
6635 return descs->GetKey(i); 6665 return descs->GetKey(i);
6636 } 6666 }
6637 } else if (property == value) { 6667 } else if (property == value) {
6638 return descs->GetKey(i); 6668 return descs->GetKey(i);
6639 } 6669 }
6640 } else if (descs->GetType(i) == CONSTANT) { 6670 } else if (descs->GetType(i) == CONSTANT) {
6641 if (descs->GetConstant(i) == value) { 6671 if (descs->GetConstant(i) == value) {
6642 return descs->GetKey(i); 6672 return descs->GetKey(i);
6643 } 6673 }
(...skipping 9788 matching lines...) Expand 10 before | Expand all | Expand 10 after
16432 #define ERROR_MESSAGES_TEXTS(C, T) T, 16462 #define ERROR_MESSAGES_TEXTS(C, T) T,
16433 static const char* error_messages_[] = { 16463 static const char* error_messages_[] = {
16434 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16464 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16435 }; 16465 };
16436 #undef ERROR_MESSAGES_TEXTS 16466 #undef ERROR_MESSAGES_TEXTS
16437 return error_messages_[reason]; 16467 return error_messages_[reason];
16438 } 16468 }
16439 16469
16440 16470
16441 } } // namespace v8::internal 16471 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698