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

Side by Side Diff: src/factory.cc

Issue 2423053002: Install the 'name' property in classes at runtime (Closed)
Patch Set: Created 4 years, 2 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
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/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2586 matching lines...) Expand 10 before | Expand all | Expand 10 after
2597 function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ? rw_attribs 2597 function_mode == FUNCTION_WITH_WRITEABLE_PROTOTYPE ? rw_attribs
2598 : ro_attribs; 2598 : ro_attribs;
2599 Handle<AccessorInfo> prototype = 2599 Handle<AccessorInfo> prototype =
2600 Accessors::FunctionPrototypeInfo(isolate(), attribs); 2600 Accessors::FunctionPrototypeInfo(isolate(), attribs);
2601 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), 2601 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())),
2602 prototype, attribs); 2602 prototype, attribs);
2603 map->AppendDescriptor(&d); 2603 map->AppendDescriptor(&d);
2604 } 2604 }
2605 } 2605 }
2606 2606
2607 Handle<Map> Factory::CreateClassFunctionMap(Handle<JSFunction> empty_function) {
2608 Handle<Map> map = NewMap(JS_FUNCTION_TYPE, JSFunction::kSize);
2609 SetClassFunctionInstanceDescriptor(map);
2610 map->set_is_constructor(true);
2611 map->set_is_callable();
2612 Map::SetPrototype(map, empty_function);
2613 return map;
2614 }
2615
2616 void Factory::SetClassFunctionInstanceDescriptor(Handle<Map> map) {
2617 int size = 3; // with prototype
2618 Map::EnsureDescriptorSlack(map, size);
2619
2620 PropertyAttributes rw_attribs =
2621 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
2622 PropertyAttributes roc_attribs =
2623 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
2624
2625 STATIC_ASSERT(JSFunction::kLengthDescriptorIndex == 0);
2626 { // Add length.
2627 Handle<AccessorInfo> length =
2628 Accessors::FunctionLengthInfo(isolate(), roc_attribs);
2629 AccessorConstantDescriptor d(handle(Name::cast(length->name())), length,
2630 roc_attribs);
2631 map->AppendDescriptor(&d);
2632 }
2633
2634 {
2635 // Add prototype.
2636 Handle<AccessorInfo> prototype =
2637 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs);
2638 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())),
2639 prototype, rw_attribs);
2640 map->AppendDescriptor(&d);
2641 }
2642 }
2643
2607 } // namespace internal 2644 } // namespace internal
2608 } // namespace v8 2645 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698