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

Side by Side Diff: src/objects.cc

Issue 8103: - Fixed performance regression caused by ComputeContextSlotReceiver.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 2562 matching lines...) Expand 10 before | Expand all | Expand 10 after
2573 int extra = 0; 2573 int extra = 0;
2574 for (int y = 0; y < len1; y++) { 2574 for (int y = 0; y < len1; y++) {
2575 if (!HasKey(this, other->get(y))) extra++; 2575 if (!HasKey(this, other->get(y))) extra++;
2576 } 2576 }
2577 2577
2578 // Allocate the result 2578 // Allocate the result
2579 Object* obj = Heap::AllocateFixedArray(len0 + extra); 2579 Object* obj = Heap::AllocateFixedArray(len0 + extra);
2580 if (obj->IsFailure()) return obj; 2580 if (obj->IsFailure()) return obj;
2581 // Fill in the content 2581 // Fill in the content
2582 FixedArray* result = FixedArray::cast(obj); 2582 FixedArray* result = FixedArray::cast(obj);
2583 WriteBarrierMode mode = result->GetWriteBarrierMode();
2583 for (int i = 0; i < len0; i++) { 2584 for (int i = 0; i < len0; i++) {
2584 result->set(i, get(i)); 2585 result->set(i, get(i), mode);
2585 } 2586 }
2586 // Fill in the extra keys. 2587 // Fill in the extra keys.
2587 int index = 0; 2588 int index = 0;
2588 for (int y = 0; y < len1; y++) { 2589 for (int y = 0; y < len1; y++) {
2589 if (!HasKey(this, other->get(y))) { 2590 if (!HasKey(this, other->get(y))) {
2590 result->set(len0 + index, other->get(y)); 2591 result->set(len0 + index, other->get(y), mode);
2591 index++; 2592 index++;
2592 } 2593 }
2593 } 2594 }
2594 ASSERT(extra == index); 2595 ASSERT(extra == index);
2595 return result; 2596 return result;
2596 } 2597 }
2597 2598
2598 2599
2599 Object* FixedArray::CopySize(int new_length) { 2600 Object* FixedArray::CopySize(int new_length) {
2600 if (new_length == 0) return Heap::empty_fixed_array(); 2601 if (new_length == 0) return Heap::empty_fixed_array();
2601 Object* obj = Heap::AllocateFixedArray(new_length); 2602 Object* obj = Heap::AllocateFixedArray(new_length);
2602 if (obj->IsFailure()) return obj; 2603 if (obj->IsFailure()) return obj;
2603 FixedArray* result = FixedArray::cast(obj); 2604 FixedArray* result = FixedArray::cast(obj);
2604 WriteBarrierMode mode = result->GetWriteBarrierMode();
2605 // Copy the content 2605 // Copy the content
2606 int len = length(); 2606 int len = length();
2607 if (new_length < len) len = new_length; 2607 if (new_length < len) len = new_length;
2608 result->set_map(map());
2609 WriteBarrierMode mode = result->GetWriteBarrierMode();
2608 for (int i = 0; i < len; i++) { 2610 for (int i = 0; i < len; i++) {
2609 result->set(i, get(i), mode); 2611 result->set(i, get(i), mode);
2610 } 2612 }
2611 result->set_map(map());
2612 return result; 2613 return result;
2613 } 2614 }
2614 2615
2615 2616
2616 void FixedArray::CopyTo(int pos, FixedArray* dest, int dest_pos, int len) { 2617 void FixedArray::CopyTo(int pos, FixedArray* dest, int dest_pos, int len) {
2617 WriteBarrierMode mode = dest->GetWriteBarrierMode(); 2618 WriteBarrierMode mode = dest->GetWriteBarrierMode();
2618 for (int index = 0; index < len; index++) { 2619 for (int index = 0; index < len; index++) {
2619 dest->set(dest_pos+index, get(pos+index), mode); 2620 dest->set(dest_pos+index, get(pos+index), mode);
2620 } 2621 }
2621 } 2622 }
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after
4040 } 4041 }
4041 } 4042 }
4042 4043
4043 4044
4044 void Map::MapIterateBody(ObjectVisitor* v) { 4045 void Map::MapIterateBody(ObjectVisitor* v) {
4045 // Assumes all Object* members are contiguously allocated! 4046 // Assumes all Object* members are contiguously allocated!
4046 IteratePointers(v, kPrototypeOffset, kCodeCacheOffset + kPointerSize); 4047 IteratePointers(v, kPrototypeOffset, kCodeCacheOffset + kPointerSize);
4047 } 4048 }
4048 4049
4049 4050
4050 int JSFunction::NumberOfLiterals() {
4051 return literals()->length();
4052 }
4053
4054
4055 Object* JSFunction::SetInstancePrototype(Object* value) { 4051 Object* JSFunction::SetInstancePrototype(Object* value) {
4056 ASSERT(value->IsJSObject()); 4052 ASSERT(value->IsJSObject());
4057 4053
4058 if (has_initial_map()) { 4054 if (has_initial_map()) {
4059 initial_map()->set_prototype(value); 4055 initial_map()->set_prototype(value);
4060 } else { 4056 } else {
4061 // Put the value in the initial map field until an initial map is 4057 // Put the value in the initial map field until an initial map is
4062 // needed. At that point, a new initial map is created and the 4058 // needed. At that point, a new initial map is created and the
4063 // prototype is put into the initial map where it belongs. 4059 // prototype is put into the initial map where it belongs.
4064 set_prototype_or_initial_map(value); 4060 set_prototype_or_initial_map(value);
(...skipping 1902 matching lines...) Expand 10 before | Expand all | Expand 10 after
5967 MapNameKey key(map, name); 5963 MapNameKey key(map, name);
5968 Object* obj = EnsureCapacity(1, &key); 5964 Object* obj = EnsureCapacity(1, &key);
5969 if (obj->IsFailure()) return obj; 5965 if (obj->IsFailure()) return obj;
5970 Object* k = key.GetObject(); 5966 Object* k = key.GetObject();
5971 if (k->IsFailure()) return k; 5967 if (k->IsFailure()) return k;
5972 5968
5973 LookupCache* cache = reinterpret_cast<LookupCache*>(obj); 5969 LookupCache* cache = reinterpret_cast<LookupCache*>(obj);
5974 int entry = cache->FindInsertionEntry(k, key.Hash()); 5970 int entry = cache->FindInsertionEntry(k, key.Hash());
5975 int index = EntryToIndex(entry); 5971 int index = EntryToIndex(entry);
5976 cache->set(index, k); 5972 cache->set(index, k);
5977 cache->set(index + 1, Smi::FromInt(value)); 5973 cache->set(index + 1, Smi::FromInt(value), SKIP_WRITE_BARRIER);
5978 cache->ElementAdded(); 5974 cache->ElementAdded();
5979 return cache; 5975 return cache;
5980 } 5976 }
5981 5977
5982 5978
5983 Object* Dictionary::Allocate(int at_least_space_for) { 5979 Object* Dictionary::Allocate(int at_least_space_for) {
5984 Object* obj = DictionaryBase::Allocate(at_least_space_for); 5980 Object* obj = DictionaryBase::Allocate(at_least_space_for);
5985 // Initialize the next enumeration index. 5981 // Initialize the next enumeration index.
5986 if (!obj->IsFailure()) { 5982 if (!obj->IsFailure()) {
5987 Dictionary::cast(obj)-> 5983 Dictionary::cast(obj)->
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
6652 // No break point. 6648 // No break point.
6653 if (break_point_objects()->IsUndefined()) return 0; 6649 if (break_point_objects()->IsUndefined()) return 0;
6654 // Single beak point. 6650 // Single beak point.
6655 if (!break_point_objects()->IsFixedArray()) return 1; 6651 if (!break_point_objects()->IsFixedArray()) return 1;
6656 // Multiple break points. 6652 // Multiple break points.
6657 return FixedArray::cast(break_point_objects())->length(); 6653 return FixedArray::cast(break_point_objects())->length();
6658 } 6654 }
6659 6655
6660 6656
6661 } } // namespace v8::internal 6657 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698