Chromium Code Reviews| 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); |