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

Unified Diff: src/builtins/builtins-object.cc

Issue 2770753003: Migrate Object constructor to C++
Patch Set: Ack comments Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins/builtins-object.cc
diff --git a/src/builtins/builtins-object.cc b/src/builtins/builtins-object.cc
index 8be615013c9ee8b17739790f3797e975361eff43..c54385d312e4d05db4b8831082376413bad5c5e6 100644
--- a/src/builtins/builtins-object.cc
+++ b/src/builtins/builtins-object.cc
@@ -15,9 +15,38 @@
namespace v8 {
namespace internal {
+namespace {
+
+Object* ObjectConstructCommon(Isolate* isolate, Handle<Object> value) {
+ if (value->IsNullOrUndefined(isolate)) {
+ return *isolate->factory()->NewJSObject(isolate->object_function());
+ }
+ RETURN_RESULT_OR_FAILURE(isolate, Object::ToObject(isolate, value));
+}
+
+}
+
// -----------------------------------------------------------------------------
// ES6 section 19.1 Object Objects
+// ES6 section 19.1.1.1 The Object Constructor for the [[Call]] case.
+BUILTIN(ObjectConstructor) {
+ HandleScope scope(isolate);
+ return ObjectConstructCommon(isolate, args.atOrUndefined(isolate, 1));
+}
+
+// ES6 section 19.1.1.1 The Object Constructor for the [[Construct]] case.
+BUILTIN(ObjectConstructor_ConstructStub) {
+ HandleScope scope(isolate);
+ Handle<JSFunction> target = args.target();
+ DCHECK(*target == target->native_context()->object_function());
+ Handle<JSReceiver> new_target = Handle<JSReceiver>::cast(args.new_target());
+ if (*new_target != *target) {
+ RETURN_RESULT_OR_FAILURE(isolate, JSObject::New(target, new_target));
+ }
+ return ObjectConstructCommon(isolate, args.atOrUndefined(isolate, 1));
+}
+
// ES6 19.1.2.1 Object.assign
BUILTIN(ObjectAssign) {
HandleScope scope(isolate);
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698