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

Side by Side Diff: src/factory.cc

Issue 2595893002: [runtime] Remove specific Descriptor subclasses and add respective factory methods instead. (Closed)
Patch Set: Created 4 years 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/bootstrapper.cc ('k') | src/objects.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/factory.h" 5 #include "src/factory.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 2626 matching lines...) Expand 10 before | Expand all | Expand 10 after
2637 2637
2638 PropertyAttributes ro_attribs = 2638 PropertyAttributes ro_attribs =
2639 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); 2639 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
2640 PropertyAttributes roc_attribs = 2640 PropertyAttributes roc_attribs =
2641 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY); 2641 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
2642 2642
2643 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0); 2643 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0);
2644 Handle<AccessorInfo> length = 2644 Handle<AccessorInfo> length =
2645 Accessors::FunctionLengthInfo(isolate(), roc_attribs); 2645 Accessors::FunctionLengthInfo(isolate(), roc_attribs);
2646 { // Add length. 2646 { // Add length.
2647 AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())), 2647 Descriptor d = Descriptor::AccessorConstant(
2648 length, roc_attribs); 2648 Handle<Name>(Name::cast(length->name())), length, roc_attribs);
2649 map->AppendDescriptor(&d); 2649 map->AppendDescriptor(&d);
2650 } 2650 }
2651 2651
2652 STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1); 2652 STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1);
2653 Handle<AccessorInfo> name = 2653 Handle<AccessorInfo> name =
2654 Accessors::FunctionNameInfo(isolate(), ro_attribs); 2654 Accessors::FunctionNameInfo(isolate(), ro_attribs);
2655 { // Add name. 2655 { // Add name.
2656 AccessorConstantDescriptor d(Handle<Name>(Name::cast(name->name())), name, 2656 Descriptor d = Descriptor::AccessorConstant(
2657 roc_attribs); 2657 Handle<Name>(Name::cast(name->name())), name, roc_attribs);
2658 map->AppendDescriptor(&d); 2658 map->AppendDescriptor(&d);
2659 } 2659 }
2660 Handle<AccessorInfo> args = 2660 Handle<AccessorInfo> args =
2661 Accessors::FunctionArgumentsInfo(isolate(), ro_attribs); 2661 Accessors::FunctionArgumentsInfo(isolate(), ro_attribs);
2662 { // Add arguments. 2662 { // Add arguments.
2663 AccessorConstantDescriptor d(Handle<Name>(Name::cast(args->name())), args, 2663 Descriptor d = Descriptor::AccessorConstant(
2664 ro_attribs); 2664 Handle<Name>(Name::cast(args->name())), args, ro_attribs);
2665 map->AppendDescriptor(&d); 2665 map->AppendDescriptor(&d);
2666 } 2666 }
2667 Handle<AccessorInfo> caller = 2667 Handle<AccessorInfo> caller =
2668 Accessors::FunctionCallerInfo(isolate(), ro_attribs); 2668 Accessors::FunctionCallerInfo(isolate(), ro_attribs);
2669 { // Add caller. 2669 { // Add caller.
2670 AccessorConstantDescriptor d(Handle<Name>(Name::cast(caller->name())), 2670 Descriptor d = Descriptor::AccessorConstant(
2671 caller, ro_attribs); 2671 Handle<Name>(Name::cast(caller->name())), caller, ro_attribs);
2672 map->AppendDescriptor(&d); 2672 map->AppendDescriptor(&d);
2673 } 2673 }
2674 if (IsFunctionModeWithPrototype(function_mode)) { 2674 if (IsFunctionModeWithPrototype(function_mode)) {
2675 if (function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE) { 2675 if (function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE) {
2676 ro_attribs = static_cast<PropertyAttributes>(ro_attribs & ~READ_ONLY); 2676 ro_attribs = static_cast<PropertyAttributes>(ro_attribs & ~READ_ONLY);
2677 } 2677 }
2678 Handle<AccessorInfo> prototype = 2678 Handle<AccessorInfo> prototype =
2679 Accessors::FunctionPrototypeInfo(isolate(), ro_attribs); 2679 Accessors::FunctionPrototypeInfo(isolate(), ro_attribs);
2680 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), 2680 Descriptor d = Descriptor::AccessorConstant(
2681 prototype, ro_attribs); 2681 Handle<Name>(Name::cast(prototype->name())), prototype, ro_attribs);
2682 map->AppendDescriptor(&d); 2682 map->AppendDescriptor(&d);
2683 } 2683 }
2684 } 2684 }
2685 2685
2686 Handle<Map> Factory::CreateStrictFunctionMap( 2686 Handle<Map> Factory::CreateStrictFunctionMap(
2687 FunctionMode function_mode, Handle<JSFunction> empty_function) { 2687 FunctionMode function_mode, Handle<JSFunction> empty_function) {
2688 Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); 2688 Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
2689 SetStrictFunctionInstanceDescriptor(map, function_mode); 2689 SetStrictFunctionInstanceDescriptor(map, function_mode);
2690 map->set_is_constructor(IsFunctionModeWithPrototype(function_mode)); 2690 map->set_is_constructor(IsFunctionModeWithPrototype(function_mode));
2691 map->set_is_callable(); 2691 map->set_is_callable();
(...skipping 13 matching lines...) Expand all
2705 PropertyAttributes roc_attribs = 2705 PropertyAttributes roc_attribs =
2706 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY); 2706 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
2707 2707
2708 DCHECK(function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE || 2708 DCHECK(function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ||
2709 function_mode == FUNCTION_WITH_READONLY_PROTOTYPE || 2709 function_mode == FUNCTION_WITH_READONLY_PROTOTYPE ||
2710 function_mode == FUNCTION_WITHOUT_PROTOTYPE); 2710 function_mode == FUNCTION_WITHOUT_PROTOTYPE);
2711 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0); 2711 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0);
2712 { // Add length. 2712 { // Add length.
2713 Handle<AccessorInfo> length = 2713 Handle<AccessorInfo> length =
2714 Accessors::FunctionLengthInfo(isolate(), roc_attribs); 2714 Accessors::FunctionLengthInfo(isolate(), roc_attribs);
2715 AccessorConstantDescriptor d(handle(Name::cast(length->name())), length, 2715 Descriptor d = Descriptor::AccessorConstant(
2716 roc_attribs); 2716 handle(Name::cast(length->name())), length, roc_attribs);
2717 map->AppendDescriptor(&d); 2717 map->AppendDescriptor(&d);
2718 } 2718 }
2719 2719
2720 STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1); 2720 STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1);
2721 { // Add name. 2721 { // Add name.
2722 Handle<AccessorInfo> name = 2722 Handle<AccessorInfo> name =
2723 Accessors::FunctionNameInfo(isolate(), roc_attribs); 2723 Accessors::FunctionNameInfo(isolate(), roc_attribs);
2724 AccessorConstantDescriptor d(handle(Name::cast(name->name())), name, 2724 Descriptor d = Descriptor::AccessorConstant(
2725 roc_attribs); 2725 handle(Name::cast(name->name())), name, roc_attribs);
2726 map->AppendDescriptor(&d); 2726 map->AppendDescriptor(&d);
2727 } 2727 }
2728 if (IsFunctionModeWithPrototype(function_mode)) { 2728 if (IsFunctionModeWithPrototype(function_mode)) {
2729 // Add prototype. 2729 // Add prototype.
2730 PropertyAttributes attribs = 2730 PropertyAttributes attribs =
2731 function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ? rw_attribs 2731 function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ? rw_attribs
2732 : ro_attribs; 2732 : ro_attribs;
2733 Handle<AccessorInfo> prototype = 2733 Handle<AccessorInfo> prototype =
2734 Accessors::FunctionPrototypeInfo(isolate(), attribs); 2734 Accessors::FunctionPrototypeInfo(isolate(), attribs);
2735 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), 2735 Descriptor d = Descriptor::AccessorConstant(
2736 prototype, attribs); 2736 Handle<Name>(Name::cast(prototype->name())), prototype, attribs);
2737 map->AppendDescriptor(&d); 2737 map->AppendDescriptor(&d);
2738 } 2738 }
2739 } 2739 }
2740 2740
2741 Handle<Map> Factory::CreateClassFunctionMap(Handle<JSFunction> empty_function) { 2741 Handle<Map> Factory::CreateClassFunctionMap(Handle<JSFunction> empty_function) {
2742 Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize); 2742 Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
2743 SetClassFunctionInstanceDescriptor(map); 2743 SetClassFunctionInstanceDescriptor(map);
2744 map->set_is_constructor(true); 2744 map->set_is_constructor(true);
2745 map->set_is_callable(); 2745 map->set_is_callable();
2746 Map::SetPrototype(map, empty_function); 2746 Map::SetPrototype(map, empty_function);
2747 return map; 2747 return map;
2748 } 2748 }
2749 2749
2750 void Factory::SetClassFunctionInstanceDescriptor(Handle<Map> map) { 2750 void Factory::SetClassFunctionInstanceDescriptor(Handle<Map> map) {
2751 Map::EnsureDescriptorSlack(map, 2); 2751 Map::EnsureDescriptorSlack(map, 2);
2752 2752
2753 PropertyAttributes rw_attribs = 2753 PropertyAttributes rw_attribs =
2754 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); 2754 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
2755 PropertyAttributes roc_attribs = 2755 PropertyAttributes roc_attribs =
2756 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY); 2756 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
2757 2757
2758 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0); 2758 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0);
2759 { // Add length. 2759 { // Add length.
2760 Handle<AccessorInfo> length = 2760 Handle<AccessorInfo> length =
2761 Accessors::FunctionLengthInfo(isolate(), roc_attribs); 2761 Accessors::FunctionLengthInfo(isolate(), roc_attribs);
2762 AccessorConstantDescriptor d(handle(Name::cast(length->name())), length, 2762 Descriptor d = Descriptor::AccessorConstant(
2763 roc_attribs); 2763 handle(Name::cast(length->name())), length, roc_attribs);
2764 map->AppendDescriptor(&d); 2764 map->AppendDescriptor(&d);
2765 } 2765 }
2766 2766
2767 { 2767 {
2768 // Add prototype. 2768 // Add prototype.
2769 Handle<AccessorInfo> prototype = 2769 Handle<AccessorInfo> prototype =
2770 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); 2770 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs);
2771 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), 2771 Descriptor d = Descriptor::AccessorConstant(
2772 prototype, rw_attribs); 2772 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs);
2773 map->AppendDescriptor(&d); 2773 map->AppendDescriptor(&d);
2774 } 2774 }
2775 } 2775 }
2776 2776
2777 } // namespace internal 2777 } // namespace internal
2778 } // namespace v8 2778 } // namespace v8
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698