Added getBaseType - Morgan please check
authorClark Barrett <barrett@cs.nyu.edu>
Thu, 8 Nov 2012 12:21:43 +0000 (12:21 +0000)
committerClark Barrett <barrett@cs.nyu.edu>
Thu, 8 Nov 2012 12:21:43 +0000 (12:21 +0000)
src/expr/type_node.cpp
src/expr/type_node.h

index b93ec80c20e0c85e05588d3faa0144776353a8bd..80f7f8c7626eac2fe0fed0999ce34d1a54b17214 100644 (file)
@@ -119,6 +119,17 @@ TypeNode TypeNode::getSubtypeBaseType() const {
   return getSubtypePredicate().getType().getArgTypes()[0];
 }
 
+TypeNode TypeNode::getBaseType() const {
+  TypeNode realt = NodeManager::currentNM()->realType();
+  if (isSubtypeOf(realt)) {
+    return realt;
+  }
+  else if (isPredicateSubtype()) {
+    return getSubtypeBaseType();
+  }
+  return *this;
+}
+
 std::vector<TypeNode> TypeNode::getArgTypes() const {
   vector<TypeNode> args;
   if(isTester()) {
index 88fc70cdc2a1f895e64c9d01620f68bc854e4a8d..5f399a8554a1ee9d4ebec5c0dd7f18dcda0cf85b 100644 (file)
@@ -590,6 +590,9 @@ public:
   /** Get the base type of this subtype */
   TypeNode getSubtypeBaseType() const;
 
+  /** Get the most general base type of the type */
+  TypeNode getBaseType() const;
+
   /** Is this a subrange */
   bool isSubrange() const;