| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 93ec83fba8a445b54d25a1fe45447ec5dc0d784a..8c2dca4e829425086daa0874222a6b1c03e265a5 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -8954,125 +8954,110 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetConstructorDelegate) {
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewGlobalContext) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| ASSERT(args.length() == 2);
|
|
|
| - CONVERT_ARG_CHECKED(JSFunction, function, 0);
|
| - CONVERT_ARG_CHECKED(ScopeInfo, scope_info, 1);
|
| - Context* result;
|
| - MaybeObject* maybe_result =
|
| - isolate->heap()->AllocateGlobalContext(function, scope_info);
|
| - if (!maybe_result->To(&result)) return maybe_result;
|
| + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(ScopeInfo, scope_info, 1);
|
| + Handle<Context> result =
|
| + isolate->factory()->NewGlobalContext(function, scope_info);
|
|
|
| ASSERT(function->context() == isolate->context());
|
| ASSERT(function->context()->global_object() == result->global_object());
|
| - result->global_object()->set_global_context(result);
|
| -
|
| - return result; // non-failure
|
| + result->global_object()->set_global_context(*result);
|
| + return *result;
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewFunctionContext) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| ASSERT(args.length() == 1);
|
|
|
| - CONVERT_ARG_CHECKED(JSFunction, function, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
|
| int length = function->shared()->scope_info()->ContextLength();
|
| - return isolate->heap()->AllocateFunctionContext(length, function);
|
| + Handle<Context> context =
|
| + isolate->factory()->NewFunctionContext(length, function);
|
| + return *context;
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_PushWithContext) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| ASSERT(args.length() == 2);
|
| - JSReceiver* extension_object;
|
| + Handle<JSReceiver> extension_object;
|
| if (args[0]->IsJSReceiver()) {
|
| - extension_object = JSReceiver::cast(args[0]);
|
| + extension_object = args.at<JSReceiver>(0);
|
| } else {
|
| // Convert the object to a proper JavaScript object.
|
| - MaybeObject* maybe_js_object = args[0]->ToObject(isolate);
|
| - if (!maybe_js_object->To(&extension_object)) {
|
| - if (Failure::cast(maybe_js_object)->IsInternalError()) {
|
| - HandleScope scope(isolate);
|
| - Handle<Object> handle = args.at<Object>(0);
|
| - Handle<Object> result =
|
| - isolate->factory()->NewTypeError("with_expression",
|
| - HandleVector(&handle, 1));
|
| - return isolate->Throw(*result);
|
| - } else {
|
| - return maybe_js_object;
|
| - }
|
| + Handle<Object> object = isolate->factory()->ToObject(args.at<Object>(0));
|
| + if (object.is_null()) {
|
| + Handle<Object> handle = args.at<Object>(0);
|
| + Handle<Object> result =
|
| + isolate->factory()->NewTypeError("with_expression",
|
| + HandleVector(&handle, 1));
|
| + return isolate->Throw(*result);
|
| }
|
| + extension_object = Handle<JSReceiver>::cast(object);
|
| }
|
|
|
| - JSFunction* function;
|
| + 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 = isolate->context()->native_context()->closure();
|
| + function = handle(isolate->context()->native_context()->closure());
|
| } else {
|
| - function = JSFunction::cast(args[1]);
|
| + function = args.at<JSFunction>(1);
|
| }
|
|
|
| - Context* context;
|
| - MaybeObject* maybe_context =
|
| - isolate->heap()->AllocateWithContext(function,
|
| - isolate->context(),
|
| - extension_object);
|
| - if (!maybe_context->To(&context)) return maybe_context;
|
| - isolate->set_context(context);
|
| - return context;
|
| + Handle<Context> current(isolate->context());
|
| + Handle<Context> context = isolate->factory()->NewWithContext(
|
| + function, current, extension_object);
|
| + isolate->set_context(*context);
|
| + return *context;
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_PushCatchContext) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| ASSERT(args.length() == 3);
|
| - String* name = String::cast(args[0]);
|
| - Object* thrown_object = args[1];
|
| - JSFunction* function;
|
| + 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 = isolate->context()->native_context()->closure();
|
| + function = handle(isolate->context()->native_context()->closure());
|
| } else {
|
| - function = JSFunction::cast(args[2]);
|
| + function = args.at<JSFunction>(2);
|
| }
|
| - Context* context;
|
| - MaybeObject* maybe_context =
|
| - isolate->heap()->AllocateCatchContext(function,
|
| - isolate->context(),
|
| - name,
|
| - thrown_object);
|
| - if (!maybe_context->To(&context)) return maybe_context;
|
| - isolate->set_context(context);
|
| - return context;
|
| + Handle<Context> current(isolate->context());
|
| + Handle<Context> context = isolate->factory()->NewCatchContext(
|
| + function, current, name, thrown_object);
|
| + isolate->set_context(*context);
|
| + return *context;
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_PushBlockContext) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| ASSERT(args.length() == 2);
|
| - ScopeInfo* scope_info = ScopeInfo::cast(args[0]);
|
| - JSFunction* function;
|
| + 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 = isolate->context()->native_context()->closure();
|
| + function = handle(isolate->context()->native_context()->closure());
|
| } else {
|
| - function = JSFunction::cast(args[1]);
|
| - }
|
| - Context* context;
|
| - MaybeObject* maybe_context =
|
| - isolate->heap()->AllocateBlockContext(function,
|
| - isolate->context(),
|
| - scope_info);
|
| - if (!maybe_context->To(&context)) return maybe_context;
|
| - isolate->set_context(context);
|
| - return context;
|
| + function = args.at<JSFunction>(1);
|
| + }
|
| + Handle<Context> current(isolate->context());
|
| + Handle<Context> context = isolate->factory()->NewBlockContext(
|
| + function, current, scope_info);
|
| + isolate->set_context(*context);
|
| + return *context;
|
| }
|
|
|
|
|
|
|