src/Pure/General/output.ML
changeset 23862 b1861768d8f4
parent 23727 39f8d1480d55
child 23922 707639e9497d
equal deleted inserted replaced
23861:72bb3494746f 23862:b1861768d8f4
   139 (** timing **)
   139 (** timing **)
   140 
   140 
   141 (*global timing mode*)
   141 (*global timing mode*)
   142 val timing = ref false;
   142 val timing = ref false;
   143 
   143 
   144 (*a conditional timing function: applies f to () and, if the flag is true,
   144 (*conditional timing*)
   145   prints its runtime on warning channel*)
       
   146 fun cond_timeit flag f =
   145 fun cond_timeit flag f =
   147   if flag then
   146   if flag then
   148     let val start = start_timing ()
   147     let
   149         val result = f ()
   148       val start = start_timing ();
       
   149       val result = f ();
   150     in warning (end_timing start); result end
   150     in warning (end_timing start); result end
   151   else f ();
   151   else f ();
   152 
   152 
   153 (*unconditional timing function*)
   153 (*unconditional timing*)
   154 fun timeit x = cond_timeit true x;
   154 fun timeit x = cond_timeit true x;
   155 
   155 
   156 (*timed application function*)
   156 (*timed application function*)
   157 fun timeap f x = timeit (fn () => f x);
   157 fun timeap f x = timeit (fn () => f x);
   158 fun timeap_msg s f x = (warning s; timeap f x);
   158 fun timeap_msg s f x = (warning s; timeap f x);