home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
gftrace.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
3KB
|
95 lines
############################################################################
#
# File: gftrace.icn
#
# Subject: Program for generating function tracing procedures
#
# Author: Gregg M. Townsend
#
# Date: August 8, 1997
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program writes a set of procedures to standard output. Those
# procedures can be linked with an Icon program to enable the tracing of
# calls to built-in functions. See the comments in the generated code
# for details.
#
# The set of generated functions reflects the built-in functions of
# the version of Icon under which this generator is run.
#
############################################################################
procedure main()
local s
header()
write()
write("procedure _func(a[]); _func:=proc(\"proc\",0); ",
"proc:=_proc; return _func!a; end")
write("procedure _proc(a[]); static p; initial p:=_func(\"proc\",0); ",
"suspend p!a; end")
write()
every s := function() do
if s ~== "proc" then
write("procedure ", s, "(a[]); static p; initial p:=_func(\"",
s, "\",0); suspend p!a; end")
end
procedure header()
local divider, date
divider := repl("#", 76)
&dateline ? {
tab(upto(',') + 1)
tab(many(' '))
date := tab(upto(',') + 6)
}
every write(![
divider,
"#",
"#\tFile: ftrace.icn",
"#",
"#\tSubject: Procedures for tracing calls to built-in functions",
"#",
"#\tAuthor: Gregg M. Townsend",
"#",
"#\tDate: " || date,
"#",
divider
])
every write ("# ", ![
"",
" These procedures, when linked with an Icon program, cause calls of",
"built-in functions to be traced (along with calls of user procedures)",
"when &trace is nonzero. This is accomplished by interposing a level of",
"Icon procedures between the user program and the built-in functions.",
"",
" In the trace output, function arguments are shown as a list. The",
"very first function call produces two extra trace lines showing a call",
"to \"_func\". Calls to \"proc\" are reported as calls to \"_proc\".",
"",
" If the user program overloads any built-in function, linking fails",
"due to an \"inconsistent redeclaration\".",
""])
write(divider)
write("#")
write("# Generated under: ", &version)
write("#")
write(divider)
return
end