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

Side by Side Diff: src/objects.cc

Issue 85743002: Fix failing test test-api/CheckCOWArraysCreatedRuntimeCounter (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5720 matching lines...) Expand 10 before | Expand all | Expand 10 after
5731 isolate); 5731 isolate);
5732 break; 5732 break;
5733 }, 5733 },
5734 return Handle<JSObject>()); 5734 return Handle<JSObject>());
5735 } else { 5735 } else {
5736 copy = object; 5736 copy = object;
5737 } 5737 }
5738 5738
5739 ASSERT(copying || copy.is_identical_to(object)); 5739 ASSERT(copying || copy.is_identical_to(object));
5740 5740
5741 ElementsKind kind = copy->GetElementsKind();
5742 if (copying && IsFastSmiOrObjectElementsKind(kind) &&
5743 FixedArray::cast(copy->elements())->map() ==
5744 isolate->heap()->fixed_cow_array_map()) {
5745 isolate->counters()->cow_arrays_created_runtime()->Increment();
5746 }
5747
5741 if (!shallow) { 5748 if (!shallow) {
5742 HandleScope scope(isolate); 5749 HandleScope scope(isolate);
5743 5750
5744 // Deep copy local properties. 5751 // Deep copy local properties.
5745 if (copy->HasFastProperties()) { 5752 if (copy->HasFastProperties()) {
5746 Handle<DescriptorArray> descriptors(copy->map()->instance_descriptors()); 5753 Handle<DescriptorArray> descriptors(copy->map()->instance_descriptors());
5747 int limit = copy->map()->NumberOfOwnDescriptors(); 5754 int limit = copy->map()->NumberOfOwnDescriptors();
5748 for (int i = 0; i < limit; i++) { 5755 for (int i = 0; i < limit; i++) {
5749 PropertyDetails details = descriptors->GetDetails(i); 5756 PropertyDetails details = descriptors->GetDetails(i);
5750 if (details.type() != FIELD) continue; 5757 if (details.type() != FIELD) continue;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5786 CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetProperty( 5793 CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetProperty(
5787 copy, key_string, result, NONE, kNonStrictMode)); 5794 copy, key_string, result, NONE, kNonStrictMode));
5788 } 5795 }
5789 } 5796 }
5790 } 5797 }
5791 } 5798 }
5792 5799
5793 // Deep copy local elements. 5800 // Deep copy local elements.
5794 // Pixel elements cannot be created using an object literal. 5801 // Pixel elements cannot be created using an object literal.
5795 ASSERT(!copy->HasExternalArrayElements()); 5802 ASSERT(!copy->HasExternalArrayElements());
5796 switch (copy->GetElementsKind()) { 5803 switch (kind) {
5797 case FAST_SMI_ELEMENTS: 5804 case FAST_SMI_ELEMENTS:
5798 case FAST_ELEMENTS: 5805 case FAST_ELEMENTS:
5799 case FAST_HOLEY_SMI_ELEMENTS: 5806 case FAST_HOLEY_SMI_ELEMENTS:
5800 case FAST_HOLEY_ELEMENTS: { 5807 case FAST_HOLEY_ELEMENTS: {
5801 Handle<FixedArray> elements(FixedArray::cast(copy->elements())); 5808 Handle<FixedArray> elements(FixedArray::cast(copy->elements()));
5802 if (elements->map() == isolate->heap()->fixed_cow_array_map()) { 5809 if (elements->map() == isolate->heap()->fixed_cow_array_map()) {
5803 if (copying) {
5804 isolate->counters()->cow_arrays_created_runtime()->Increment();
5805 }
5806 #ifdef DEBUG 5810 #ifdef DEBUG
5807 for (int i = 0; i < elements->length(); i++) { 5811 for (int i = 0; i < elements->length(); i++) {
5808 ASSERT(!elements->get(i)->IsJSObject()); 5812 ASSERT(!elements->get(i)->IsJSObject());
5809 } 5813 }
5810 #endif 5814 #endif
5811 } else { 5815 } else {
5812 for (int i = 0; i < elements->length(); i++) { 5816 for (int i = 0; i < elements->length(); i++) {
5813 Handle<Object> value(elements->get(i), isolate); 5817 Handle<Object> value(elements->get(i), isolate);
5814 ASSERT(value->IsSmi() || 5818 ASSERT(value->IsSmi() ||
5815 value->IsTheHole() || 5819 value->IsTheHole() ||
(...skipping 10832 matching lines...) Expand 10 before | Expand all | Expand 10 after
16648 #define ERROR_MESSAGES_TEXTS(C, T) T, 16652 #define ERROR_MESSAGES_TEXTS(C, T) T,
16649 static const char* error_messages_[] = { 16653 static const char* error_messages_[] = {
16650 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16654 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16651 }; 16655 };
16652 #undef ERROR_MESSAGES_TEXTS 16656 #undef ERROR_MESSAGES_TEXTS
16653 return error_messages_[reason]; 16657 return error_messages_[reason];
16654 } 16658 }
16655 16659
16656 16660
16657 } } // namespace v8::internal 16661 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698