From 8115182a602848ee7d233b0e4f197289be4fef3c Mon Sep 17 00:00:00 2001 From: Clark Barrett Date: Thu, 8 Nov 2012 12:21:43 +0000 Subject: [PATCH] Added getBaseType - Morgan please check --- src/expr/type_node.cpp | 11 +++++++++++ src/expr/type_node.h | 3 +++ 2 files changed, 14 insertions(+) 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::getArgTypes() const { vector 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; -- 2.30.2