1 // Copyright 2017 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_BUILTINS_BUILTINS_CONSTRUCTOR_GEN_H_
6 #define V8_BUILTINS_BUILTINS_CONSTRUCTOR_GEN_H_
7 
8 #include "src/code-stub-assembler.h"
9 
10 namespace v8 {
11 namespace internal {
12 
13 class ConstructorBuiltinsAssembler : public CodeStubAssembler {
14  public:
ConstructorBuiltinsAssembler(compiler::CodeAssemblerState * state)15   explicit ConstructorBuiltinsAssembler(compiler::CodeAssemblerState* state)
16       : CodeStubAssembler(state) {}
17 
18   Node* EmitFastNewFunctionContext(Node* closure, Node* slots, Node* context,
19                                    ScopeType scope_type);
20 
21   Node* EmitCreateRegExpLiteral(Node* feedback_vector, Node* slot,
22                                 Node* pattern, Node* flags, Node* context);
23   Node* EmitCreateShallowArrayLiteral(Node* feedback_vector, Node* slot,
24                                       Node* context, Label* call_runtime,
25                                       AllocationSiteMode allocation_site_mode);
26 
27   Node* EmitCreateEmptyArrayLiteral(Node* feedback_vector, Node* slot,
28                                     Node* context);
29 
30   Node* EmitCreateShallowObjectLiteral(Node* feedback_vector, Node* slot,
31                                        Label* call_runtime);
32   Node* EmitCreateEmptyObjectLiteral(Node* context);
33 
34   Node* EmitFastNewObject(Node* context, Node* target, Node* new_target);
35 
36   Node* EmitFastNewObject(Node* context, Node* target, Node* new_target,
37                           Label* call_runtime);
38 
39  private:
40   Node* NotHasBoilerplate(Node* literal_site);
41   Node* LoadAllocationSiteBoilerplate(Node* allocation_site);
42 };
43 
44 }  // namespace internal
45 }  // namespace v8
46 
47 #endif  // V8_BUILTINS_BUILTINS_CONSTRUCTOR_GEN_H_
48