summaryrefslogtreecommitdiff
path: root/src/expr/node_manager.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2019-12-16 11:56:39 -0600
committerAndres Noetzli <andres.noetzli@gmail.com>2019-12-16 09:56:39 -0800
commitc101a6b42d1f14bc750fb2328ddd83261148d7ae (patch)
tree3155d3edd7c26690088cbc9a223de5c854941475 /src/expr/node_manager.cpp
parentd15d44b3c91b5be2c19adac292f137d2a67eb848 (diff)
Move Datatype management to ExprManager (#3568)
This is further work towards decoupling the Expr layer from the Node layer. This commit makes it so that ExprManager does memory management for Datatype while NodeManager maintains a list of DType. As a reminder, the ownership policy (and level of indirection through DatatypeIndex) is necessary due to not being able to store Datatype within Node since this leads to circular dependencies in the Node AST.
Diffstat (limited to 'src/expr/node_manager.cpp')
-rw-r--r--src/expr/node_manager.cpp28
1 files changed, 7 insertions, 21 deletions
diff --git a/src/expr/node_manager.cpp b/src/expr/node_manager.cpp
index 0c3f1b4cb..39be675ec 100644
--- a/src/expr/node_manager.cpp
+++ b/src/expr/node_manager.cpp
@@ -187,15 +187,7 @@ NodeManager::~NodeManager() {
d_rt_cache.d_children.clear();
d_rt_cache.d_data = dummy;
- // TODO: switch to DType
- for (std::vector<Datatype*>::iterator
- datatype_iter = d_ownedDatatypes.begin(),
- datatype_end = d_ownedDatatypes.end();
- datatype_iter != datatype_end; ++datatype_iter) {
- Datatype* datatype = *datatype_iter;
- delete datatype;
- }
- d_ownedDatatypes.clear();
+ d_ownedDTypes.clear();
Assert(!d_attrManager->inGarbageCollection());
@@ -248,23 +240,17 @@ NodeManager::~NodeManager() {
d_options = NULL;
}
-unsigned NodeManager::registerDatatype(Datatype* dt) {
- unsigned sz = d_ownedDatatypes.size();
- d_ownedDatatypes.push_back( dt );
+size_t NodeManager::registerDatatype(std::shared_ptr<DType> dt)
+{
+ size_t sz = d_ownedDTypes.size();
+ d_ownedDTypes.push_back(dt);
return sz;
}
-const Datatype & NodeManager::getDatatypeForIndex( unsigned index ) const{
- // when the Node-level API is in place, this function will be deleted.
- Assert(index < d_ownedDatatypes.size());
- return *d_ownedDatatypes[index];
-}
-
const DType& NodeManager::getDTypeForIndex(unsigned index) const
{
- const Datatype& d = getDatatypeForIndex(index);
- // return its internal representation
- return *d.d_internal;
+ Assert(index < d_ownedDTypes.size());
+ return *d_ownedDTypes[index];
}
void NodeManager::reclaimZombies() {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback