src/Pure/codegen.ML
changeset 37198 3af985b10550
parent 37146 f652333bbf8e
child 37944 4b7afae88c57
equal deleted inserted replaced
37197:953fc4983439 37198:3af985b10550
   892               Pretty.block [str "SOME ", Pretty.block (str "[" ::
   892               Pretty.block [str "SOME ", Pretty.block (str "[" ::
   893                 Pretty.commas (map (fn (s, _) => str (s ^ "_t ()")) args) @
   893                 Pretty.commas (map (fn (s, _) => str (s ^ "_t ()")) args) @
   894                   [str "]"])]]),
   894                   [str "]"])]]),
   895           str ");"]) ^
   895           str ");"]) ^
   896       "\n\nend;\n";
   896       "\n\nend;\n";
   897     val _ = ML_Context.eval_in (SOME ctxt) false Position.none s;
   897     val _ = ML_Context.eval_text_in (SOME ctxt) false Position.none s;
   898     val dummy_report = ([], false)
   898     val dummy_report = ([], false)
   899   in (fn size => (! test_fn size, dummy_report)) end;
   899   in (fn size => (! test_fn size, dummy_report)) end;
   900 
   900 
   901 
   901 
   902 
   902 
   924               mk_app false (mk_term_of gr "Generated" false (fastype_of t))
   924               mk_app false (mk_term_of gr "Generated" false (fastype_of t))
   925                 [str "(result ())"],
   925                 [str "(result ())"],
   926               str ");"]) ^
   926               str ");"]) ^
   927           "\n\nend;\n";
   927           "\n\nend;\n";
   928         val _ = NAMED_CRITICAL "codegen" (fn () =>   (* FIXME ??? *)
   928         val _ = NAMED_CRITICAL "codegen" (fn () =>   (* FIXME ??? *)
   929           ML_Context.eval_in (SOME ctxt) false Position.none s);
   929           ML_Context.eval_text_in (SOME ctxt) false Position.none s);
   930       in !eval_result end;
   930       in !eval_result end;
   931   in e () end;
   931   in e () end;
   932 
   932 
   933 val (_, evaluation_conv) = Context.>>> (Context.map_theory_result
   933 val (_, evaluation_conv) = Context.>>> (Context.map_theory_result
   934   (Thm.add_oracle (Binding.name "evaluation", fn ct =>
   934   (Thm.add_oracle (Binding.name "evaluation", fn ct =>
   999     let
   999     let
  1000       val mode'' = (if lib then insert (op =) "library" else I) (remove (op =) "library" mode');
  1000       val mode'' = (if lib then insert (op =) "library" else I) (remove (op =) "library" mode');
  1001       val (code, gr) = setmp_CRITICAL mode mode'' (generate_code thy modules module) xs;
  1001       val (code, gr) = setmp_CRITICAL mode mode'' (generate_code thy modules module) xs;
  1002       val thy' = thy |> Context.theory_map (ML_Context.exec (fn () =>
  1002       val thy' = thy |> Context.theory_map (ML_Context.exec (fn () =>
  1003         (case opt_fname of
  1003         (case opt_fname of
  1004           NONE => ML_Context.eval false Position.none (cat_lines (map snd code))
  1004           NONE => ML_Context.eval_text false Position.none (cat_lines (map snd code))
  1005         | SOME fname =>
  1005         | SOME fname =>
  1006             if lib then app (fn (name, s) => File.write
  1006             if lib then app (fn (name, s) => File.write
  1007                 (Path.append (Path.explode fname) (Path.basic (name ^ ".ML"))) s)
  1007                 (Path.append (Path.explode fname) (Path.basic (name ^ ".ML"))) s)
  1008               (("ROOT", implode (map (fn (name, _) =>
  1008               (("ROOT", implode (map (fn (name, _) =>
  1009                   "use \"" ^ name ^ ".ML\";\n") code)) :: code)
  1009                   "use \"" ^ name ^ ".ML\";\n") code)) :: code)