Artifact [b421436208]

Artifact b42143620834c3f500244001c4eeff7c69a2f1ca:


# In the followin, the columns are to be interpreted as:

# idem - The command is idempotent in the sense that invoking it multiple
#        times with the same args in the same interp will always return the
#	 same result
# kill - The command is killable in that nothing depends on its side effects,
#	 so if its result is not used, the call may be eliminated entirely.
#	 This is 0, 1, or 'objc<=N'
#
# reads - What variables does the command read from the callframe? For
#	  the builtins in this table, the result is either 'all' or
#	  empty.
#
# writes - What variables does the command write to the callframe?
#	   This is empty, a list of numbers N (indicating that objv[N]
#	   contains the name of an output variable, or N+ (indicating that
#	   objv[N] and all following args contain the names of output
#	   variables).


GLOBAL NAMESPACE

#name			idem	kill	reads	writes
after			0	0    
cd			0	0
clock			SPECIAL[4]
close			0	0
encoding		SPECIAL[4]
eof			0	1    
exit			0	0		    Does not return
fblocked		0	1
fconfigure		0	objc<=3
fcopy			0	0
fileevent		0	0
flush			0	0
gets			0	0		objv[2]
glob			0	1
interp			SPECIAL[4]
join			1	1
lrepeat			1	1
lreverse		1	1
lsearch			1	1
lsort			SPECIAL[1]
open			0	0
pid			1	1
puts			0	0
pwd			0	1
read			0	0
regexp			SPECIAL[2]
regsub			SPECIAL[3]
scan			0	0		objv[3+]
seek			0	0    
socket			0	0
split			1	1
tell			0	1

#[1] lsort needs the callframe if -command is used, and needs whatever
#    variable access that the command needs. It's unkillable if the
#    command is unkillable. Without -command (the common case!) it doesn't
#    touch the callframe. Even most of the -commands will wind up being
#    killable and not need the callframe, but it's probably best to
#    ignore the case initially and simply announce that [lsort
#    -command] is not compilable.
#
#[2] 'regexp' needs to parse out the switches in order to decide what
#    position on the command line is the 'exp'. The following position
#    is the 'string', and after that are the match variables. 'regexp'
#    reads nothing from the callframe and writes the match variables.
#    For nonconstant args, it's safe to assume it writes everything.
#    If there are no match variables (or if no match variables are
#    live), 'regexp' is killable.
#
#[3] 'regsub' needs to parse out the switches in order to decide
#    whether a 'varName' arg is present. It reads nothing from the
#    callframe and writes only the 'varName'. For nonconstant args,
#    it's safe to assume that it writes everything. If there is no
#    match variable (or if the match variable is not live), 'regsub' is
#    killable.
#
#[4] 'clock' and 'encoding' are not yet compilable ensembles. They
#    probably ought to get made into such before attempting to analyze
#    them in the quadcode compiler.
    

#THE [platform] NAMESPACE

# name			idem	kill	reads	writes
platform::generic	1	1
platform::identify	1	1
platform::patterns	1	1


#THE [binary] ENSEMBLE

# name			idem	kill	reads	writes
tcl::binary::decode::*	1	1
tcl::binary::encode::*	1	1
tcl::binary::format	1	1
tcl::binary::scan	0	0		objv[3+]


#THE [chan] ENSEMBLE

# name			idem	kill	reads	writes
tcl::chan::blocked	0	1
tcl::chan::close	0	0
tcl::chan::copy		0	0
tcl::chan::create	0	0
tcl::chan::eof		0	1
tcl::chan::event	0	0
tcl::chan::flush	0	0
tcl::chan::gets		0	0		objv[2]
tcl::chan::names	0	1
tcl::chan::pending	0	1
tcl::chan::pipe		0	0
tcl::chan::pop		0	0
tcl::chan::postevent	0	0
tcl::chan::push		0	0
tcl::chan::read		0	0
tcl::chan::puts		0	0
tcl::chan::seek		0	0
tcl::chan::tell		0	1
tcl::chan::truncate	0	0


#THE [file] ENSEMBLE

#name			idem	kill	reads	writes
tcl::file::atime	0	objc<3
tcl::file::attributes	0	objc<4
tcl::file::channels	0	1
tcl::file::copy		0	0
tcl::file::delete	0	0
tcl::file::dirname	1	1
tcl::file::executable	0	1
tcl::file::exists	0	1
tcl::file::extension	1	1
tcl::file::isdirectory	0	1
tcl::file::isfile	0	1
tcl::file::join		1	1
tcl::file::link		0	0
tcl::file::lstat	0	0		objv[3]	is array!
tcl::file::mkdir	0	0
tcl::file::mtime	0	objc<3
tcl::file::nativename	0	1
tcl::file::normalize	0	1
tcl::file::owned	0	1
tcl::file::pathtype	1	1
tcl::file::readable	0	1
tcl::file::readlink	0	1
tcl::file::rename	0	0
tcl::file::rootname	1	1
tcl::file::separator	1	1
tcl::file::size		0	1
tcl::file::split	1	1
tcl::file::stat		0	0		objv[3] is array!
tcl::file::system	0	1
tcl::file::tail		1	1
tcl::file::tempfile	0	0
tcl::file::type		0	1
tcl::file::volumes	0	1
tcl::file::writable	0	1


#THE [info] ENSEMBLE

#name			idem	kill	reads	writes
tcl::info::args		0	1
tcl::info::body		0	1
tcl::info::cmdcount	0	1
tcl::info::commands	0	1
tcl::info::complete	1	1
tcl::info::default	0	0		objv[3]
tcl::info::errorstack	0	1
tcl::info::frame	0	1
tcl::info::functions	0	1
tcl::info::globals	0	1
tcl::info::hostname	1	1
tcl::info::library	1	1
tcl::info::loaded	0	1
tcl::info::locals	0		all	    needs var names only
tcl::info::nameofexecutable 1	1
tcl::info::patchlevel	1	1
tcl::info::procs	0	1
tcl::info::script	0	objv<2
tcl::info::sharedlibextension 1	1
tcl::info::tclversion	1	1
tcl::info::vars		0	1	all	    needs var names only


# THE [info class] SUBENSEMBLE

#name				idem	kill	reads	writes
oo::InfoClass::call		0	1
oo::InfoClass::constructor	0	1
oo::InfoClass::definition	0	1
oo::InfoClass::destructor	0	1
oo::InfoClass::filters		0	1
oo::InfoClass::forward		0	1
oo::InfoClass::instances	0	1
oo::InfoClass::methods		0	1
oo::InfoClass::methodtype	0	1
oo::InfoClass::mixins		0	1
oo::InfoClass::subclasses	0	1
oo::InfoClass::superclasses	0	1
oo::InfoClass::variables	0	1


# The [info object] SUBENSEMBLE

#name				idem	kill	reads	writes
oo::InfoObject::call		0	1
oo::InfoObject::definition	0	1
oo::InfoObject::filters		0	1
oo::InfoObject::forward		0	1
oo::InfoObject::isa		0	1
oo::InfoObject::methods		0	1
oo::InfoObject::methodtype	0	1
oo::InfoObject::mixins		0	1
oo::InfoObject::variables	0	1
oo::InfoObject::vars		0	1


# THE MATHFUNCS

#name			idem	kill	reads	writes
tcl::mathfunc::abs	1	1
tcl::mathfunc::acos	1	1
tcl::mathfunc::asin	1	1
tcl::mathfunc::atan	1	1
tcl::mathfunc::atan2	1	1
tcl::mathfunc::bool	1	1
tcl::mathfunc::ceil	1	1
tcl::mathfunc::cos	1	1
tcl::mathfunc::cosh	1	1
tcl::mathfunc::double	1	1
tcl::mathfunc::entier	1	1
tcl::mathfunc::exp	1	1
tcl::mathfunc::floor	1	1
tcl::mathfunc::fmod	1	1
tcl::mathfunc::hypot	1	1
tcl::mathfunc::int	1	1
tcl::mathfunc::isqrt	1	1
tcl::mathfunc::log	1	1
tcl::mathfunc::log10	1	1
tcl::mathfunc::max	1	1
tcl::mathfunc::min	1	1
tcl::mathfunc::pow	1	1
tcl::mathfunc::rand	0	0
tcl::mathfunc::round	1	1
tcl::mathfunc::srand	0	0
tcl::mathfunc::sin	1	1
tcl::mathfunc::sinh	1	1
tcl::mathfunc::sqrt	1	1
tcl::mathfunc::tan	1	1
tcl::mathfunc::tanh	1	1
tcl::mathfunc::wide	1	1


# THE [string] ENSEMBLE

#name			idem	kill	reads	writes
tcl::string::equal	1	1
tcl::string::first	1	1
tcl::string::last	1	1
tcl::string::repeat	1	1
tcl::string::reverse	1	1