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

Unified Diff: src/heap/heap.cc

Issue 475423003: Implement Function.prototype.toMethod. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Name for the last test Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap/heap.h ('k') | src/messages.js » ('j') | src/runtime.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index fd08c8292f812c8c3084fb699eb9f65dcc98b4a7..6881be085e73df5d23a7055e27302663d0cbc537 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -2877,6 +2877,7 @@ void Heap::CreateInitialObjects() {
set_observed_symbol(*factory->NewPrivateSymbol());
set_stack_trace_symbol(*factory->NewPrivateSymbol());
set_uninitialized_symbol(*factory->NewPrivateSymbol());
+ set_home_object_symbol(*factory->NewPrivateOwnSymbol());
Handle<SeededNumberDictionary> slow_element_dictionary =
SeededNumberDictionary::New(isolate(), 0, TENURED);
@@ -3679,10 +3680,6 @@ AllocationResult Heap::AllocateJSObject(JSFunction* constructor,
AllocationResult Heap::CopyJSObject(JSObject* source, AllocationSite* site) {
- // Never used to copy functions. If functions need to be copied we
- // have to be careful to clear the literals array.
- SLOW_DCHECK(!source->IsJSFunction());
-
// Make the clone.
Map* map = source->map();
int object_size = map->instance_size();
@@ -3756,6 +3753,29 @@ AllocationResult Heap::CopyJSObject(JSObject* source, AllocationSite* site) {
}
JSObject::cast(clone)->set_properties(prop, wb_mode);
}
+
+ // Clean up literals array.
+ if (source->IsJSFunction()) {
Toon Verwaest 2014/08/18 14:15:35 Are you sure this works? What code object does thi
Dmitry Lomov (no reviews) 2014/08/19 13:47:42 You are quite right, it is easy to write a test th
+ SLOW_DCHECK(clone->IsJSFunction());
+ JSFunction* source_fun = JSFunction::cast(source);
+ JSFunction* clone_fun = JSFunction::cast(clone);
+ SharedFunctionInfo* info = source_fun->shared();
+ if (!info->bound()) {
+ int num_literals = info->num_literals();
+ HeapObject* obj;
+ {
+ AllocationResult allocation = AllocateFixedArrayWithFiller(
+ num_literals, NOT_TENURED, undefined_value());
+ if (!allocation.To(&obj)) return allocation;
+ }
+ FixedArray* new_literals = FixedArray::cast(obj);
+ if (num_literals > 0) {
+ new_literals->set(JSFunction::kLiteralNativeContextIndex,
+ JSFunction::NativeContextFromLiterals(source_fun->literals()));
+ }
+ clone_fun->set_literals(new_literals);
+ }
+ }
// Return the new clone.
return clone;
}
« no previous file with comments | « src/heap/heap.h ('k') | src/messages.js » ('j') | src/runtime.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698