Index: src/compiler/js-graph.h |
diff --git a/src/compiler/js-graph.h b/src/compiler/js-graph.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3a5e687a27b359c8e0112d6bb72eb4e783fc8f8d |
--- /dev/null |
+++ b/src/compiler/js-graph.h |
@@ -0,0 +1,107 @@ |
+// Copyright 2014 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef V8_COMPILER_JS_GRAPH_H_ |
+#define V8_COMPILER_JS_GRAPH_H_ |
+ |
+#include "src/compiler/common-node-cache.h" |
+#include "src/compiler/common-operator.h" |
+#include "src/compiler/graph.h" |
+#include "src/compiler/js-operator.h" |
+#include "src/compiler/node-properties.h" |
+ |
+namespace v8 { |
+namespace internal { |
+namespace compiler { |
+ |
+class Typer; |
+ |
+// Implements a facade on a Graph, enhancing the graph with JS-specific |
+// notions, including a builder for for JS* operators, canonicalized global |
+// constants, and various helper methods. |
+class JSGraph : public ZoneObject { |
+ public: |
+ JSGraph(Graph* graph, CommonOperatorBuilder* common, Typer* typer) |
+ : graph_(graph), |
+ common_(common), |
+ javascript_(zone()), |
+ typer_(typer), |
+ cache_(zone()) {} |
+ |
+ // Canonicalized global constants. |
+ Node* UndefinedConstant(); |
+ Node* TheHoleConstant(); |
+ Node* TrueConstant(); |
+ Node* FalseConstant(); |
+ Node* NullConstant(); |
+ Node* ZeroConstant(); |
+ Node* OneConstant(); |
+ Node* NaNConstant(); |
+ |
+ // Creates a HeapConstant node, possibly canonicalized, without inspecting the |
+ // object. |
+ Node* HeapConstant(PrintableUnique<Object> value); |
+ |
+ // Creates a HeapConstant node, possibly canonicalized, and may access the |
+ // heap to inspect the object. |
+ Node* HeapConstant(Handle<Object> value); |
+ |
+ // Creates a Constant node of the appropriate type for the given object. |
+ // Accesses the heap to inspect the object and determine whether one of the |
+ // canonicalized globals or a number constant should be returned. |
+ Node* Constant(Handle<Object> value); |
+ |
+ // Creates a NumberConstant node, usually canonicalized. |
+ Node* Constant(double value); |
+ |
+ // Creates a NumberConstant node, usually canonicalized. |
+ Node* Constant(int32_t value); |
+ |
+ // Creates a Int32Constant node, usually canonicalized. |
+ Node* Int32Constant(int32_t value); |
+ |
+ // Creates a Float64Constant node, usually canonicalized. |
+ Node* Float64Constant(double value); |
+ |
+ // Creates an ExternalConstant node, usually canonicalized. |
+ Node* ExternalConstant(ExternalReference ref); |
+ |
+ Node* SmiConstant(int32_t immediate) { |
+ ASSERT(Smi::IsValid(immediate)); |
+ return Constant(immediate); |
+ } |
+ |
+ JSOperatorBuilder* javascript() { return &javascript_; } |
+ CommonOperatorBuilder* common() { return common_; } |
+ Graph* graph() { return graph_; } |
+ Zone* zone() { return graph()->zone(); } |
+ |
+ private: |
+ Graph* graph_; |
+ CommonOperatorBuilder* common_; |
+ JSOperatorBuilder javascript_; |
+ Typer* typer_; |
+ |
+ SetOncePointer<Node> undefined_constant_; |
+ SetOncePointer<Node> the_hole_constant_; |
+ SetOncePointer<Node> true_constant_; |
+ SetOncePointer<Node> false_constant_; |
+ SetOncePointer<Node> null_constant_; |
+ SetOncePointer<Node> zero_constant_; |
+ SetOncePointer<Node> one_constant_; |
+ SetOncePointer<Node> nan_constant_; |
+ |
+ CommonNodeCache cache_; |
+ |
+ Node* ImmovableHeapConstant(Handle<Object> value); |
+ Node* NumberConstant(double value); |
+ Node* NewNode(Operator* op); |
+ |
+ Factory* factory() { return zone()->isolate()->factory(); } |
+}; |
+} // namespace compiler |
+} // namespace internal |
+} // namespace v8 |
+ |
+#endif |