src/Pure/codegen.ML
changeset 20926 b2f67b947200
parent 20665 7e54c7cc72a5
child 21002 c879f0150db9
equal deleted inserted replaced
20925:2d19e511fe2c 20926:b2f67b947200
   991                      mk_app false (mk_term_of gr "Generated" false T)
   991                      mk_app false (mk_term_of gr "Generated" false T)
   992                        [Pretty.str s'], Pretty.str ")"]]) frees')) @
   992                        [Pretty.str s'], Pretty.str ")"]]) frees')) @
   993                   [Pretty.str "]"])]],
   993                   [Pretty.str "]"])]],
   994             Pretty.brk 1, Pretty.str "end"]), Pretty.str ");"]) ^
   994             Pretty.brk 1, Pretty.str "end"]), Pretty.str ");"]) ^
   995       "\n\nend;\n") ();
   995       "\n\nend;\n") ();
   996     val _ = use_text Context.ml_output false s;
   996     val _ = use_text Output.ml_output false s;
   997     fun iter f k = if k > i then NONE
   997     fun iter f k = if k > i then NONE
   998       else (case (f () handle Match =>
   998       else (case (f () handle Match =>
   999           (warning "Exception Match raised in generated code"; NONE)) of
   999           (warning "Exception Match raised in generated code"; NONE)) of
  1000         NONE => iter f (k+1) | SOME x => SOME x);
  1000         NONE => iter f (k+1) | SOME x => SOME x);
  1001     fun test k = if k > sz then NONE
  1001     fun test k = if k > sz then NONE
  1043           Pretty.brk 1,
  1043           Pretty.brk 1,
  1044           mk_app false (mk_term_of gr "Generated" false (fastype_of t))
  1044           mk_app false (mk_term_of gr "Generated" false (fastype_of t))
  1045             [Pretty.str "result"],
  1045             [Pretty.str "result"],
  1046           Pretty.str ";"])  ^
  1046           Pretty.str ";"])  ^
  1047       "\n\nend;\n";
  1047       "\n\nend;\n";
  1048     val _ = use_text Context.ml_output false s
  1048     val _ = use_text Output.ml_output false s
  1049   in !eval_result end);
  1049   in !eval_result end);
  1050 
  1050 
  1051 fun print_evaluated_term s = Toplevel.keep (fn state =>
  1051 fun print_evaluated_term s = Toplevel.keep (fn state =>
  1052   let
  1052   let
  1053     val state' = Toplevel.enter_forward_proof state;
  1053     val state' = Toplevel.enter_forward_proof state;
  1150   (fn ((((mode', module), opt_fname), modules), xs) => Toplevel.theory (fn thy =>
  1150   (fn ((((mode', module), opt_fname), modules), xs) => Toplevel.theory (fn thy =>
  1151      let
  1151      let
  1152        val mode'' = (if lib then insert (op =) "library" else I) (remove (op =) "library" mode');
  1152        val mode'' = (if lib then insert (op =) "library" else I) (remove (op =) "library" mode');
  1153        val (code, gr) = setmp mode mode'' (generate_code thy modules module) xs
  1153        val (code, gr) = setmp mode mode'' (generate_code thy modules module) xs
  1154      in ((case opt_fname of
  1154      in ((case opt_fname of
  1155          NONE => use_text Context.ml_output false
  1155          NONE => use_text Output.ml_output false
  1156            (space_implode "\n" (map snd code))
  1156            (space_implode "\n" (map snd code))
  1157        | SOME fname =>
  1157        | SOME fname =>
  1158            if lib then
  1158            if lib then
  1159              app (fn (name, s) => File.write
  1159              app (fn (name, s) => File.write
  1160                  (Path.append (Path.unpack fname) (Path.basic (name ^ ".ML"))) s)
  1160                  (Path.append (Path.unpack fname) (Path.basic (name ^ ".ML"))) s)