| Server IP : 82.208.35.60 / Your IP : 216.73.217.33 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/local/share/doc/slang/tm/rtl/ |
Upload File : |
#!/usr/bin/env slsh
% -*- slang -*-
% This file is used to determine what functions still need documenting.
% I think that it provides a good example of the use of associative arrays.
_debug_info = 1;
variable Src_Files = "../../../src/*.c";
variable TM_Files = "*.tm";
variable Unwanted_Files = "../../../src/calc.c";
define grep (pat, files)
{
if (strlen (files) == 0)
return String_Type[0];
variable fp = popen ("rgrep '$pat' $files"$, "r");
variable matches;
matches = fgetslines (fp);
() = pclose (fp);
return matches;
}
static define prune_array (a, b)
{
foreach (b) using ("keys")
{
variable k = ();
if (0 == assoc_key_exists (a, k))
continue;
assoc_delete_key (a, k);
b[k] = 0;
}
}
define get_with_pattern (a, pat, white)
{
variable f;
foreach (grep (pat, Src_Files))
{
f = ();
f = strtok (f, white)[1];
a [f] = 1;
}
if (Unwanted_Files != NULL) foreach (grep (pat, Unwanted_Files))
{
f = ();
f = strtok (f, white)[1];
assoc_delete_key (a, f);
}
}
define get_src_intrinsics ()
{
variable f;
variable src = Assoc_Type[Int_Type];
get_with_pattern (src, "^[ \t]+MAKE_INTRINSIC.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_MATH_UNARY.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_APP_UNARY.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_ARITH_UNARY.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_ARITH_BINARY.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_VARIABLE.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_DCONSTANT.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_FCONSTANT.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_ICONSTANT.*(\".*\"", "\"");
get_with_pattern (src, "^[ \t]+MAKE_LLCONSTANT.*(\".*\"", "\"");
get_with_pattern (src, "SLclass_allocate_class[ \t]+(\"", "\"");
get_with_pattern (src, "SLadd_intrinsic[^(]+(\"", "\"");
return src;
}
define get_doc_intrinsics ()
{
variable funs;
variable doc = Assoc_Type[Int_Type];
funs = grep ("^\\\\function{", TM_Files);
foreach (funs)
{
variable f;
f = ();
f = strtok (f, "{}")[1];
foreach f (strtok (f, ","))
doc [f] = 1;
}
funs = grep ("^\\\\variable{", TM_Files);
foreach (funs)
{
f = ();
f = strtok (f, "{}")[1];
doc [f] = 1;
}
funs = grep ("^\\\\datatype{", TM_Files);
foreach (funs)
{
f = ();
f = strtok (f, "{}")[1];
doc [f] = 1;
}
return doc;
}
define slsh_main ()
{
variable k;
variable src, doc;
doc = get_doc_intrinsics ();
src = get_src_intrinsics ();
prune_array (src, doc);
k = assoc_get_keys (src);
k = k[array_sort(k)];
foreach (k)
{
message ();
}
k = assoc_get_keys (doc);
variable v = assoc_get_values (doc);
variable i = where (v);
if (length (i))
{
message ("\n***The following are documented but unknown***");
foreach (k[i])
message ();
}
}