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

Side by Side Diff: src/bootstrapper.cc

Issue 1693513002: [runtime] Introduce FastNewStrictArgumentsStub to optimize strict arguments. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix mips and mips64. Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « src/arm64/interface-descriptors-arm64.cc ('k') | src/builtins.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/bootstrapper.h" 5 #include "src/bootstrapper.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api-natives.h" 8 #include "src/api-natives.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/extensions/externalize-string-extension.h" 10 #include "src/extensions/externalize-string-extension.h"
(...skipping 1646 matching lines...) Expand 10 before | Expand all | Expand 10 after
1657 // Make sure we can recognize argument objects at runtime. 1657 // Make sure we can recognize argument objects at runtime.
1658 // This is done by introducing an anonymous function with 1658 // This is done by introducing an anonymous function with
1659 // class_name equals 'Arguments'. 1659 // class_name equals 'Arguments'.
1660 Handle<String> arguments_string = factory->Arguments_string(); 1660 Handle<String> arguments_string = factory->Arguments_string();
1661 Handle<Code> code = isolate->builtins()->Illegal(); 1661 Handle<Code> code = isolate->builtins()->Illegal();
1662 Handle<JSFunction> function = factory->NewFunctionWithoutPrototype( 1662 Handle<JSFunction> function = factory->NewFunctionWithoutPrototype(
1663 arguments_string, code); 1663 arguments_string, code);
1664 function->shared()->set_instance_class_name(*arguments_string); 1664 function->shared()->set_instance_class_name(*arguments_string);
1665 1665
1666 Handle<Map> map = factory->NewMap( 1666 Handle<Map> map = factory->NewMap(
1667 JS_OBJECT_TYPE, Heap::kSloppyArgumentsObjectSize, FAST_ELEMENTS); 1667 JS_OBJECT_TYPE, JSSloppyArgumentsObject::kSize, FAST_ELEMENTS);
1668 // Create the descriptor array for the arguments object. 1668 // Create the descriptor array for the arguments object.
1669 Map::EnsureDescriptorSlack(map, 2); 1669 Map::EnsureDescriptorSlack(map, 2);
1670 1670
1671 { // length 1671 { // length
1672 DataDescriptor d(factory->length_string(), Heap::kArgumentsLengthIndex, 1672 DataDescriptor d(factory->length_string(),
1673 DONT_ENUM, Representation::Tagged()); 1673 JSSloppyArgumentsObject::kLengthIndex, DONT_ENUM,
1674 Representation::Tagged());
1674 map->AppendDescriptor(&d); 1675 map->AppendDescriptor(&d);
1675 } 1676 }
1676 { // callee 1677 { // callee
1677 DataDescriptor d(factory->callee_string(), Heap::kArgumentsCalleeIndex, 1678 DataDescriptor d(factory->callee_string(),
1678 DONT_ENUM, Representation::Tagged()); 1679 JSSloppyArgumentsObject::kCalleeIndex, DONT_ENUM,
1680 Representation::Tagged());
1679 map->AppendDescriptor(&d); 1681 map->AppendDescriptor(&d);
1680 } 1682 }
1681 // @@iterator method is added later. 1683 // @@iterator method is added later.
1682 1684
1683 map->SetInObjectProperties(2); 1685 map->SetInObjectProperties(2);
1684 native_context()->set_sloppy_arguments_map(*map); 1686 native_context()->set_sloppy_arguments_map(*map);
1685 1687
1686 DCHECK(!function->has_initial_map()); 1688 DCHECK(!function->has_initial_map());
1687 JSFunction::SetInitialMap(function, map, 1689 JSFunction::SetInitialMap(function, map,
1688 isolate->initial_object_prototype()); 1690 isolate->initial_object_prototype());
1689 1691
1690 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsCalleeIndex);
1691 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsLengthIndex);
1692 DCHECK(!map->is_dictionary_map()); 1692 DCHECK(!map->is_dictionary_map());
1693 DCHECK(IsFastObjectElementsKind(map->elements_kind())); 1693 DCHECK(IsFastObjectElementsKind(map->elements_kind()));
1694 } 1694 }
1695 1695
1696 { // --- fast and slow aliased arguments map 1696 { // --- fast and slow aliased arguments map
1697 Handle<Map> map = isolate->sloppy_arguments_map(); 1697 Handle<Map> map = isolate->sloppy_arguments_map();
1698 map = Map::Copy(map, "FastAliasedArguments"); 1698 map = Map::Copy(map, "FastAliasedArguments");
1699 map->set_elements_kind(FAST_SLOPPY_ARGUMENTS_ELEMENTS); 1699 map->set_elements_kind(FAST_SLOPPY_ARGUMENTS_ELEMENTS);
1700 DCHECK_EQ(2, map->GetInObjectProperties()); 1700 DCHECK_EQ(2, map->GetInObjectProperties());
1701 native_context()->set_fast_aliased_arguments_map(*map); 1701 native_context()->set_fast_aliased_arguments_map(*map);
(...skipping 15 matching lines...) Expand all
1717 Handle<JSFunction> poison = GetStrictArgumentsPoisonFunction(); 1717 Handle<JSFunction> poison = GetStrictArgumentsPoisonFunction();
1718 1718
1719 // Install the ThrowTypeError functions. 1719 // Install the ThrowTypeError functions.
1720 callee->set_getter(*poison); 1720 callee->set_getter(*poison);
1721 callee->set_setter(*poison); 1721 callee->set_setter(*poison);
1722 caller->set_getter(*poison); 1722 caller->set_getter(*poison);
1723 caller->set_setter(*poison); 1723 caller->set_setter(*poison);
1724 1724
1725 // Create the map. Allocate one in-object field for length. 1725 // Create the map. Allocate one in-object field for length.
1726 Handle<Map> map = factory->NewMap( 1726 Handle<Map> map = factory->NewMap(
1727 JS_OBJECT_TYPE, Heap::kStrictArgumentsObjectSize, FAST_ELEMENTS); 1727 JS_OBJECT_TYPE, JSStrictArgumentsObject::kSize, FAST_ELEMENTS);
1728 // Create the descriptor array for the arguments object. 1728 // Create the descriptor array for the arguments object.
1729 Map::EnsureDescriptorSlack(map, 3); 1729 Map::EnsureDescriptorSlack(map, 3);
1730 1730
1731 { // length 1731 { // length
1732 DataDescriptor d(factory->length_string(), Heap::kArgumentsLengthIndex, 1732 DataDescriptor d(factory->length_string(),
1733 DONT_ENUM, Representation::Tagged()); 1733 JSStrictArgumentsObject::kLengthIndex, DONT_ENUM,
1734 Representation::Tagged());
1734 map->AppendDescriptor(&d); 1735 map->AppendDescriptor(&d);
1735 } 1736 }
1736 { // callee 1737 { // callee
1737 AccessorConstantDescriptor d(factory->callee_string(), callee, 1738 AccessorConstantDescriptor d(factory->callee_string(), callee,
1738 attributes); 1739 attributes);
1739 map->AppendDescriptor(&d); 1740 map->AppendDescriptor(&d);
1740 } 1741 }
1741 { // caller 1742 { // caller
1742 AccessorConstantDescriptor d(factory->caller_string(), caller, 1743 AccessorConstantDescriptor d(factory->caller_string(), caller,
1743 attributes); 1744 attributes);
1744 map->AppendDescriptor(&d); 1745 map->AppendDescriptor(&d);
1745 } 1746 }
1746 // @@iterator method is added later. 1747 // @@iterator method is added later.
1747 1748
1748 DCHECK_EQ(native_context()->object_function()->prototype(), 1749 DCHECK_EQ(native_context()->object_function()->prototype(),
1749 *isolate->initial_object_prototype()); 1750 *isolate->initial_object_prototype());
1750 Map::SetPrototype(map, isolate->initial_object_prototype()); 1751 Map::SetPrototype(map, isolate->initial_object_prototype());
1751 map->SetInObjectProperties(1); 1752 map->SetInObjectProperties(1);
1752 1753
1753 // Copy constructor from the sloppy arguments boilerplate. 1754 // Copy constructor from the sloppy arguments boilerplate.
1754 map->SetConstructor( 1755 map->SetConstructor(
1755 native_context()->sloppy_arguments_map()->GetConstructor()); 1756 native_context()->sloppy_arguments_map()->GetConstructor());
1756 1757
1757 native_context()->set_strict_arguments_map(*map); 1758 native_context()->set_strict_arguments_map(*map);
1758 1759
1759 DCHECK(map->GetInObjectProperties() > Heap::kArgumentsLengthIndex);
1760 DCHECK(!map->is_dictionary_map()); 1760 DCHECK(!map->is_dictionary_map());
1761 DCHECK(IsFastObjectElementsKind(map->elements_kind())); 1761 DCHECK(IsFastObjectElementsKind(map->elements_kind()));
1762 } 1762 }
1763 1763
1764 { // --- context extension 1764 { // --- context extension
1765 // Create a function for the context extension objects. 1765 // Create a function for the context extension objects.
1766 Handle<Code> code = isolate->builtins()->Illegal(); 1766 Handle<Code> code = isolate->builtins()->Illegal();
1767 Handle<JSFunction> context_extension_fun = factory->NewFunction( 1767 Handle<JSFunction> context_extension_fun = factory->NewFunction(
1768 factory->empty_string(), code, JS_CONTEXT_EXTENSION_OBJECT_TYPE, 1768 factory->empty_string(), code, JS_CONTEXT_EXTENSION_OBJECT_TYPE,
1769 JSObject::kHeaderSize); 1769 JSObject::kHeaderSize);
(...skipping 1881 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 } 3651 }
3652 3652
3653 3653
3654 // Called when the top-level V8 mutex is destroyed. 3654 // Called when the top-level V8 mutex is destroyed.
3655 void Bootstrapper::FreeThreadResources() { 3655 void Bootstrapper::FreeThreadResources() {
3656 DCHECK(!IsActive()); 3656 DCHECK(!IsActive());
3657 } 3657 }
3658 3658
3659 } // namespace internal 3659 } // namespace internal
3660 } // namespace v8 3660 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/interface-descriptors-arm64.cc ('k') | src/builtins.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698