equal
deleted
inserted
replaced
1 (* Title: Pure/codegen.ML |
1 (* Title: Pure/codegen.ML |
2 ID: $Id$ |
|
3 Author: Stefan Berghofer, TU Muenchen |
2 Author: Stefan Berghofer, TU Muenchen |
4 |
3 |
5 Generic code generator. |
4 Generic code generator. |
6 *) |
5 *) |
7 |
6 |
596 Pretty.block (str "(" :: |
595 Pretty.block (str "(" :: |
597 separate (Pretty.brk 1) (p :: ps) @ [str ")"]) |
596 separate (Pretty.brk 1) (p :: ps) @ [str ")"]) |
598 else Pretty.block (separate (Pretty.brk 1) (p :: ps)); |
597 else Pretty.block (separate (Pretty.brk 1) (p :: ps)); |
599 |
598 |
600 fun new_names t xs = Name.variant_list |
599 fun new_names t xs = Name.variant_list |
601 (map (fst o fst o dest_Var) (term_vars t) union |
600 (map (fst o fst o dest_Var) (OldTerm.term_vars t) union |
602 add_term_names (t, ML_Syntax.reserved_names)) (map mk_id xs); |
601 add_term_names (t, ML_Syntax.reserved_names)) (map mk_id xs); |
603 |
602 |
604 fun new_name t x = hd (new_names t [x]); |
603 fun new_name t x = hd (new_names t [x]); |
605 |
604 |
606 fun if_library x y = if member (op =) (!mode) "library" then x else y; |
605 fun if_library x y = if member (op =) (!mode) "library" then x else y; |
915 fun eval_term thy t = |
914 fun eval_term thy t = |
916 let |
915 let |
917 val ctxt = ProofContext.init thy; |
916 val ctxt = ProofContext.init thy; |
918 val e = |
917 val e = |
919 let |
918 let |
920 val _ = (null (term_tvars t) andalso null (term_tfrees t)) orelse |
919 val _ = (null (Term.add_tvars t []) andalso null (Term.add_tfrees t [])) orelse |
921 error "Term to be evaluated contains type variables"; |
920 error "Term to be evaluated contains type variables"; |
922 val _ = (null (term_vars t) andalso null (term_frees t)) orelse |
921 val _ = (null (Term.add_vars t []) andalso null (Term.add_frees t [])) orelse |
923 error "Term to be evaluated contains variables"; |
922 error "Term to be evaluated contains variables"; |
924 val (code, gr) = setmp mode ["term_of"] |
923 val (code, gr) = setmp mode ["term_of"] |
925 (generate_code_i thy [] "Generated") |
924 (generate_code_i thy [] "Generated") |
926 [("result", Abs ("x", TFree ("'a", []), t))]; |
925 [("result", Abs ("x", TFree ("'a", []), t))]; |
927 val s = "structure EvalTerm =\nstruct\n\n" ^ |
926 val s = "structure EvalTerm =\nstruct\n\n" ^ |