Sometimes it is useful to watch a word working. The Tracer gives many informations, which may be confusing or un-usable at all. The number of calls of a given word can be more instructive. This is the time for the profiler utility.
variable profiling? : profile:on -1 profiling? ! ; : profile:off 0 profiling? ! ; : profiler profiling? @ if 1 swap +! else drop then ; \ re-define colon : : : here 2 allot postpone literal postpone profiler ; \ get the address of the profiling data. : xt>prf ( xt -- addr ) cell+ @i ;
After loading it into the controller, every colon word gets a counter (1 cell) which is incremented every time the word is called. Since this cell can be used like any variable, it can be reset any time as well.
> : foo 1 ; ok > profiler:on ok > ' foo xt>prf @ . 0 ok > foo ok > ' foo xt>prf @ . 1 ok > 0 ' foo xt>prf ! ok >