Implement RecordProperties::mkGroundTerm(). Resolves bug #546.
authorMorgan Deters <mdeters@cs.nyu.edu>
Sat, 21 Jun 2014 02:25:21 +0000 (22:25 -0400)
committerMorgan Deters <mdeters@cs.nyu.edu>
Sat, 21 Jun 2014 02:25:21 +0000 (22:25 -0400)
src/theory/datatypes/theory_datatypes_type_rules.h

index 09d43b3bc5ff8d91fda62250925138e38ff019a9..4d0acccc8899f7a867061bf1a4e7d8d8bb8ae3e0 100644 (file)
@@ -477,7 +477,18 @@ struct RecordUpdateTypeRule {
 
 struct RecordProperties {
   inline static Node mkGroundTerm(TypeNode type) {
-    Unimplemented();
+    Assert(type.getKind() == kind::RECORD_TYPE);
+
+    const Record& rec = type.getRecord();
+    std::vector<Node> children;
+    for(Record::iterator i = rec.begin(),
+          i_end = rec.end();
+        i != i_end;
+        ++i) {
+      children.push_back((*i).second.mkGroundTerm());
+    }
+
+    return NodeManager::currentNM()->mkNode(NodeManager::currentNM()->mkConst(rec), children);
   }
 
   inline static bool computeIsConst(NodeManager* nodeManager, TNode n) {