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

Side by Side Diff: src/runtime.cc

Issue 206223003: JSArray::SetContent() handlified. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing review notes Created 6 years, 9 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/objects-inl.h ('k') | 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 3271 matching lines...) Expand 10 before | Expand all | Expand 10 after
3282 3282
3283 int length() { 3283 int length() {
3284 return length_; 3284 return length_;
3285 } 3285 }
3286 3286
3287 int capacity() { 3287 int capacity() {
3288 return array_->length(); 3288 return array_->length();
3289 } 3289 }
3290 3290
3291 Handle<JSArray> ToJSArray(Handle<JSArray> target_array) { 3291 Handle<JSArray> ToJSArray(Handle<JSArray> target_array) {
3292 Factory* factory = target_array->GetIsolate()->factory(); 3292 JSArray::SetContent(target_array, array_);
3293 factory->SetContent(target_array, array_);
3294 target_array->set_length(Smi::FromInt(length_)); 3293 target_array->set_length(Smi::FromInt(length_));
3295 return target_array; 3294 return target_array;
3296 } 3295 }
3297 3296
3298 3297
3299 private: 3298 private:
3300 Handle<FixedArray> array_; 3299 Handle<FixedArray> array_;
3301 int length_; 3300 int length_;
3302 bool has_non_smi_elements_; 3301 bool has_non_smi_elements_;
3303 }; 3302 };
(...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after
4559 if (subject_length > kMinLengthToCache) { 4558 if (subject_length > kMinLengthToCache) {
4560 Handle<Object> cached_answer(RegExpResultsCache::Lookup( 4559 Handle<Object> cached_answer(RegExpResultsCache::Lookup(
4561 isolate->heap(), 4560 isolate->heap(),
4562 *subject, 4561 *subject,
4563 regexp->data(), 4562 regexp->data(),
4564 RegExpResultsCache::REGEXP_MULTIPLE_INDICES), isolate); 4563 RegExpResultsCache::REGEXP_MULTIPLE_INDICES), isolate);
4565 if (*cached_answer != Smi::FromInt(0)) { 4564 if (*cached_answer != Smi::FromInt(0)) {
4566 Handle<FixedArray> cached_fixed_array = 4565 Handle<FixedArray> cached_fixed_array =
4567 Handle<FixedArray>(FixedArray::cast(*cached_answer)); 4566 Handle<FixedArray>(FixedArray::cast(*cached_answer));
4568 // The cache FixedArray is a COW-array and can therefore be reused. 4567 // The cache FixedArray is a COW-array and can therefore be reused.
4569 isolate->factory()->SetContent(result_array, cached_fixed_array); 4568 JSArray::SetContent(result_array, cached_fixed_array);
4570 // The actual length of the result array is stored in the last element of 4569 // The actual length of the result array is stored in the last element of
4571 // the backing store (the backing FixedArray may have a larger capacity). 4570 // the backing store (the backing FixedArray may have a larger capacity).
4572 Object* cached_fixed_array_last_element = 4571 Object* cached_fixed_array_last_element =
4573 cached_fixed_array->get(cached_fixed_array->length() - 1); 4572 cached_fixed_array->get(cached_fixed_array->length() - 1);
4574 Smi* js_array_length = Smi::cast(cached_fixed_array_last_element); 4573 Smi* js_array_length = Smi::cast(cached_fixed_array_last_element);
4575 result_array->set_length(js_array_length); 4574 result_array->set_length(js_array_length);
4576 RegExpImpl::SetLastMatchInfo( 4575 RegExpImpl::SetLastMatchInfo(
4577 last_match_array, subject, capture_count, NULL); 4576 last_match_array, subject, capture_count, NULL);
4578 return *result_array; 4577 return *result_array;
4579 } 4578 }
(...skipping 5097 matching lines...) Expand 10 before | Expand all | Expand 10 after
9677 date_cache_version->set(0, Smi::FromInt(0)); 9676 date_cache_version->set(0, Smi::FromInt(0));
9678 isolate->eternal_handles()->CreateSingleton( 9677 isolate->eternal_handles()->CreateSingleton(
9679 isolate, *date_cache_version, EternalHandles::DATE_CACHE_VERSION); 9678 isolate, *date_cache_version, EternalHandles::DATE_CACHE_VERSION);
9680 } 9679 }
9681 Handle<FixedArray> date_cache_version = 9680 Handle<FixedArray> date_cache_version =
9682 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( 9681 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton(
9683 EternalHandles::DATE_CACHE_VERSION)); 9682 EternalHandles::DATE_CACHE_VERSION));
9684 // Return result as a JS array. 9683 // Return result as a JS array.
9685 Handle<JSObject> result = 9684 Handle<JSObject> result =
9686 isolate->factory()->NewJSObject(isolate->array_function()); 9685 isolate->factory()->NewJSObject(isolate->array_function());
9687 isolate->factory()->SetContent(Handle<JSArray>::cast(result), 9686 JSArray::SetContent(Handle<JSArray>::cast(result), date_cache_version);
9688 date_cache_version);
9689 return *result; 9687 return *result;
9690 } 9688 }
9691 9689
9692 9690
9693 RUNTIME_FUNCTION(MaybeObject*, Runtime_GlobalReceiver) { 9691 RUNTIME_FUNCTION(MaybeObject*, Runtime_GlobalReceiver) {
9694 SealHandleScope shs(isolate); 9692 SealHandleScope shs(isolate);
9695 ASSERT(args.length() == 1); 9693 ASSERT(args.length() == 1);
9696 Object* global = args[0]; 9694 Object* global = args[0];
9697 if (!global->IsJSGlobalObject()) return isolate->heap()->null_value(); 9695 if (!global->IsJSGlobalObject()) return isolate->heap()->null_value();
9698 return JSGlobalObject::cast(global)->global_receiver(); 9696 return JSGlobalObject::cast(global)->global_receiver();
(...skipping 3255 matching lines...) Expand 10 before | Expand all | Expand 10 after
12954 // instances->set(i, *GetScriptWrapper(script)) 12952 // instances->set(i, *GetScriptWrapper(script))
12955 // is unsafe as GetScriptWrapper might call GC and the C++ compiler might 12953 // is unsafe as GetScriptWrapper might call GC and the C++ compiler might
12956 // already have dereferenced the instances handle. 12954 // already have dereferenced the instances handle.
12957 Handle<JSValue> wrapper = GetScriptWrapper(script); 12955 Handle<JSValue> wrapper = GetScriptWrapper(script);
12958 instances->set(i, *wrapper); 12956 instances->set(i, *wrapper);
12959 } 12957 }
12960 12958
12961 // Return result as a JS array. 12959 // Return result as a JS array.
12962 Handle<JSObject> result = 12960 Handle<JSObject> result =
12963 isolate->factory()->NewJSObject(isolate->array_function()); 12961 isolate->factory()->NewJSObject(isolate->array_function());
12964 isolate->factory()->SetContent(Handle<JSArray>::cast(result), instances); 12962 JSArray::SetContent(Handle<JSArray>::cast(result), instances);
12965 return *result; 12963 return *result;
12966 } 12964 }
12967 12965
12968 12966
12969 // Helper function used by Runtime_DebugReferencedBy below. 12967 // Helper function used by Runtime_DebugReferencedBy below.
12970 static int DebugReferencedBy(HeapIterator* iterator, 12968 static int DebugReferencedBy(HeapIterator* iterator,
12971 JSObject* target, 12969 JSObject* target,
12972 Object* instance_filter, int max_references, 12970 Object* instance_filter, int max_references,
12973 FixedArray* instances, int instances_size, 12971 FixedArray* instances, int instances_size,
12974 JSFunction* arguments_function) { 12972 JSFunction* arguments_function) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
13084 HeapIterator heap_iterator2(heap); 13082 HeapIterator heap_iterator2(heap);
13085 count = DebugReferencedBy(&heap_iterator2, 13083 count = DebugReferencedBy(&heap_iterator2,
13086 *target, *instance_filter, max_references, 13084 *target, *instance_filter, max_references,
13087 *instances, count, *arguments_function); 13085 *instances, count, *arguments_function);
13088 13086
13089 // Return result as JS array. 13087 // Return result as JS array.
13090 Handle<JSFunction> constructor( 13088 Handle<JSFunction> constructor(
13091 isolate->context()->native_context()->array_function()); 13089 isolate->context()->native_context()->array_function());
13092 13090
13093 Handle<JSObject> result = isolate->factory()->NewJSObject(constructor); 13091 Handle<JSObject> result = isolate->factory()->NewJSObject(constructor);
13094 isolate->factory()->SetContent(Handle<JSArray>::cast(result), instances); 13092 JSArray::SetContent(Handle<JSArray>::cast(result), instances);
13095 return *result; 13093 return *result;
13096 } 13094 }
13097 13095
13098 13096
13099 // Helper function used by Runtime_DebugConstructedBy below. 13097 // Helper function used by Runtime_DebugConstructedBy below.
13100 static int DebugConstructedBy(HeapIterator* iterator, 13098 static int DebugConstructedBy(HeapIterator* iterator,
13101 JSFunction* constructor, 13099 JSFunction* constructor,
13102 int max_references, 13100 int max_references,
13103 FixedArray* instances, 13101 FixedArray* instances,
13104 int instances_size) { 13102 int instances_size) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
13162 count = DebugConstructedBy(&heap_iterator2, 13160 count = DebugConstructedBy(&heap_iterator2,
13163 *constructor, 13161 *constructor,
13164 max_references, 13162 max_references,
13165 *instances, 13163 *instances,
13166 count); 13164 count);
13167 13165
13168 // Return result as JS array. 13166 // Return result as JS array.
13169 Handle<JSFunction> array_function( 13167 Handle<JSFunction> array_function(
13170 isolate->context()->native_context()->array_function()); 13168 isolate->context()->native_context()->array_function());
13171 Handle<JSObject> result = isolate->factory()->NewJSObject(array_function); 13169 Handle<JSObject> result = isolate->factory()->NewJSObject(array_function);
13172 isolate->factory()->SetContent(Handle<JSArray>::cast(result), instances); 13170 JSArray::SetContent(Handle<JSArray>::cast(result), instances);
13173 return *result; 13171 return *result;
13174 } 13172 }
13175 13173
13176 13174
13177 // Find the effective prototype object as returned by __proto__. 13175 // Find the effective prototype object as returned by __proto__.
13178 // args[0]: the object to find the prototype for. 13176 // args[0]: the object to find the prototype for.
13179 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPrototype) { 13177 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPrototype) {
13180 SealHandleScope shs(isolate); 13178 SealHandleScope shs(isolate);
13181 ASSERT(args.length() == 1); 13179 ASSERT(args.length() == 1);
13182 CONVERT_ARG_CHECKED(JSObject, obj, 0); 13180 CONVERT_ARG_CHECKED(JSObject, obj, 0);
(...skipping 1844 matching lines...) Expand 10 before | Expand all | Expand 10 after
15027 // Handle last resort GC and make sure to allow future allocations 15025 // Handle last resort GC and make sure to allow future allocations
15028 // to grow the heap without causing GCs (if possible). 15026 // to grow the heap without causing GCs (if possible).
15029 isolate->counters()->gc_last_resort_from_js()->Increment(); 15027 isolate->counters()->gc_last_resort_from_js()->Increment();
15030 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 15028 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
15031 "Runtime::PerformGC"); 15029 "Runtime::PerformGC");
15032 } 15030 }
15033 } 15031 }
15034 15032
15035 15033
15036 } } // namespace v8::internal 15034 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698