424 end; |
424 end; |
425 |
425 |
426 |
426 |
427 (* register a datatype etc. *) |
427 (* register a datatype etc. *) |
428 |
428 |
429 fun add_all_code dtcos thy = |
429 fun add_all_code config dtcos thy = |
430 let |
430 let |
431 val (vs :: _, coss) = (split_list o map (DatatypePackage.the_datatype_spec thy)) dtcos; |
431 val (vs :: _, coss) = (split_list o map (DatatypePackage.the_datatype_spec thy)) dtcos; |
432 val any_css = map2 (mk_constr_consts thy vs) dtcos coss; |
432 val any_css = map2 (mk_constr_consts thy vs) dtcos coss; |
433 val css = if exists is_none any_css then [] |
433 val css = if exists is_none any_css then [] |
434 else map_filter I any_css; |
434 else map_filter I any_css; |
435 val case_rewrites = maps (#case_rewrites o DatatypePackage.the_datatype thy) dtcos; |
435 val case_rewrites = maps (#case_rewrites o DatatypePackage.the_datatype thy) dtcos; |
436 val certs = map (mk_case_cert thy) dtcos; |
436 val certs = map (mk_case_cert thy) dtcos; |
437 in |
437 in |
438 if null css then thy |
438 if null css then thy |
439 else thy |
439 else thy |
440 |> tap (fn _ => DatatypeAux.message "Registering datatype for code generator ...") |
440 |> tap (fn _ => DatatypeAux.message config "Registering datatype for code generator ...") |
441 |> fold Code.add_datatype css |
441 |> fold Code.add_datatype css |
442 |> fold_rev Code.add_default_eqn case_rewrites |
442 |> fold_rev Code.add_default_eqn case_rewrites |
443 |> fold Code.add_case certs |
443 |> fold Code.add_case certs |
444 |> add_equality vs dtcos |
444 |> add_equality vs dtcos |
445 end; |
445 end; |