408 then error (env_var ^ " not set; cannot check code for " ^ target) |
408 then error (env_var ^ " not set; cannot check code for " ^ target) |
409 else warning (env_var ^ " not set; skipped checking code for " ^ target) |
409 else warning (env_var ^ " not set; skipped checking code for " ^ target) |
410 else Isabelle_System.with_tmp_dir "Code_Test" (ext_check env_param) |
410 else Isabelle_System.with_tmp_dir "Code_Test" (ext_check env_param) |
411 end; |
411 end; |
412 |
412 |
413 fun evaluation mounted_serializer prepared_program deps ((vs, ty), t) = |
413 fun evaluation mounted_serializer prepared_program consts ((vs, ty), t) = |
414 let |
414 let |
415 val _ = if Code_Thingol.contains_dict_var t then |
415 val _ = if Code_Thingol.contains_dict_var t then |
416 error "Term to be evaluated contains free dictionaries" else (); |
416 error "Term to be evaluated contains free dictionaries" else (); |
417 val v' = Name.variant (map fst vs) "a"; |
417 val v' = Name.variant (map fst vs) "a"; |
418 val vs' = (v', []) :: vs; |
418 val vs' = (v', []) :: vs; |
419 val ty' = Code_Thingol.fun_tyco `%% [ITyVar v', ty]; |
419 val ty' = Code_Thingol.fun_tyco `%% [ITyVar v', ty]; |
420 val value_name = "Value.value.value" |
420 val value_name = "Value.value.value" |
421 val program = prepared_program |
421 val program = prepared_program |
422 |> Graph.new_node (value_name, |
422 |> Graph.new_node (value_name, |
423 Code_Thingol.Fun (Term.dummy_patternN, (((vs', ty'), [(([IVar NONE], t), (NONE, true))]), NONE))) |
423 Code_Thingol.Fun (Term.dummy_patternN, (((vs', ty'), [(([IVar NONE], t), (NONE, true))]), NONE))) |
424 |> fold (curry (perhaps o try o Graph.add_edge) value_name) deps; |
424 |> fold (curry (perhaps o try o Graph.add_edge) value_name) consts; |
425 val (program_code, deresolve) = produce (mounted_serializer program); |
425 val (program_code, deresolve) = produce (mounted_serializer program); |
426 val value_name' = the (deresolve value_name); |
426 val value_name' = the (deresolve value_name); |
427 in (program_code, value_name') end; |
427 in (program_code, value_name') end; |
428 |
428 |
429 fun evaluator thy target naming program deps = |
429 fun evaluator thy target naming program consts = |
430 let |
430 let |
431 val (mounted_serializer, prepared_program) = mount_serializer thy |
431 val (mounted_serializer, prepared_program) = mount_serializer thy |
432 target NONE "Code" [] naming program deps; |
432 target NONE "Code" [] naming program consts; |
433 in evaluation mounted_serializer prepared_program deps end; |
433 in evaluation mounted_serializer prepared_program consts end; |
434 |
434 |
435 end; (* local *) |
435 end; (* local *) |
436 |
436 |
437 |
437 |
438 (* code generation *) |
438 (* code generation *) |