equal
deleted
inserted
replaced
159 let |
159 let |
160 val thy = Proof_Context.theory_of ctxt |
160 val thy = Proof_Context.theory_of ctxt |
161 val (driver, target) = |
161 val (driver, target) = |
162 (case get_driver thy compiler of |
162 (case get_driver thy compiler of |
163 NONE => error ("No driver for target " ^ compiler) |
163 NONE => error ("No driver for target " ^ compiler) |
164 | SOME f => f) |
164 | SOME drv => drv) |
165 val debug = Config.get (Proof_Context.init_global thy) overlord |
165 val debug = Config.get (Proof_Context.init_global thy) overlord |
166 val with_dir = if debug then with_overlord_dir else Isabelle_System.with_tmp_dir |
166 val with_dir = if debug then with_overlord_dir else Isabelle_System.with_tmp_dir |
167 fun evaluate result = |
167 fun evaluate result = |
168 with_dir "Code_Test" (driver ctxt ((apfst o map o apfst) Long_Name.implode result)) |
168 with_dir "Code_Test" (driver ctxt ((apfst o map o apfst) Long_Name.implode result)) |
169 |> parse_result compiler |
169 |> parse_result compiler |
227 val result = dynamic_value_strict ctxt t target |
227 val result = dynamic_value_strict ctxt t target |
228 |
228 |
229 val failed = |
229 val failed = |
230 filter_out (fst o fst o fst) (result ~~ ts ~~ evals) |
230 filter_out (fst o fst o fst) (result ~~ ts ~~ evals) |
231 handle ListPair.UnequalLengths => |
231 handle ListPair.UnequalLengths => |
232 error ("Evaluation failed!\nWrong number of test results: " ^ Int.toString (length result)) |
232 error ("Evaluation failed!\nWrong number of test results: " ^ string_of_int (length result)) |
233 in |
233 in |
234 (case failed of [] => |
234 (case failed of [] => |
235 () |
235 () |
236 | _ => error (Pretty.string_of (pretty_failures ctxt target failed))) |
236 | _ => error (Pretty.string_of (pretty_failures ctxt target failed))) |
237 end |
237 end |
312 |
312 |
313 val (out, res) = Isabelle_System.bash_output run_cmd |
313 val (out, res) = Isabelle_System.bash_output run_cmd |
314 val _ = |
314 val _ = |
315 if res = 0 then () |
315 if res = 0 then () |
316 else error ("Evaluation for " ^ compilerN ^ " terminated with error code " ^ |
316 else error ("Evaluation for " ^ compilerN ^ " terminated with error code " ^ |
317 Int.toString res ^ "\nBash output:\n" ^ out) |
317 string_of_int res ^ "\nBash output:\n" ^ out) |
318 in out end |
318 in out end |
319 in run end |
319 in run end |
320 |
320 |
321 |
321 |
322 (* driver for PolyML *) |
322 (* driver for PolyML *) |
494 |
494 |
495 fun mk_code_file name = Path.append path (Path.basic name) |
495 fun mk_code_file name = Path.append path (Path.basic name) |
496 val driver_path = Path.append path (Path.basic driverN) |
496 val driver_path = Path.append path (Path.basic driverN) |
497 val driver = |
497 val driver = |
498 "module Main where {\n" ^ |
498 "module Main where {\n" ^ |
499 String.concat (map (fn module => "import qualified " ^ unsuffix ".hs" module ^ ";\n") modules) ^ |
499 implode (map (fn module => "import qualified " ^ unsuffix ".hs" module ^ ";\n") modules) ^ |
500 "main = do {\n" ^ |
500 "main = do {\n" ^ |
501 " let {\n" ^ |
501 " let {\n" ^ |
502 " format_term Nothing = \"\";\n" ^ |
502 " format_term Nothing = \"\";\n" ^ |
503 " format_term (Just t) = t ();\n" ^ |
503 " format_term (Just t) = t ();\n" ^ |
504 " format (True, _) = \"" ^ successN ^ "\\n\";\n" ^ |
504 " format (True, _) = \"" ^ successN ^ "\\n\";\n" ^ |
581 >> (fn (ts, targets) => Toplevel.keep (test_code_cmd ts targets o Toplevel.context_of))) |
581 >> (fn (ts, targets) => Toplevel.keep (test_code_cmd ts targets o Toplevel.context_of))) |
582 |
582 |
583 val target_Scala = "Scala_eval" |
583 val target_Scala = "Scala_eval" |
584 val target_Haskell = "Haskell_eval" |
584 val target_Haskell = "Haskell_eval" |
585 |
585 |
586 val _ = Theory.setup |
586 val _ = Theory.setup |
587 (Code_Target.add_derived_target (target_Scala, [(Code_Scala.target, I)]) |
587 (Code_Target.add_derived_target (target_Scala, [(Code_Scala.target, I)]) |
588 #> Code_Target.add_derived_target (target_Haskell, [(Code_Haskell.target, I)])) |
588 #> Code_Target.add_derived_target (target_Haskell, [(Code_Haskell.target, I)])) |
589 |
589 |
590 val _ = |
590 val _ = |
591 Theory.setup (fold add_driver |
591 Theory.setup (fold add_driver |