| Index: src/builtins.cc
|
| diff --git a/src/builtins.cc b/src/builtins.cc
|
| index f24f96d600037e0a9094934d8908ea1b0ecfceef..4979df20573ac7787fafbfb39005e7de2c3b1c57 100644
|
| --- a/src/builtins.cc
|
| +++ b/src/builtins.cc
|
| @@ -47,6 +47,13 @@ class BuiltinArguments : public Arguments {
|
| return Arguments::at<S>(index);
|
| }
|
|
|
| + Handle<Object> atOrUndefined(Isolate* isolate, int index) {
|
| + if (index >= length()) {
|
| + return isolate->factory()->undefined_value();
|
| + }
|
| + return at<Object>(index);
|
| + }
|
| +
|
| Handle<Object> receiver() {
|
| return Arguments::at<Object>(0);
|
| }
|
| @@ -1430,10 +1437,7 @@ BUILTIN(ArrayIsArray) {
|
| // ES6 19.1.2.1 Object.assign
|
| BUILTIN(ObjectAssign) {
|
| HandleScope scope(isolate);
|
| - Handle<Object> target =
|
| - args.length() > 1
|
| - ? args.at<Object>(1)
|
| - : Handle<Object>::cast(isolate->factory()->undefined_value());
|
| + Handle<Object> target = args.atOrUndefined(isolate, 1);
|
|
|
| // 1. Let to be ? ToObject(target).
|
| ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, target,
|
| @@ -1613,9 +1617,8 @@ BUILTIN(ReflectDeleteProperty) {
|
| // ES6 section 26.1.6 Reflect.get
|
| BUILTIN(ReflectGet) {
|
| HandleScope scope(isolate);
|
| - Handle<Object> undef = isolate->factory()->undefined_value();
|
| - Handle<Object> target = args.length() > 1 ? args.at<Object>(1) : undef;
|
| - Handle<Object> key = args.length() > 2 ? args.at<Object>(2) : undef;
|
| + Handle<Object> target = args.atOrUndefined(isolate, 1);
|
| + Handle<Object> key = args.atOrUndefined(isolate, 2);
|
| Handle<Object> receiver = args.length() > 3 ? args.at<Object>(3) : target;
|
|
|
| if (!target->IsJSReceiver()) {
|
| @@ -1774,10 +1777,9 @@ BUILTIN(ReflectPreventExtensions) {
|
| // ES6 section 26.1.13 Reflect.set
|
| BUILTIN(ReflectSet) {
|
| HandleScope scope(isolate);
|
| - Handle<Object> undef = isolate->factory()->undefined_value();
|
| - Handle<Object> target = args.length() > 1 ? args.at<Object>(1) : undef;
|
| - Handle<Object> key = args.length() > 2 ? args.at<Object>(2) : undef;
|
| - Handle<Object> value = args.length() > 3 ? args.at<Object>(3) : undef;
|
| + Handle<Object> target = args.atOrUndefined(isolate, 1);
|
| + Handle<Object> key = args.atOrUndefined(isolate, 2);
|
| + Handle<Object> value = args.atOrUndefined(isolate, 3);
|
| Handle<Object> receiver = args.length() > 4 ? args.at<Object>(4) : target;
|
|
|
| if (!target->IsJSReceiver()) {
|
| @@ -2053,18 +2055,8 @@ BUILTIN(ProxyConstructor) {
|
| BUILTIN(ProxyConstructor_ConstructStub) {
|
| HandleScope scope(isolate);
|
| DCHECK(isolate->proxy_function()->IsConstructor());
|
| - Handle<Object> target;
|
| - if (args.length() < 2) {
|
| - target = isolate->factory()->undefined_value();
|
| - } else {
|
| - target = args.at<Object>(1);
|
| - }
|
| - Handle<Object> handler;
|
| - if (args.length() < 3) {
|
| - handler = isolate->factory()->undefined_value();
|
| - } else {
|
| - handler = args.at<Object>(2);
|
| - }
|
| + Handle<Object> target = args.atOrUndefined(isolate, 1);
|
| + Handle<Object> handler = args.atOrUndefined(isolate, 2);
|
| // The ConstructStub is executed in the context of the caller, so we need
|
| // to enter the callee context first before raising an exception.
|
| isolate->set_context(args.target()->context());
|
|
|