• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef V8_COMPILER_TYPER_H_
6 #define V8_COMPILER_TYPER_H_
7 
8 #include "src/base/flags.h"
9 #include "src/compiler/graph.h"
10 #include "src/compiler/operation-typer.h"
11 #include "src/types.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 // Forward declarations.
17 class CompilationDependencies;
18 class TypeCache;
19 
20 namespace compiler {
21 
22 class OperationTyper;
23 
24 class Typer {
25  public:
26   // Flags that control the mode of operation.
27   enum Flag {
28     kNoFlags = 0u,
29     kDeoptimizationEnabled = 1u << 0,
30   };
31   typedef base::Flags<Flag> Flags;
32 
33   Typer(Isolate* isolate, Graph* graph, Flags flags = kNoFlags,
34         CompilationDependencies* dependencies = nullptr,
35         FunctionType* function_type = nullptr);
36   ~Typer();
37 
38   void Run();
39   // TODO(bmeurer,jarin): Remove this once we have a notion of "roots" on Graph.
40   void Run(const ZoneVector<Node*>& roots);
41 
42  private:
43   class Visitor;
44   class Decorator;
45 
graph()46   Graph* graph() const { return graph_; }
zone()47   Zone* zone() const { return graph()->zone(); }
isolate()48   Isolate* isolate() const { return isolate_; }
flags()49   Flags flags() const { return flags_; }
dependencies()50   CompilationDependencies* dependencies() const { return dependencies_; }
function_type()51   FunctionType* function_type() const { return function_type_; }
operation_typer()52   OperationTyper* operation_typer() { return &operation_typer_; }
53 
54   Isolate* const isolate_;
55   Graph* const graph_;
56   Flags const flags_;
57   CompilationDependencies* const dependencies_;
58   FunctionType* function_type_;
59   Decorator* decorator_;
60   TypeCache const& cache_;
61   OperationTyper operation_typer_;
62 
63   Type* singleton_false_;
64   Type* singleton_true_;
65   Type* singleton_the_hole_;
66   Type* signed32ish_;
67   Type* unsigned32ish_;
68   Type* falsish_;
69   Type* truish_;
70 
71   DISALLOW_COPY_AND_ASSIGN(Typer);
72 };
73 
74 DEFINE_OPERATORS_FOR_FLAGS(Typer::Flags)
75 
76 }  // namespace compiler
77 }  // namespace internal
78 }  // namespace v8
79 
80 #endif  // V8_COMPILER_TYPER_H_
81