60 fun merge _ (tabs: T * T) = Symtab.merge (op =) tabs; |
60 fun merge _ (tabs: T * T) = Symtab.merge (op =) tabs; |
61 fun print _ _ = (); |
61 fun print _ _ = (); |
62 end); |
62 end); |
63 |
63 |
64 fun put_typedef newT oldT Abs_name Rep_name thy = |
64 fun put_typedef newT oldT Abs_name Rep_name thy = |
65 TypedefData.put (Symtab.update_new |
65 TypedefData.put (Symtab.curried_update_new |
66 ((fst (dest_Type newT), (newT, oldT, Abs_name, Rep_name)), |
66 (fst (dest_Type newT), (newT, oldT, Abs_name, Rep_name)) (TypedefData.get thy)) thy; |
67 TypedefData.get thy)) thy; |
|
68 |
67 |
69 |
68 |
70 |
69 |
71 (** type declarations **) |
70 (** type declarations **) |
72 |
71 |
281 val (gr', _) = Codegen.invoke_tycodegen thy defs dep module false (gr, T); |
280 val (gr', _) = Codegen.invoke_tycodegen thy defs dep module false (gr, T); |
282 val (gr'', ps) = |
281 val (gr'', ps) = |
283 foldl_map (Codegen.invoke_codegen thy defs dep module true) (gr', ts); |
282 foldl_map (Codegen.invoke_codegen thy defs dep module true) (gr', ts); |
284 val id = Codegen.mk_qual_id module (Codegen.get_const_id s gr'') |
283 val id = Codegen.mk_qual_id module (Codegen.get_const_id s gr'') |
285 in SOME (gr'', Codegen.mk_app brack (Pretty.str id) ps) end; |
284 in SOME (gr'', Codegen.mk_app brack (Pretty.str id) ps) end; |
286 fun lookup f T = getOpt (Option.map f (Symtab.lookup |
285 fun lookup f T = |
287 (TypedefData.get thy, get_name T)), "") |
286 (case Symtab.curried_lookup (TypedefData.get thy) (get_name T) of |
|
287 NONE => "" |
|
288 | SOME s => f s); |
288 in |
289 in |
289 (case strip_comb t of |
290 (case strip_comb t of |
290 (Const (s, Type ("fun", [T, U])), ts) => |
291 (Const (s, Type ("fun", [T, U])), ts) => |
291 if lookup #4 T = s andalso |
292 if lookup #4 T = s andalso |
292 is_none (Codegen.get_assoc_type thy (get_name T)) |
293 is_none (Codegen.get_assoc_type thy (get_name T)) |
301 fun mk_tyexpr [] s = Pretty.str s |
302 fun mk_tyexpr [] s = Pretty.str s |
302 | mk_tyexpr [p] s = Pretty.block [p, Pretty.str (" " ^ s)] |
303 | mk_tyexpr [p] s = Pretty.block [p, Pretty.str (" " ^ s)] |
303 | mk_tyexpr ps s = Pretty.list "(" (") " ^ s) ps; |
304 | mk_tyexpr ps s = Pretty.list "(" (") " ^ s) ps; |
304 |
305 |
305 fun typedef_tycodegen thy defs gr dep module brack (Type (s, Ts)) = |
306 fun typedef_tycodegen thy defs gr dep module brack (Type (s, Ts)) = |
306 (case Symtab.lookup (TypedefData.get thy, s) of |
307 (case Symtab.curried_lookup (TypedefData.get thy) s of |
307 NONE => NONE |
308 NONE => NONE |
308 | SOME (newT as Type (tname, Us), oldT, Abs_name, Rep_name) => |
309 | SOME (newT as Type (tname, Us), oldT, Abs_name, Rep_name) => |
309 if isSome (Codegen.get_assoc_type thy tname) then NONE else |
310 if isSome (Codegen.get_assoc_type thy tname) then NONE else |
310 let |
311 let |
311 val module' = Codegen.if_library |
312 val module' = Codegen.if_library |