summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGBasicBlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGBasicBlock.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGBasicBlock.h30
1 files changed, 19 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGBasicBlock.h b/Source/JavaScriptCore/dfg/DFGBasicBlock.h
index 6f348f2e1..bae9d5258 100644
--- a/Source/JavaScriptCore/dfg/DFGBasicBlock.h
+++ b/Source/JavaScriptCore/dfg/DFGBasicBlock.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,15 +31,18 @@
#include "DFGAbstractValue.h"
#include "DFGBranchDirection.h"
#include "DFGNode.h"
+#include "DFGVariadicFunction.h"
#include "Operands.h"
#include <wtf/OwnPtr.h>
#include <wtf/Vector.h>
namespace JSC { namespace DFG {
+class Graph;
+
typedef Vector <BlockIndex, 2> PredecessorList;
-struct BasicBlock : Vector<NodeIndex, 8> {
+struct BasicBlock : Vector<Node*, 8> {
BasicBlock(unsigned bytecodeBegin, unsigned numArguments, unsigned numLocals)
: bytecodeBegin(bytecodeBegin)
, isOSRTarget(false)
@@ -72,7 +75,7 @@ struct BasicBlock : Vector<NodeIndex, 8> {
}
size_t numNodes() const { return phis.size() + size(); }
- NodeIndex nodeIndex(size_t i) const
+ Node* node(size_t i) const
{
if (i < phis.size())
return phis[i];
@@ -80,24 +83,29 @@ struct BasicBlock : Vector<NodeIndex, 8> {
}
bool isPhiIndex(size_t i) const { return i < phis.size(); }
- bool isInPhis(NodeIndex nodeIndex) const
+ bool isInPhis(Node* node) const
{
for (size_t i = 0; i < phis.size(); ++i) {
- if (phis[i] == nodeIndex)
+ if (phis[i] == node)
return true;
}
return false;
}
- bool isInBlock(NodeIndex index) const
+ bool isInBlock(Node* myNode) const
{
for (size_t i = 0; i < numNodes(); ++i) {
- if (nodeIndex(i) == index)
+ if (node(i) == myNode)
return true;
}
return false;
}
-
+
+#define DFG_DEFINE_APPEND_NODE(templatePre, templatePost, typeParams, valueParamsComma, valueParams, valueArgs) \
+ templatePre typeParams templatePost Node* appendNode(Graph&, SpeculatedType valueParamsComma valueParams);
+ DFG_VARIADIC_TEMPLATE_FUNCTION(DFG_DEFINE_APPEND_NODE)
+#undef DFG_DEFINE_APPEND_NODE
+
// This value is used internally for block linking and OSR entry. It is mostly meaningless
// for other purposes due to inlining.
unsigned bytecodeBegin;
@@ -113,11 +121,11 @@ struct BasicBlock : Vector<NodeIndex, 8> {
#endif
bool isReachable;
- Vector<NodeIndex> phis;
+ Vector<Node*> phis;
PredecessorList m_predecessors;
- Operands<NodeIndex, NodeIndexTraits> variablesAtHead;
- Operands<NodeIndex, NodeIndexTraits> variablesAtTail;
+ Operands<Node*, NodePointerTraits> variablesAtHead;
+ Operands<Node*, NodePointerTraits> variablesAtTail;
Operands<AbstractValue> valuesAtHead;
Operands<AbstractValue> valuesAtTail;