summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/expr/type_node.cpp11
-rw-r--r--src/expr/type_node.h3
2 files changed, 14 insertions, 0 deletions
diff --git a/src/expr/type_node.cpp b/src/expr/type_node.cpp
index b93ec80c2..80f7f8c76 100644
--- a/src/expr/type_node.cpp
+++ b/src/expr/type_node.cpp
@@ -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()) {
diff --git a/src/expr/type_node.h b/src/expr/type_node.h
index 88fc70cdc..5f399a855 100644
--- a/src/expr/type_node.h
+++ b/src/expr/type_node.h
@@ -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;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback