src/Pure/codegen.ML
changeset 29266 4a478f9d2847
parent 29105 8f38bf68d42e
child 29270 0eade173f77e
equal deleted inserted replaced
29265:5b4247055bd7 29266:4a478f9d2847
     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" ^