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