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

Side by Side Diff: src/objects.cc

Issue 16438010: Remove redudant deleted_count argument from EnqueueSpliceRecord (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 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
« no previous file with comments | « src/object-observe.js ('k') | src/v8natives.js » ('j') | 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 10827 matching lines...) Expand 10 before | Expand all | Expand 10 after
10838 PropertyAttributes attributes = object->GetLocalElementAttribute(index); 10838 PropertyAttributes attributes = object->GetLocalElementAttribute(index);
10839 ASSERT(attributes != ABSENT); 10839 ASSERT(attributes != ABSENT);
10840 if (attributes == DONT_DELETE) return false; 10840 if (attributes == DONT_DELETE) return false;
10841 old_values->Add(object->GetLocalElementAccessorPair(index) == NULL 10841 old_values->Add(object->GetLocalElementAccessorPair(index) == NULL
10842 ? Object::GetElement(object, index) 10842 ? Object::GetElement(object, index)
10843 : Handle<Object>::cast(isolate->factory()->the_hole_value())); 10843 : Handle<Object>::cast(isolate->factory()->the_hole_value()));
10844 indices->Add(index); 10844 indices->Add(index);
10845 return true; 10845 return true;
10846 } 10846 }
10847 10847
10848
10849 // TODO(rafaelw): Remove |delete_count| argument and rely on the length of
10850 // of |deleted|.
10851 static void EnqueueSpliceRecord(Handle<JSArray> object, 10848 static void EnqueueSpliceRecord(Handle<JSArray> object,
10852 uint32_t index, 10849 uint32_t index,
10853 Handle<JSArray> deleted, 10850 Handle<JSArray> deleted,
10854 uint32_t delete_count,
10855 uint32_t add_count) { 10851 uint32_t add_count) {
10856 Isolate* isolate = object->GetIsolate(); 10852 Isolate* isolate = object->GetIsolate();
10857 HandleScope scope(isolate); 10853 HandleScope scope(isolate);
10858 Handle<Object> index_object = isolate->factory()->NewNumberFromUint(index); 10854 Handle<Object> index_object = isolate->factory()->NewNumberFromUint(index);
10859 Handle<Object> delete_count_object =
10860 isolate->factory()->NewNumberFromUint(delete_count);
10861 Handle<Object> add_count_object = 10855 Handle<Object> add_count_object =
10862 isolate->factory()->NewNumberFromUint(add_count); 10856 isolate->factory()->NewNumberFromUint(add_count);
10863 10857
10864 Handle<Object> args[] = 10858 Handle<Object> args[] =
10865 { object, index_object, deleted, delete_count_object, add_count_object }; 10859 { object, index_object, deleted, add_count_object };
10866 10860
10867 bool threw; 10861 bool threw;
10868 Execution::Call(Handle<JSFunction>(isolate->observers_enqueue_splice()), 10862 Execution::Call(Handle<JSFunction>(isolate->observers_enqueue_splice()),
10869 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, 10863 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args,
10870 &threw); 10864 &threw);
10871 ASSERT(!threw); 10865 ASSERT(!threw);
10872 } 10866 }
10873 10867
10874 10868
10875 static void BeginPerformSplice(Handle<JSArray> object) { 10869 static void BeginPerformSplice(Handle<JSArray> object) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
10959 JSObject::EnqueueChangeRecord( 10953 JSObject::EnqueueChangeRecord(
10960 self, "updated", isolate->factory()->length_string(), 10954 self, "updated", isolate->factory()->length_string(),
10961 old_length_handle); 10955 old_length_handle);
10962 10956
10963 EndPerformSplice(self); 10957 EndPerformSplice(self);
10964 10958
10965 uint32_t index = Min(old_length, new_length); 10959 uint32_t index = Min(old_length, new_length);
10966 uint32_t add_count = new_length > old_length ? new_length - old_length : 0; 10960 uint32_t add_count = new_length > old_length ? new_length - old_length : 0;
10967 uint32_t delete_count = new_length < old_length ? old_length - new_length : 0; 10961 uint32_t delete_count = new_length < old_length ? old_length - new_length : 0;
10968 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); 10962 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0);
10969 if (delete_count) { 10963 if (delete_count) {
rossberg 2013/06/06 09:12:05 Nit: can we make this del_cnt > 0?
rafaelw 2013/06/06 18:44:41 Done.
10970 for (int i = indices.length() - 1; i >= 0; i--) { 10964 for (int i = indices.length() - 1; i >= 0; i--) {
10971 JSObject::SetElement(deleted, indices[i] - index, old_values[i], NONE, 10965 JSObject::SetElement(deleted, indices[i] - index, old_values[i], NONE,
10972 kNonStrictMode); 10966 kNonStrictMode);
10973 } 10967 }
10974 } 10968 }
10975 10969
10976 EnqueueSpliceRecord(self, index, deleted, delete_count, add_count); 10970 SetProperty(deleted, isolate->factory()->length_string(),
adamk 2013/06/05 17:22:03 This can go inside the if (delete_count) block. I
rafaelw 2013/06/06 18:44:41 Done.
10971 isolate->factory()->NewNumberFromUint(delete_count),
10972 NONE, kNonStrictMode);
10973 EnqueueSpliceRecord(self, index, deleted, add_count);
10977 10974
10978 return *hresult; 10975 return *hresult;
10979 } 10976 }
10980 10977
10981 10978
10982 Map* Map::GetPrototypeTransition(Object* prototype) { 10979 Map* Map::GetPrototypeTransition(Object* prototype) {
10983 FixedArray* cache = GetPrototypeTransitions(); 10980 FixedArray* cache = GetPrototypeTransitions();
10984 int number_of_transitions = NumberOfProtoTransitions(); 10981 int number_of_transitions = NumberOfProtoTransitions();
10985 const int proto_offset = 10982 const int proto_offset =
10986 kProtoTransitionHeaderSize + kProtoTransitionPrototypeOffset; 10983 kProtoTransitionHeaderSize + kProtoTransitionPrototypeOffset;
(...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after
12032 uint32_t new_length = 0; 12029 uint32_t new_length = 0;
12033 CHECK(old_length_handle->ToArrayIndex(&old_length)); 12030 CHECK(old_length_handle->ToArrayIndex(&old_length));
12034 CHECK(new_length_handle->ToArrayIndex(&new_length)); 12031 CHECK(new_length_handle->ToArrayIndex(&new_length));
12035 12032
12036 BeginPerformSplice(Handle<JSArray>::cast(self)); 12033 BeginPerformSplice(Handle<JSArray>::cast(self));
12037 EnqueueChangeRecord(self, "new", name, old_value); 12034 EnqueueChangeRecord(self, "new", name, old_value);
12038 EnqueueChangeRecord(self, "updated", isolate->factory()->length_string(), 12035 EnqueueChangeRecord(self, "updated", isolate->factory()->length_string(),
12039 old_length_handle); 12036 old_length_handle);
12040 EndPerformSplice(Handle<JSArray>::cast(self)); 12037 EndPerformSplice(Handle<JSArray>::cast(self));
12041 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); 12038 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0);
12042 EnqueueSpliceRecord(Handle<JSArray>::cast(self), old_length, deleted, 0, 12039 EnqueueSpliceRecord(Handle<JSArray>::cast(self), old_length, deleted,
12043 new_length - old_length); 12040 new_length - old_length);
12044 } else { 12041 } else {
12045 EnqueueChangeRecord(self, "new", name, old_value); 12042 EnqueueChangeRecord(self, "new", name, old_value);
12046 } 12043 }
12047 } else if (old_value->IsTheHole()) { 12044 } else if (old_value->IsTheHole()) {
12048 EnqueueChangeRecord(self, "reconfigured", name, old_value); 12045 EnqueueChangeRecord(self, "reconfigured", name, old_value);
12049 } else { 12046 } else {
12050 Handle<Object> new_value = Object::GetElement(self, index); 12047 Handle<Object> new_value = Object::GetElement(self, index);
12051 bool value_changed = !old_value->SameValue(*new_value); 12048 bool value_changed = !old_value->SameValue(*new_value);
12052 if (old_attributes != new_attributes) { 12049 if (old_attributes != new_attributes) {
(...skipping 3605 matching lines...) Expand 10 before | Expand all | Expand 10 after
15658 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); 15655 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER);
15659 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); 15656 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER);
15660 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); 15657 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER);
15661 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); 15658 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER);
15662 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); 15659 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER);
15663 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); 15660 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER);
15664 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); 15661 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER);
15665 } 15662 }
15666 15663
15667 } } // namespace v8::internal 15664 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/object-observe.js ('k') | src/v8natives.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698