src/Tools/code/code_target.ML
changeset 25191 e1146aa1e3e3
parent 25147 85463aff6dbe
child 25204 36cf92f63a44
equal deleted inserted replaced
25190:5cd8486c5a4f 25191:e1146aa1e3e3
  1705       error "Term to be evaluated constains free dictionaries" else ();
  1705       error "Term to be evaluated constains free dictionaries" else ();
  1706     val val_args = space_implode " "
  1706     val val_args = space_implode " "
  1707       (NameSpace.qualifier CodeName.value_name :: map (enclose "(" ")") args);
  1707       (NameSpace.qualifier CodeName.value_name :: map (enclose "(" ")") args);
  1708     val seri = get_serializer thy "SML" false (SOME "Isabelle_Eval") NONE [];
  1708     val seri = get_serializer thy "SML" false (SOME "Isabelle_Eval") NONE [];
  1709     val code' = CodeThingol.add_value_stmt (t, ty) code;
  1709     val code' = CodeThingol.add_value_stmt (t, ty) code;
  1710     fun eval () = (
  1710     val label = "evaluation in SML";
  1711       reff := NONE;
  1711     fun eval () = (seri (SOME [CodeName.value_name]) code';
  1712       seri (SOME [CodeName.value_name]) code';
  1712       evaluate (ref_name, reff) label Output.ml_output (!eval_verbose) val_args);
  1713       use_text "generated code for evaluation" Output.ml_output (!eval_verbose)
  1713   in NAMED_CRITICAL label eval end;
  1714         ("val _ = (" ^ ref_name ^ " := SOME (fn () => " ^ val_args ^ "))");
       
  1715       case !reff
       
  1716        of NONE => error ("Could not retrieve value of ML reference " ^ quote ref_name
       
  1717             ^ " (reference probably has been shadowed)")
       
  1718         | SOME f => f
       
  1719       );
       
  1720   in CRITICAL eval () end;
       
  1721 
  1714 
  1722 
  1715 
  1723 
  1716 
  1724 (** optional pretty serialization **)
  1717 (** optional pretty serialization **)
  1725 
  1718