OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1331 Handle<Object> error = | 1331 Handle<Object> error = |
1332 isolate->factory()->NewTypeError("redeclaration", HandleVector(args, 2)); | 1332 isolate->factory()->NewTypeError("redeclaration", HandleVector(args, 2)); |
1333 return isolate->Throw(*error); | 1333 return isolate->Throw(*error); |
1334 } | 1334 } |
1335 | 1335 |
1336 | 1336 |
1337 RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { | 1337 RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { |
1338 ASSERT(args.length() == 3); | 1338 ASSERT(args.length() == 3); |
1339 HandleScope scope(isolate); | 1339 HandleScope scope(isolate); |
1340 Handle<GlobalObject> global = Handle<GlobalObject>( | 1340 Handle<GlobalObject> global = Handle<GlobalObject>( |
1341 isolate->context()->global()); | 1341 isolate->context()->global_object()); |
1342 | 1342 |
1343 Handle<Context> context = args.at<Context>(0); | 1343 Handle<Context> context = args.at<Context>(0); |
1344 CONVERT_ARG_HANDLE_CHECKED(FixedArray, pairs, 1); | 1344 CONVERT_ARG_HANDLE_CHECKED(FixedArray, pairs, 1); |
1345 CONVERT_SMI_ARG_CHECKED(flags, 2); | 1345 CONVERT_SMI_ARG_CHECKED(flags, 2); |
1346 | 1346 |
1347 // Traverse the name/value pairs and set the properties. | 1347 // Traverse the name/value pairs and set the properties. |
1348 int length = pairs->length(); | 1348 int length = pairs->length(); |
1349 for (int i = 0; i < length; i += 2) { | 1349 for (int i = 0; i < length; i += 2) { |
1350 HandleScope scope(isolate); | 1350 HandleScope scope(isolate); |
1351 Handle<String> name(String::cast(pairs->get(i))); | 1351 Handle<String> name(String::cast(pairs->get(i))); |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1549 // args[0] == name | 1549 // args[0] == name |
1550 // args[1] == language_mode | 1550 // args[1] == language_mode |
1551 // args[2] == value (optional) | 1551 // args[2] == value (optional) |
1552 | 1552 |
1553 // Determine if we need to assign to the variable if it already | 1553 // Determine if we need to assign to the variable if it already |
1554 // exists (based on the number of arguments). | 1554 // exists (based on the number of arguments). |
1555 RUNTIME_ASSERT(args.length() == 2 || args.length() == 3); | 1555 RUNTIME_ASSERT(args.length() == 2 || args.length() == 3); |
1556 bool assign = args.length() == 3; | 1556 bool assign = args.length() == 3; |
1557 | 1557 |
1558 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | 1558 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); |
1559 GlobalObject* global = isolate->context()->global(); | 1559 GlobalObject* global = isolate->context()->global_object(); |
1560 RUNTIME_ASSERT(args[1]->IsSmi()); | 1560 RUNTIME_ASSERT(args[1]->IsSmi()); |
1561 CONVERT_LANGUAGE_MODE_ARG(language_mode, 1); | 1561 CONVERT_LANGUAGE_MODE_ARG(language_mode, 1); |
1562 StrictModeFlag strict_mode_flag = (language_mode == CLASSIC_MODE) | 1562 StrictModeFlag strict_mode_flag = (language_mode == CLASSIC_MODE) |
1563 ? kNonStrictMode : kStrictMode; | 1563 ? kNonStrictMode : kStrictMode; |
1564 | 1564 |
1565 // According to ECMA-262, section 12.2, page 62, the property must | 1565 // According to ECMA-262, section 12.2, page 62, the property must |
1566 // not be deletable. | 1566 // not be deletable. |
1567 PropertyAttributes attributes = DONT_DELETE; | 1567 PropertyAttributes attributes = DONT_DELETE; |
1568 | 1568 |
1569 // Lookup the property locally in the global object. If it isn't | 1569 // Lookup the property locally in the global object. If it isn't |
(...skipping 22 matching lines...) Expand all Loading... |
1592 &lookup, *name, args[2], attributes, strict_mode_flag); | 1592 &lookup, *name, args[2], attributes, strict_mode_flag); |
1593 } else { | 1593 } else { |
1594 return isolate->heap()->undefined_value(); | 1594 return isolate->heap()->undefined_value(); |
1595 } | 1595 } |
1596 } | 1596 } |
1597 } | 1597 } |
1598 object = raw_holder->GetPrototype(); | 1598 object = raw_holder->GetPrototype(); |
1599 } | 1599 } |
1600 | 1600 |
1601 // Reload global in case the loop above performed a GC. | 1601 // Reload global in case the loop above performed a GC. |
1602 global = isolate->context()->global(); | 1602 global = isolate->context()->global_object(); |
1603 if (assign) { | 1603 if (assign) { |
1604 return global->SetProperty(*name, args[2], attributes, strict_mode_flag); | 1604 return global->SetProperty(*name, args[2], attributes, strict_mode_flag); |
1605 } | 1605 } |
1606 return isolate->heap()->undefined_value(); | 1606 return isolate->heap()->undefined_value(); |
1607 } | 1607 } |
1608 | 1608 |
1609 | 1609 |
1610 RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { | 1610 RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { |
1611 // All constants are declared with an initial value. The name | 1611 // All constants are declared with an initial value. The name |
1612 // of the constant is the first argument and the initial value | 1612 // of the constant is the first argument and the initial value |
1613 // is the second. | 1613 // is the second. |
1614 RUNTIME_ASSERT(args.length() == 2); | 1614 RUNTIME_ASSERT(args.length() == 2); |
1615 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | 1615 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); |
1616 Handle<Object> value = args.at<Object>(1); | 1616 Handle<Object> value = args.at<Object>(1); |
1617 | 1617 |
1618 // Get the current global object from top. | 1618 // Get the current global object from top. |
1619 GlobalObject* global = isolate->context()->global(); | 1619 GlobalObject* global = isolate->context()->global_object(); |
1620 | 1620 |
1621 // According to ECMA-262, section 12.2, page 62, the property must | 1621 // According to ECMA-262, section 12.2, page 62, the property must |
1622 // not be deletable. Since it's a const, it must be READ_ONLY too. | 1622 // not be deletable. Since it's a const, it must be READ_ONLY too. |
1623 PropertyAttributes attributes = | 1623 PropertyAttributes attributes = |
1624 static_cast<PropertyAttributes>(DONT_DELETE | READ_ONLY); | 1624 static_cast<PropertyAttributes>(DONT_DELETE | READ_ONLY); |
1625 | 1625 |
1626 // Lookup the property locally in the global object. If it isn't | 1626 // Lookup the property locally in the global object. If it isn't |
1627 // there, we add the property and take special precautions to always | 1627 // there, we add the property and take special precautions to always |
1628 // add it as a local property even in case of callbacks in the | 1628 // add it as a local property even in case of callbacks in the |
1629 // prototype chain (this rules out using SetProperty). | 1629 // prototype chain (this rules out using SetProperty). |
1630 // We use SetLocalPropertyIgnoreAttributes instead | 1630 // We use SetLocalPropertyIgnoreAttributes instead |
1631 LookupResult lookup(isolate); | 1631 LookupResult lookup(isolate); |
1632 global->LocalLookup(*name, &lookup); | 1632 global->LocalLookup(*name, &lookup); |
1633 if (!lookup.IsFound()) { | 1633 if (!lookup.IsFound()) { |
1634 return global->SetLocalPropertyIgnoreAttributes(*name, | 1634 return global->SetLocalPropertyIgnoreAttributes(*name, |
1635 *value, | 1635 *value, |
1636 attributes); | 1636 attributes); |
1637 } | 1637 } |
1638 | 1638 |
1639 if (!lookup.IsReadOnly()) { | 1639 if (!lookup.IsReadOnly()) { |
1640 // Restore global object from context (in case of GC) and continue | 1640 // Restore global object from context (in case of GC) and continue |
1641 // with setting the value. | 1641 // with setting the value. |
1642 HandleScope handle_scope(isolate); | 1642 HandleScope handle_scope(isolate); |
1643 Handle<GlobalObject> global(isolate->context()->global()); | 1643 Handle<GlobalObject> global(isolate->context()->global_object()); |
1644 | 1644 |
1645 // BUG 1213575: Handle the case where we have to set a read-only | 1645 // BUG 1213575: Handle the case where we have to set a read-only |
1646 // property through an interceptor and only do it if it's | 1646 // property through an interceptor and only do it if it's |
1647 // uninitialized, e.g. the hole. Nirk... | 1647 // uninitialized, e.g. the hole. Nirk... |
1648 // Passing non-strict mode because the property is writable. | 1648 // Passing non-strict mode because the property is writable. |
1649 RETURN_IF_EMPTY_HANDLE( | 1649 RETURN_IF_EMPTY_HANDLE( |
1650 isolate, | 1650 isolate, |
1651 JSReceiver::SetProperty(global, name, value, attributes, | 1651 JSReceiver::SetProperty(global, name, value, attributes, |
1652 kNonStrictMode)); | 1652 kNonStrictMode)); |
1653 return *value; | 1653 return *value; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1707 if ((attributes & READ_ONLY) == 0 || context->get(index)->IsTheHole()) { | 1707 if ((attributes & READ_ONLY) == 0 || context->get(index)->IsTheHole()) { |
1708 context->set(index, *value); | 1708 context->set(index, *value); |
1709 } | 1709 } |
1710 return *value; | 1710 return *value; |
1711 } | 1711 } |
1712 | 1712 |
1713 // The property could not be found, we introduce it as a property of the | 1713 // The property could not be found, we introduce it as a property of the |
1714 // global object. | 1714 // global object. |
1715 if (attributes == ABSENT) { | 1715 if (attributes == ABSENT) { |
1716 Handle<JSObject> global = Handle<JSObject>( | 1716 Handle<JSObject> global = Handle<JSObject>( |
1717 isolate->context()->global()); | 1717 isolate->context()->global_object()); |
1718 // Strict mode not needed (const disallowed in strict mode). | 1718 // Strict mode not needed (const disallowed in strict mode). |
1719 RETURN_IF_EMPTY_HANDLE( | 1719 RETURN_IF_EMPTY_HANDLE( |
1720 isolate, | 1720 isolate, |
1721 JSReceiver::SetProperty(global, name, value, NONE, kNonStrictMode)); | 1721 JSReceiver::SetProperty(global, name, value, NONE, kNonStrictMode)); |
1722 return *value; | 1722 return *value; |
1723 } | 1723 } |
1724 | 1724 |
1725 // The property was present in some function's context extension object, | 1725 // The property was present in some function's context extension object, |
1726 // as a property on the subject of a with, or as a property of the global | 1726 // as a property on the subject of a with, or as a property of the global |
1727 // object. | 1727 // object. |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1981 JSFunction* function = JSFunction::cast(callable); | 1981 JSFunction* function = JSFunction::cast(callable); |
1982 | 1982 |
1983 SharedFunctionInfo* shared = function->shared(); | 1983 SharedFunctionInfo* shared = function->shared(); |
1984 if (shared->native() || !shared->is_classic_mode()) { | 1984 if (shared->native() || !shared->is_classic_mode()) { |
1985 return isolate->heap()->undefined_value(); | 1985 return isolate->heap()->undefined_value(); |
1986 } | 1986 } |
1987 // Returns undefined for strict or native functions, or | 1987 // Returns undefined for strict or native functions, or |
1988 // the associated global receiver for "normal" functions. | 1988 // the associated global receiver for "normal" functions. |
1989 | 1989 |
1990 Context* native_context = | 1990 Context* native_context = |
1991 function->context()->global()->native_context(); | 1991 function->context()->global_object()->native_context(); |
1992 return native_context->global()->global_receiver(); | 1992 return native_context->global_object()->global_receiver(); |
1993 } | 1993 } |
1994 | 1994 |
1995 | 1995 |
1996 RUNTIME_FUNCTION(MaybeObject*, Runtime_MaterializeRegExpLiteral) { | 1996 RUNTIME_FUNCTION(MaybeObject*, Runtime_MaterializeRegExpLiteral) { |
1997 HandleScope scope(isolate); | 1997 HandleScope scope(isolate); |
1998 ASSERT(args.length() == 4); | 1998 ASSERT(args.length() == 4); |
1999 CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); | 1999 CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); |
2000 int index = args.smi_at(1); | 2000 int index = args.smi_at(1); |
2001 Handle<String> pattern = args.at<String>(2); | 2001 Handle<String> pattern = args.at<String>(2); |
2002 Handle<String> flags = args.at<String>(3); | 2002 Handle<String> flags = args.at<String>(3); |
(...skipping 5799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7802 // called using 'new' and creates a new JSFunction object that | 7802 // called using 'new' and creates a new JSFunction object that |
7803 // is returned. The receiver object is only used for error | 7803 // is returned. The receiver object is only used for error |
7804 // reporting if an error occurs when constructing the new | 7804 // reporting if an error occurs when constructing the new |
7805 // JSFunction. FACTORY->NewJSObject() should not be used to | 7805 // JSFunction. FACTORY->NewJSObject() should not be used to |
7806 // allocate JSFunctions since it does not properly initialize | 7806 // allocate JSFunctions since it does not properly initialize |
7807 // the shared part of the function. Since the receiver is | 7807 // the shared part of the function. Since the receiver is |
7808 // ignored anyway, we use the global object as the receiver | 7808 // ignored anyway, we use the global object as the receiver |
7809 // instead of a new JSFunction object. This way, errors are | 7809 // instead of a new JSFunction object. This way, errors are |
7810 // reported the same way whether or not 'Function' is called | 7810 // reported the same way whether or not 'Function' is called |
7811 // using 'new'. | 7811 // using 'new'. |
7812 return isolate->context()->global(); | 7812 return isolate->context()->global_object(); |
7813 } | 7813 } |
7814 } | 7814 } |
7815 | 7815 |
7816 // The function should be compiled for the optimization hints to be | 7816 // The function should be compiled for the optimization hints to be |
7817 // available. | 7817 // available. |
7818 JSFunction::EnsureCompiled(function, CLEAR_EXCEPTION); | 7818 JSFunction::EnsureCompiled(function, CLEAR_EXCEPTION); |
7819 | 7819 |
7820 Handle<SharedFunctionInfo> shared(function->shared(), isolate); | 7820 Handle<SharedFunctionInfo> shared(function->shared(), isolate); |
7821 if (!function->has_initial_map() && | 7821 if (!function->has_initial_map() && |
7822 shared->IsInobjectSlackTrackingInProgress()) { | 7822 shared->IsInobjectSlackTrackingInProgress()) { |
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8490 NoHandleAllocation ha; | 8490 NoHandleAllocation ha; |
8491 ASSERT(args.length() == 1); | 8491 ASSERT(args.length() == 1); |
8492 CONVERT_ARG_HANDLE_CHECKED(JSModule, instance, 0); | 8492 CONVERT_ARG_HANDLE_CHECKED(JSModule, instance, 0); |
8493 | 8493 |
8494 Context* context = Context::cast(instance->context()); | 8494 Context* context = Context::cast(instance->context()); |
8495 Context* previous = isolate->context(); | 8495 Context* previous = isolate->context(); |
8496 ASSERT(context->IsModuleContext()); | 8496 ASSERT(context->IsModuleContext()); |
8497 // Initialize the context links. | 8497 // Initialize the context links. |
8498 context->set_previous(previous); | 8498 context->set_previous(previous); |
8499 context->set_closure(previous->closure()); | 8499 context->set_closure(previous->closure()); |
8500 context->set_global(previous->global()); | 8500 context->set_global_object(previous->global_object()); |
8501 isolate->set_context(context); | 8501 isolate->set_context(context); |
8502 | 8502 |
8503 return context; | 8503 return context; |
8504 } | 8504 } |
8505 | 8505 |
8506 | 8506 |
8507 RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteContextSlot) { | 8507 RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteContextSlot) { |
8508 HandleScope scope(isolate); | 8508 HandleScope scope(isolate); |
8509 ASSERT(args.length() == 2); | 8509 ASSERT(args.length() == 2); |
8510 | 8510 |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8755 | 8755 |
8756 if (strict_mode == kStrictMode) { | 8756 if (strict_mode == kStrictMode) { |
8757 // Throw in strict mode (assignment to undefined variable). | 8757 // Throw in strict mode (assignment to undefined variable). |
8758 Handle<Object> error = | 8758 Handle<Object> error = |
8759 isolate->factory()->NewReferenceError( | 8759 isolate->factory()->NewReferenceError( |
8760 "not_defined", HandleVector(&name, 1)); | 8760 "not_defined", HandleVector(&name, 1)); |
8761 return isolate->Throw(*error); | 8761 return isolate->Throw(*error); |
8762 } | 8762 } |
8763 // In non-strict mode, the property is added to the global object. | 8763 // In non-strict mode, the property is added to the global object. |
8764 attributes = NONE; | 8764 attributes = NONE; |
8765 object = Handle<JSObject>(isolate->context()->global()); | 8765 object = Handle<JSObject>(isolate->context()->global_object()); |
8766 } | 8766 } |
8767 | 8767 |
8768 // Set the property if it's not read only or doesn't yet exist. | 8768 // Set the property if it's not read only or doesn't yet exist. |
8769 if ((attributes & READ_ONLY) == 0 || | 8769 if ((attributes & READ_ONLY) == 0 || |
8770 (object->GetLocalPropertyAttribute(*name) == ABSENT)) { | 8770 (object->GetLocalPropertyAttribute(*name) == ABSENT)) { |
8771 RETURN_IF_EMPTY_HANDLE( | 8771 RETURN_IF_EMPTY_HANDLE( |
8772 isolate, | 8772 isolate, |
8773 JSReceiver::SetProperty(object, name, value, NONE, strict_mode)); | 8773 JSReceiver::SetProperty(object, name, value, NONE, strict_mode)); |
8774 } else if (strict_mode == kStrictMode && (attributes & READ_ONLY) != 0) { | 8774 } else if (strict_mode == kStrictMode && (attributes & READ_ONLY) != 0) { |
8775 // Setting read only property in strict mode. | 8775 // Setting read only property in strict mode. |
(...skipping 2183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10959 return ScopeTypeCatch; | 10959 return ScopeTypeCatch; |
10960 case BLOCK_SCOPE: | 10960 case BLOCK_SCOPE: |
10961 ASSERT(!scope_info->HasContext() || | 10961 ASSERT(!scope_info->HasContext() || |
10962 context_->IsBlockContext()); | 10962 context_->IsBlockContext()); |
10963 return ScopeTypeBlock; | 10963 return ScopeTypeBlock; |
10964 case EVAL_SCOPE: | 10964 case EVAL_SCOPE: |
10965 UNREACHABLE(); | 10965 UNREACHABLE(); |
10966 } | 10966 } |
10967 } | 10967 } |
10968 if (context_->IsNativeContext()) { | 10968 if (context_->IsNativeContext()) { |
10969 ASSERT(context_->global()->IsGlobalObject()); | 10969 ASSERT(context_->global_object()->IsGlobalObject()); |
10970 return ScopeTypeGlobal; | 10970 return ScopeTypeGlobal; |
10971 } | 10971 } |
10972 if (context_->IsFunctionContext()) { | 10972 if (context_->IsFunctionContext()) { |
10973 return ScopeTypeClosure; | 10973 return ScopeTypeClosure; |
10974 } | 10974 } |
10975 if (context_->IsCatchContext()) { | 10975 if (context_->IsCatchContext()) { |
10976 return ScopeTypeCatch; | 10976 return ScopeTypeCatch; |
10977 } | 10977 } |
10978 if (context_->IsBlockContext()) { | 10978 if (context_->IsBlockContext()) { |
10979 return ScopeTypeBlock; | 10979 return ScopeTypeBlock; |
10980 } | 10980 } |
10981 if (context_->IsModuleContext()) { | 10981 if (context_->IsModuleContext()) { |
10982 return ScopeTypeModule; | 10982 return ScopeTypeModule; |
10983 } | 10983 } |
10984 ASSERT(context_->IsWithContext()); | 10984 ASSERT(context_->IsWithContext()); |
10985 return ScopeTypeWith; | 10985 return ScopeTypeWith; |
10986 } | 10986 } |
10987 | 10987 |
10988 // Return the JavaScript object with the content of the current scope. | 10988 // Return the JavaScript object with the content of the current scope. |
10989 Handle<JSObject> ScopeObject() { | 10989 Handle<JSObject> ScopeObject() { |
10990 switch (Type()) { | 10990 switch (Type()) { |
10991 case ScopeIterator::ScopeTypeGlobal: | 10991 case ScopeIterator::ScopeTypeGlobal: |
10992 return Handle<JSObject>(CurrentContext()->global()); | 10992 return Handle<JSObject>(CurrentContext()->global_object()); |
10993 case ScopeIterator::ScopeTypeLocal: | 10993 case ScopeIterator::ScopeTypeLocal: |
10994 // Materialize the content of the local scope into a JSObject. | 10994 // Materialize the content of the local scope into a JSObject. |
10995 ASSERT(nested_scope_chain_.length() == 1); | 10995 ASSERT(nested_scope_chain_.length() == 1); |
10996 return MaterializeLocalScope(isolate_, frame_, inlined_jsframe_index_); | 10996 return MaterializeLocalScope(isolate_, frame_, inlined_jsframe_index_); |
10997 case ScopeIterator::ScopeTypeWith: | 10997 case ScopeIterator::ScopeTypeWith: |
10998 // Return the with object. | 10998 // Return the with object. |
10999 return Handle<JSObject>(JSObject::cast(CurrentContext()->extension())); | 10999 return Handle<JSObject>(JSObject::cast(CurrentContext()->extension())); |
11000 case ScopeIterator::ScopeTypeCatch: | 11000 case ScopeIterator::ScopeTypeCatch: |
11001 return MaterializeCatchScope(isolate_, CurrentContext()); | 11001 return MaterializeCatchScope(isolate_, CurrentContext()); |
11002 case ScopeIterator::ScopeTypeClosure: | 11002 case ScopeIterator::ScopeTypeClosure: |
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11951 CLASSIC_MODE, | 11951 CLASSIC_MODE, |
11952 RelocInfo::kNoPosition); | 11952 RelocInfo::kNoPosition); |
11953 if (shared.is_null()) return Failure::Exception(); | 11953 if (shared.is_null()) return Failure::Exception(); |
11954 Handle<JSFunction> compiled_function = | 11954 Handle<JSFunction> compiled_function = |
11955 Handle<JSFunction>( | 11955 Handle<JSFunction>( |
11956 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared, | 11956 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared, |
11957 context)); | 11957 context)); |
11958 | 11958 |
11959 // Invoke the result of the compilation to get the evaluation function. | 11959 // Invoke the result of the compilation to get the evaluation function. |
11960 bool has_pending_exception; | 11960 bool has_pending_exception; |
11961 Handle<Object> receiver = isolate->global(); | 11961 Handle<Object> receiver = isolate->global_object(); |
11962 Handle<Object> result = | 11962 Handle<Object> result = |
11963 Execution::Call(compiled_function, receiver, 0, NULL, | 11963 Execution::Call(compiled_function, receiver, 0, NULL, |
11964 &has_pending_exception); | 11964 &has_pending_exception); |
11965 // Clear the oneshot breakpoints so that the debugger does not step further. | 11965 // Clear the oneshot breakpoints so that the debugger does not step further. |
11966 isolate->debug()->ClearStepping(); | 11966 isolate->debug()->ClearStepping(); |
11967 if (has_pending_exception) return Failure::Exception(); | 11967 if (has_pending_exception) return Failure::Exception(); |
11968 return *result; | 11968 return *result; |
11969 } | 11969 } |
11970 | 11970 |
11971 | 11971 |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12586 RUNTIME_FUNCTION(MaybeObject*, Runtime_ExecuteInDebugContext) { | 12586 RUNTIME_FUNCTION(MaybeObject*, Runtime_ExecuteInDebugContext) { |
12587 ASSERT(args.length() == 2); | 12587 ASSERT(args.length() == 2); |
12588 HandleScope scope(isolate); | 12588 HandleScope scope(isolate); |
12589 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 12589 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
12590 CONVERT_BOOLEAN_ARG_CHECKED(without_debugger, 1); | 12590 CONVERT_BOOLEAN_ARG_CHECKED(without_debugger, 1); |
12591 | 12591 |
12592 Handle<Object> result; | 12592 Handle<Object> result; |
12593 bool pending_exception; | 12593 bool pending_exception; |
12594 { | 12594 { |
12595 if (without_debugger) { | 12595 if (without_debugger) { |
12596 result = Execution::Call(function, isolate->global(), 0, NULL, | 12596 result = Execution::Call(function, isolate->global_object(), 0, NULL, |
12597 &pending_exception); | 12597 &pending_exception); |
12598 } else { | 12598 } else { |
12599 EnterDebugger enter_debugger; | 12599 EnterDebugger enter_debugger; |
12600 result = Execution::Call(function, isolate->global(), 0, NULL, | 12600 result = Execution::Call(function, isolate->global_object(), 0, NULL, |
12601 &pending_exception); | 12601 &pending_exception); |
12602 } | 12602 } |
12603 } | 12603 } |
12604 if (!pending_exception) { | 12604 if (!pending_exception) { |
12605 return *result; | 12605 return *result; |
12606 } else { | 12606 } else { |
12607 return Failure::Exception(); | 12607 return Failure::Exception(); |
12608 } | 12608 } |
12609 } | 12609 } |
12610 | 12610 |
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13069 // There is no value in the cache. Invoke the function and cache result. | 13069 // There is no value in the cache. Invoke the function and cache result. |
13070 HandleScope scope(isolate); | 13070 HandleScope scope(isolate); |
13071 | 13071 |
13072 Handle<JSFunctionResultCache> cache_handle(cache); | 13072 Handle<JSFunctionResultCache> cache_handle(cache); |
13073 Handle<Object> key_handle(key); | 13073 Handle<Object> key_handle(key); |
13074 Handle<Object> value; | 13074 Handle<Object> value; |
13075 { | 13075 { |
13076 Handle<JSFunction> factory(JSFunction::cast( | 13076 Handle<JSFunction> factory(JSFunction::cast( |
13077 cache_handle->get(JSFunctionResultCache::kFactoryIndex))); | 13077 cache_handle->get(JSFunctionResultCache::kFactoryIndex))); |
13078 // TODO(antonm): consider passing a receiver when constructing a cache. | 13078 // TODO(antonm): consider passing a receiver when constructing a cache. |
13079 Handle<Object> receiver(isolate->native_context()->global()); | 13079 Handle<Object> receiver(isolate->native_context()->global_object()); |
13080 // This handle is nor shared, nor used later, so it's safe. | 13080 // This handle is nor shared, nor used later, so it's safe. |
13081 Handle<Object> argv[] = { key_handle }; | 13081 Handle<Object> argv[] = { key_handle }; |
13082 bool pending_exception; | 13082 bool pending_exception; |
13083 value = Execution::Call(factory, | 13083 value = Execution::Call(factory, |
13084 receiver, | 13084 receiver, |
13085 ARRAY_SIZE(argv), | 13085 ARRAY_SIZE(argv), |
13086 argv, | 13086 argv, |
13087 &pending_exception); | 13087 &pending_exception); |
13088 if (pending_exception) return Failure::Exception(); | 13088 if (pending_exception) return Failure::Exception(); |
13089 } | 13089 } |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13347 // Handle last resort GC and make sure to allow future allocations | 13347 // Handle last resort GC and make sure to allow future allocations |
13348 // to grow the heap without causing GCs (if possible). | 13348 // to grow the heap without causing GCs (if possible). |
13349 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13349 isolate->counters()->gc_last_resort_from_js()->Increment(); |
13350 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13350 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
13351 "Runtime::PerformGC"); | 13351 "Runtime::PerformGC"); |
13352 } | 13352 } |
13353 } | 13353 } |
13354 | 13354 |
13355 | 13355 |
13356 } } // namespace v8::internal | 13356 } } // namespace v8::internal |
OLD | NEW |