Reset AST node IDs between compilation runs.

This commit is contained in:
chriseth
2017-01-20 12:00:16 +01:00
parent da178d967f
commit 7159944f0f
5 changed files with 28 additions and 5 deletions
+20 -2
View File
@@ -34,11 +34,24 @@ using namespace std;
using namespace dev;
using namespace dev::solidity;
class IDDispenser
{
public:
static size_t next() { return ++instance(); }
static void reset() { instance() = 0; }
private:
static size_t& instance()
{
static IDDispenser dispenser;
return dispenser.id;
}
size_t id = 0;
};
ASTNode::ASTNode(SourceLocation const& _location):
m_id(IDDispenser::next()),
m_location(_location)
{
static size_t id = 0;
m_id = ++id;
}
ASTNode::~ASTNode()
@@ -46,6 +59,11 @@ ASTNode::~ASTNode()
delete m_annotation;
}
void ASTNode::resetID()
{
IDDispenser::reset();
}
ASTAnnotation& ASTNode::annotation() const
{
if (!m_annotation)