Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 3ab39abfcc7676d288c57bba9ff0d81672e6a51c..4d12a2359f711d30af780a15899795549b17f754 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -8210,12 +8210,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObjectFromBound) { |
} |
-RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObject) { |
- HandleScope scope(isolate); |
- ASSERT(args.length() == 1); |
- |
- Handle<Object> constructor = args.at<Object>(0); |
- |
+static MaybeObject* Runtime_NewObjectHelper(Isolate* isolate, |
+ Handle<Object> constructor, |
+ Handle<AllocationSite> site) { |
// If the constructor isn't a proper function we throw a type error. |
if (!constructor->IsJSFunction()) { |
Vector< Handle<Object> > arguments = HandleVector(&constructor, 1); |
@@ -8273,7 +8270,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObject) { |
shared->CompleteInobjectSlackTracking(); |
} |
- Handle<JSObject> result = isolate->factory()->NewJSObject(function); |
+ Handle<JSObject> result; |
+ if (site.is_null()) { |
+ result = isolate->factory()->NewJSObject(function); |
+ } else { |
+ result = isolate->factory()->NewJSObjectWithMemento(function, site); |
+ } |
RETURN_IF_EMPTY_HANDLE(isolate, result); |
isolate->counters()->constructed_objects()->Increment(); |
@@ -8283,6 +8285,34 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObject) { |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObject) { |
+ HandleScope scope(isolate); |
+ ASSERT(args.length() == 1); |
+ |
+ Handle<Object> constructor = args.at<Object>(0); |
+ return Runtime_NewObjectHelper(isolate, |
+ constructor, |
+ Handle<AllocationSite>::null()); |
+} |
+ |
+ |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObjectWithAllocationSite) { |
+ HandleScope scope(isolate); |
+ ASSERT(args.length() == 2); |
+ |
+ Handle<Object> constructor = args.at<Object>(1); |
+ // TODO(mvstanton): make this a real site |
Hannes Payer (out of office)
2014/02/18 16:24:26
ambiguous comment
mvstanton
2014/02/19 08:40:26
Done.
|
+ Handle<Object> feedback = args.at<Object>(0); |
+ Handle<AllocationSite> site; |
+ if (feedback->IsAllocationSite()) { |
+ site = Handle<AllocationSite>::cast(feedback); |
+ } |
+ return Runtime_NewObjectHelper(isolate, |
+ constructor, |
+ site); |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_FinalizeInstanceSize) { |
HandleScope scope(isolate); |
ASSERT(args.length() == 1); |