diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGBasicBlock.h')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGBasicBlock.h | 30 |
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; |