src/Pure/Tools/codegen_serializer.ML
changeset 18812 a4554848b59e
parent 18756 5eb3df798405
child 18850 92ef83e5eaea
equal deleted inserted replaced
18811:15f9fe3064ef 18812:a4554848b59e
   282       ];
   282       ];
   283     fun pretty_compact fxy pr [e1, e2] =
   283     fun pretty_compact fxy pr [e1, e2] =
   284       case unfoldr dest_cons e2
   284       case unfoldr dest_cons e2
   285        of (es, IConst (c, _)) => (writeln (string_of_int (length es));
   285        of (es, IConst (c, _)) => (writeln (string_of_int (length es));
   286             if c = thingol_nil
   286             if c = thingol_nil
   287             then Pretty.gen_list "," "[" "]" (map (pr NOBR) (e1::es))
   287             then Pretty.enum "," "[" "]" (map (pr NOBR) (e1::es))
   288             else pretty_default fxy pr e1 e2)
   288             else pretty_default fxy pr e1 e2)
   289         | _ => pretty_default fxy pr e1 e2;
   289         | _ => pretty_default fxy pr e1 e2;
   290   in ((2, 2), pretty_compact) end;
   290   in ((2, 2), pretty_compact) end;
   291 
   291 
   292 
   292 
   343       | ml_from_type _ (IVarT (v, [])) =
   343       | ml_from_type _ (IVarT (v, [])) =
   344           str ("'" ^ v)
   344           str ("'" ^ v)
   345       | ml_from_type _ (IVarT (_, sort)) =
   345       | ml_from_type _ (IVarT (_, sort)) =
   346           "cannot serialize sort constrained type variable to ML: " ^ commas sort |> error
   346           "cannot serialize sort constrained type variable to ML: " ^ commas sort |> error
   347       | ml_from_type _ (IDictT fs) =
   347       | ml_from_type _ (IDictT fs) =
   348           Pretty.gen_list "," "{" "}" (
   348           Pretty.enum "," "{" "}" (
   349             map (fn (f, ty) =>
   349             map (fn (f, ty) =>
   350               Pretty.block [str (ml_from_label f ^ ": "), ml_from_type NOBR ty]) fs
   350               Pretty.block [str (ml_from_label f ^ ": "), ml_from_type NOBR ty]) fs
   351           );
   351           );
   352     fun ml_from_pat fxy (ICons ((f, ps), ty)) =
   352     fun ml_from_pat fxy (ICons ((f, ps), ty)) =
   353           (case const_syntax f
   353           (case const_syntax f
   358                   |> cons ((str o resolv) f)
   358                   |> cons ((str o resolv) f)
   359                   |> brackify fxy
   359                   |> brackify fxy
   360                 else
   360                 else
   361                   ps
   361                   ps
   362                   |> map (ml_from_pat BR)
   362                   |> map (ml_from_pat BR)
   363                   |> Pretty.gen_list "," "(" ")"
   363                   |> Pretty.enum "," "(" ")"
   364                   |> single
   364                   |> single
   365                   |> cons ((str o resolv) f)
   365                   |> cons ((str o resolv) f)
   366                   |> brackify fxy
   366                   |> brackify fxy
   367             | SOME ((i, k), pr) =>
   367             | SOME ((i, k), pr) =>
   368                 if not (i <= length ps andalso length ps <= k)
   368                 if not (i <= length ps andalso length ps <= k)
   431             :: map (mk_clause "| ") cs
   431             :: map (mk_clause "| ") cs
   432           ) end
   432           ) end
   433       | ml_from_expr fxy (IInst _) =
   433       | ml_from_expr fxy (IInst _) =
   434           error "cannot serialize poly instant to ML"
   434           error "cannot serialize poly instant to ML"
   435       | ml_from_expr fxy (IDictE fs) =
   435       | ml_from_expr fxy (IDictE fs) =
   436           Pretty.gen_list "," "{" "}" (
   436           Pretty.enum "," "{" "}" (
   437             map (fn (f, e) =>
   437             map (fn (f, e) =>
   438               Pretty.block [str (ml_from_label f ^ " = "), ml_from_expr NOBR e]) fs
   438               Pretty.block [str (ml_from_label f ^ " = "), ml_from_expr NOBR e]) fs
   439           )
   439           )
   440       | ml_from_expr fxy (ILookup ([], v)) =
   440       | ml_from_expr fxy (ILookup ([], v)) =
   441           str v
   441           str v
   454       | ml_from_expr _ e =
   454       | ml_from_expr _ e =
   455           error ("dubious expression: " ^ (Pretty.output o pretty_iexpr) e)
   455           error ("dubious expression: " ^ (Pretty.output o pretty_iexpr) e)
   456     and ml_mk_app f es =
   456     and ml_mk_app f es =
   457       if is_cons f andalso length es > 1
   457       if is_cons f andalso length es > 1
   458       then
   458       then
   459         [(str o resolv) f, Pretty.gen_list " *" "(" ")" (map (ml_from_expr BR) es)]
   459         [(str o resolv) f, Pretty.enum " *" "(" ")" (map (ml_from_expr BR) es)]
   460       else
   460       else
   461         (str o resolv) f :: map (ml_from_expr BR) es
   461         (str o resolv) f :: map (ml_from_expr BR) es
   462     and ml_from_app fxy =
   462     and ml_from_app fxy =
   463       from_app ml_mk_app ml_from_expr const_syntax fxy;
   463       from_app ml_mk_app ml_from_expr const_syntax fxy;
   464     fun ml_from_funs (ds as d::ds_tl) =
   464     fun ml_from_funs (ds as d::ds_tl) =
   646       let
   646       let
   647         fun from_sctxt [] = str ""
   647         fun from_sctxt [] = str ""
   648           | from_sctxt vs =
   648           | from_sctxt vs =
   649               vs
   649               vs
   650               |> map (fn (v, cls) => str ((upper_first o resolv) cls ^ " " ^ lower_first v))
   650               |> map (fn (v, cls) => str ((upper_first o resolv) cls ^ " " ^ lower_first v))
   651               |> Pretty.gen_list "," "(" ")"
   651               |> Pretty.enum "," "(" ")"
   652               |> (fn p => Pretty.block [p, str " => "])
   652               |> (fn p => Pretty.block [p, str " => "])
   653       in 
   653       in 
   654         vs
   654         vs
   655         |> map (fn (v, sort) => map (pair v) sort)
   655         |> map (fn (v, sort) => map (pair v) sort)
   656         |> Library.flat
   656         |> Library.flat