Index: src/runtime/runtime-scopes.cc |
diff --git a/src/runtime/runtime-scopes.cc b/src/runtime/runtime-scopes.cc |
index 3cca35b14aef2153a95740fb62ba029c9c013789..84e0937c09ed5c70a860d1d78d1bee89609fdcc6 100644 |
--- a/src/runtime/runtime-scopes.cc |
+++ b/src/runtime/runtime-scopes.cc |
@@ -705,31 +705,14 @@ RUNTIME_FUNCTION(Runtime_NewFunctionContext) { |
RUNTIME_FUNCTION(Runtime_PushWithContext) { |
HandleScope scope(isolate); |
- DCHECK(args.length() == 2); |
+ DCHECK_EQ(2, args.length()); |
+ CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); |
+ CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 1); |
Handle<JSReceiver> extension_object; |
- if (args[0]->IsJSReceiver()) { |
- extension_object = args.at<JSReceiver>(0); |
- } else { |
- // Try to convert the object to a proper JavaScript object. |
- MaybeHandle<JSReceiver> maybe_object = |
- Object::ToObject(isolate, args.at<Object>(0)); |
- if (!maybe_object.ToHandle(&extension_object)) { |
- Handle<Object> handle = args.at<Object>(0); |
- THROW_NEW_ERROR_RETURN_FAILURE( |
- isolate, NewTypeError(MessageTemplate::kWithExpression, handle)); |
- } |
- } |
- |
- Handle<JSFunction> function; |
- if (args[1]->IsSmi()) { |
- // A smi sentinel indicates a context nested inside global code rather |
- // than some function. There is a canonical empty function that can be |
- // gotten from the native context. |
- function = handle(isolate->native_context()->closure()); |
- } else { |
- function = args.at<JSFunction>(1); |
+ if (!Object::ToObject(isolate, value).ToHandle(&extension_object)) { |
+ THROW_NEW_ERROR_RETURN_FAILURE( |
+ isolate, NewTypeError(MessageTemplate::kUndefinedOrNullToObject)); |
} |
- |
Handle<Context> current(isolate->context()); |
Handle<Context> context = |
isolate->factory()->NewWithContext(function, current, extension_object); |
@@ -740,18 +723,10 @@ RUNTIME_FUNCTION(Runtime_PushWithContext) { |
RUNTIME_FUNCTION(Runtime_PushCatchContext) { |
HandleScope scope(isolate); |
- DCHECK(args.length() == 3); |
+ DCHECK_EQ(3, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(String, name, 0); |
CONVERT_ARG_HANDLE_CHECKED(Object, thrown_object, 1); |
- Handle<JSFunction> function; |
- if (args[2]->IsSmi()) { |
- // A smi sentinel indicates a context nested inside global code rather |
- // than some function. There is a canonical empty function that can be |
- // gotten from the native context. |
- function = handle(isolate->native_context()->closure()); |
- } else { |
- function = args.at<JSFunction>(2); |
- } |
+ CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 2); |
Handle<Context> current(isolate->context()); |
Handle<Context> context = isolate->factory()->NewCatchContext( |
function, current, name, thrown_object); |
@@ -762,17 +737,9 @@ RUNTIME_FUNCTION(Runtime_PushCatchContext) { |
RUNTIME_FUNCTION(Runtime_PushBlockContext) { |
HandleScope scope(isolate); |
- DCHECK(args.length() == 2); |
+ DCHECK_EQ(2, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(ScopeInfo, scope_info, 0); |
- Handle<JSFunction> function; |
- if (args[1]->IsSmi()) { |
- // A smi sentinel indicates a context nested inside global code rather |
- // than some function. There is a canonical empty function that can be |
- // gotten from the native context. |
- function = handle(isolate->native_context()->closure()); |
- } else { |
- function = args.at<JSFunction>(1); |
- } |
+ CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 1); |
Handle<Context> current(isolate->context()); |
Handle<Context> context = |
isolate->factory()->NewBlockContext(function, current, scope_info); |