sbw@TURING.CSE.NAU.EDU (Steve Wampler) (11/10/90)
A recent Icon Newsletter showed a neat way to trace a builtin
function. The following little package shows how this might
be used conveniently. Briefly, the procedure 'trace_option()'
is passed the argument list to 'main'. The argument '-trace'
turns on general tracing. Arguments of the form '-Ffunction'
turn on tracing of the builtin function 'function', if possible.
I think the comments explain everything else.
Right now, the package only traces functions that I frequently
want to trace, though it is easy to add tracing of others.
---- snip 'traceset.icn' ----
procedure trace_options(args)
local nextarg, arg
#
# Check arguments for tracing parameters
#
# can trace some builtin functions, e.g.:
#
# -Ftab
#
# will trace tab()
#
every arg := !args do {
if map(arg) == "-trace" then
&trace := -1
else if match("-F",arg) then { # trace a built-in function
set_trace(arg[3:0])
}
}
return
end
procedure set_trace(vf)
local traceset, vp
#
# trace the builtin function 'vf', if possible
#
if not find("Version 8",&version) then {
write(&errout,"You are running ",&version,", which doesn't support")
write(&errout," this package. You need version 8.")
stop()
}
# so far, can only trace these (easy to add more)
traceset := set(["any","bal","copy","find","many","move","tab","upto"])
if member(traceset,vf) then {
&trace := -1 # have to also trace all procedures!
vp := vf
vp[1] := map(vp[1],&lcase,&ucase)
variable(vp) :=: variable(vf)
write(&errout, "Calls of '",vf,"' will be traced as calls of '",vp,"'")
}
else
write(&errout, vf, " is not a function that can be traced!")
return
end
procedure Any(cs,s,i,j)
return Any(cs,s,i,j)
end
procedure Bal(cs,cl,cr,s,i,j)
suspend Bal(cs,cl,cr,s,i,j)
end
procedure Copy(cs)
return Copy(cs)
end
procedure Find(s1,s,i,j)
suspend Find(s1,s,i,j)
end
procedure Many(cs,s,i,j)
return Many(cs,s,i,j)
end
procedure Match(s1,s,i,j)
return Match(s1,s,i,j)
end
procedure Move(cs)
suspend Move(cs)
end
procedure Tab(i)
suspend Tab(i)
end
procedure Upto(cs,s,i,j)
suspend Upto(cs)
end
---- snip 'traceset.icn' end ----
--
Steve Wampler
{....!arizona!naucse!sbw}
{sbw@turing.cse.nau.edu}