src/Pure/sign.ML
changeset 15826 e9b4c9feb296
parent 15801 d2f5ca3c048d
child 15889 40161808bfe9
equal deleted inserted replaced
15825:1576f9d3ffae 15826:e9b4c9feb296
   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