775 |
775 |
776 fun read_tyname sg raw_c = |
776 fun read_tyname sg raw_c = |
777 let val c = intern_tycon sg raw_c in |
777 let val c = intern_tycon sg raw_c in |
778 (case Symtab.lookup (#types (Type.rep_tsig (tsig_of sg)), c) of |
778 (case Symtab.lookup (#types (Type.rep_tsig (tsig_of sg)), c) of |
779 SOME (Type.LogicalType n, _) => Type (c, replicate n dummyT) |
779 SOME (Type.LogicalType n, _) => Type (c, replicate n dummyT) |
780 | NONE => raise TYPE ("Undeclared type constructor: " ^ quote c, [], [])) |
780 | _ => raise TYPE ("Undeclared type constructor: " ^ quote c, [], [])) |
781 end; |
781 end; |
782 |
782 |
783 fun read_const sg raw_c = |
783 fun read_const sg raw_c = |
784 let val c = intern_const sg raw_c in |
784 let val c = intern_const sg raw_c in |
785 if isSome (const_type sg c) then Const (c, dummyT) |
785 if isSome (const_type sg c) then Const (c, dummyT) |
1161 |
1161 |
1162 fun merge_stamps stamps1 stamps2 = |
1162 fun merge_stamps stamps1 stamps2 = |
1163 let val stamps = merge_lists' stamps1 stamps2 in |
1163 let val stamps = merge_lists' stamps1 stamps2 in |
1164 (case duplicates (map ! stamps) of |
1164 (case duplicates (map ! stamps) of |
1165 [] => stamps |
1165 [] => stamps |
1166 | dups => raise TERM ("Attempt to merge different versions of theories " |
1166 | dups => error ("Attempt to merge different versions of theories " ^ commas_quote dups)) |
1167 ^ commas_quote dups, [])) |
|
1168 end; |
1167 end; |
1169 |
1168 |
1170 |
1169 |
1171 (* trivial merge *) |
1170 (* trivial merge *) |
1172 |
1171 |
1173 fun merge_refs (sgr1 as SgRef (SOME (ref (sg1 as Sg ({stamps = s1, ...}, _)))), |
1172 fun merge_refs (sgr1 as SgRef (SOME (ref (sg1 as Sg ({stamps = s1, ...}, _)))), |
1174 sgr2 as SgRef (SOME (ref (sg2 as Sg ({stamps = s2, ...}, _))))) = |
1173 sgr2 as SgRef (SOME (ref (sg2 as Sg ({stamps = s2, ...}, _))))) = |
1175 if subsig (sg2, sg1) then sgr1 |
1174 if subsig (sg2, sg1) then sgr1 |
1176 else if subsig (sg1, sg2) then sgr2 |
1175 else if subsig (sg1, sg2) then sgr2 |
1177 else (merge_stamps s1 s2; (*check for different versions*) |
1176 else (merge_stamps s1 s2; (*check for different versions*) |
1178 raise TERM ("Attempt to do non-trivial merge of signatures", [])) |
1177 error "Attempt to do non-trivial merge of signatures") |
1179 | merge_refs _ = sys_error "Sign.merge_refs"; |
1178 | merge_refs _ = sys_error "Sign.merge_refs"; |
1180 |
1179 |
1181 val merge = deref o merge_refs o pairself self_ref; |
1180 val merge = deref o merge_refs o pairself self_ref; |
1182 |
1181 |
1183 |
1182 |