mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-28 06:35:49 +00:00
[LCG] Stop playing fast and loose with reference members and assignment.
It doesn't work. I'm still cleaning up all the places where I blindly followed this pattern. There are more to come in this code too. As a benefit, this lets the default copy and move operations Just Work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206375 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d66a3fe106
commit
ae8abf7896
@ -119,25 +119,18 @@ public:
|
||||
/// \brief Nonce type to select the constructor for the end iterator.
|
||||
struct IsAtEndT {};
|
||||
|
||||
LazyCallGraph &G;
|
||||
LazyCallGraph *G;
|
||||
NodeVectorImplT::iterator NI;
|
||||
|
||||
// Build the begin iterator for a node.
|
||||
explicit iterator(LazyCallGraph &G, NodeVectorImplT &Nodes)
|
||||
: G(G), NI(Nodes.begin()) {}
|
||||
: G(&G), NI(Nodes.begin()) {}
|
||||
|
||||
// Build the end iterator for a node. This is selected purely by overload.
|
||||
iterator(LazyCallGraph &G, NodeVectorImplT &Nodes, IsAtEndT /*Nonce*/)
|
||||
: G(G), NI(Nodes.end()) {}
|
||||
: G(&G), NI(Nodes.end()) {}
|
||||
|
||||
public:
|
||||
iterator(const iterator &Arg) : G(Arg.G), NI(Arg.NI) {}
|
||||
iterator(iterator &&Arg) : G(Arg.G), NI(std::move(Arg.NI)) {}
|
||||
iterator &operator=(iterator Arg) {
|
||||
std::swap(Arg, *this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const iterator &Arg) { return NI == Arg.NI; }
|
||||
bool operator!=(const iterator &Arg) { return !operator==(Arg); }
|
||||
|
||||
@ -146,7 +139,7 @@ public:
|
||||
return NI->get<Node *>();
|
||||
|
||||
Function *F = NI->get<Function *>();
|
||||
Node *ChildN = G.get(*F);
|
||||
Node *ChildN = G->get(*F);
|
||||
*NI = ChildN;
|
||||
return ChildN;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user