src/Pure/Thy/export_theory.scala
changeset 71208 5e0050eb64f2
parent 71207 8af82f3e03c9
child 71211 7d522732b7f2
--- a/src/Pure/Thy/export_theory.scala	Sun Dec 01 21:29:08 2019 +0100
+++ b/src/Pure/Thy/export_theory.scala	Mon Dec 02 11:57:42 2019 +0100
@@ -714,8 +714,10 @@
     pos: Position.T,
     name: String,
     rough_classification: Rough_Classification,
+    typargs: List[(String, Term.Sort)],
+    args: List[(String, Term.Typ)],
     terms: List[Term.Term],
-    rules: List[Prop])
+    rules: List[Term.Term])
   {
     def id: Option[Long] = Position.Id.unapply(pos)
 
@@ -724,8 +726,10 @@
         cache.position(pos),
         cache.string(name),
         rough_classification.cache(cache),
+        typargs.map({ case (name, sort) => (cache.string(name), cache.sort(sort)) }),
+        args.map({ case (name, typ) => (cache.string(name), cache.typ(typ)) }),
         terms.map(cache.term(_)),
-        rules.map(_.cache(cache)))
+        rules.map(cache.term(_)))
   }
 
   def read_spec_rules(provider: Export.Provider): List[Spec_Rule] =
@@ -737,9 +741,10 @@
       import Term_XML.Decode._
       list(
         pair(properties, pair(string, pair(decode_rough_classification,
-        pair(list(term), list(decode_prop))))))(body)
+          pair(list(pair(string, sort)), pair(list(pair(string, typ)),
+            pair(list(term), list(term))))))))(body)
     }
-    for ((pos, (name, (rough_classification, (terms, rules)))) <- spec_rules)
-      yield Spec_Rule(pos, name, rough_classification, terms, rules)
+    for ((pos, (name, (rough_classification, (typargs, (args, (terms, rules)))))) <- spec_rules)
+      yield Spec_Rule(pos, name, rough_classification, typargs, args, terms, rules)
   }
 }