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