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

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

Issue 2770753003: Migrate Object constructor to C++
Patch Set: Manually set ElementsKind 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..ddd3571816a2b4de59b19cc264e96fb02f79583b 100644
--- a/src/builtins/builtins-object.cc
+++ b/src/builtins/builtins-object.cc
@@ -15,9 +15,37 @@
namespace v8 {
namespace internal {
+static Object* ObjectConstructCommon(Isolate* isolate, Handle<Object> value) {
Benedikt Meurer 2017/03/30 08:33:22 Nit: Instead of static put this into an anonymous
rongjie 2017/03/30 09:08:22 Done.
+ if (value->IsNullOrUndefined(isolate)) {
+ Handle<JSObject> object =
+ isolate->factory()->NewJSObject(isolate->object_function(), TENURED);
Benedikt Meurer 2017/03/30 08:33:22 Don't use TENURED here, just omit the second param
rongjie 2017/03/30 09:08:22 Done.
+ object->map()->set_elements_kind(FAST_ELEMENTS);
Benedikt Meurer 2017/03/30 08:33:22 Remove this line.
rongjie 2017/03/30 09:08:22 Done. That was temp fix for mjsunit/elements-kind.
+ return *object;
+ }
+ 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