51 val _ = if Code_Thingol.contains_dictvar t then |
51 val _ = if Code_Thingol.contains_dictvar t then |
52 error "Term to be evaluated contains free dictionaries" else (); |
52 error "Term to be evaluated contains free dictionaries" else (); |
53 val value_name = "Value.VALUE.value" |
53 val value_name = "Value.VALUE.value" |
54 val program' = program |
54 val program' = program |
55 |> Graph.new_node (value_name, |
55 |> Graph.new_node (value_name, |
56 Code_Thingol.Fun (Term.dummy_patternN, (([], ty), [(([], t), (Drule.dummy_thm, true))]))) |
56 Code_Thingol.Fun (Term.dummy_patternN, (([], ty), [(([], t), (NONE, true))]))) |
57 |> fold (curry Graph.add_edge value_name) deps; |
57 |> fold (curry Graph.add_edge value_name) deps; |
58 val (value_code, [SOME value_name']) = Code_ML.evaluation_code_of thy |
58 val (value_code, [SOME value_name']) = Code_ML.evaluation_code_of thy |
59 (the_default target some_target) "" naming program' [value_name]; |
59 (the_default target some_target) "" naming program' [value_name]; |
60 val sml_code = "let\n" ^ value_code ^ "\nin " ^ value_name' |
60 val sml_code = "let\n" ^ value_code ^ "\nin " ^ value_name' |
61 ^ space_implode " " (map (enclose "(" ")") args) ^ " end"; |
61 ^ space_implode " " (map (enclose "(" ")") args) ^ " end"; |