Skip to content
Snippets Groups Projects
Commit 3a543a68 authored by Henrik (Grubba) Grubbström's avatar Henrik (Grubba) Grubbström
Browse files

Several minor bugfixes.

Rev: src/mklibpike.pike:1.4
parent 10b70628
Branches
Tags
No related merge requests found
/*
* $Id: mklibpike.pike,v 1.3 2005/01/03 18:24:11 grubba Exp $
* $Id: mklibpike.pike,v 1.4 2005/01/03 18:57:29 grubba Exp $
*
* Create strapping code for a list of symbols in pike.so,
* and the pike headerfiles.
......@@ -80,7 +80,7 @@ int main(int argc, array(string) argv)
array(string) srcdirs = ({ "." });
array(string) symbols = ({ });
Stdio.File out = Stdio.stdout;
string out_name;
foreach(Getopt.find_all_options(argv, ({
({ "help", Getopt.NO_ARG, ({ "-h", "--help" }) }),
......@@ -112,15 +112,11 @@ int main(int argc, array(string) argv)
break;
case "out":
// -o Specify output filename.
if (out != Stdio.stdout) {
if (out_name) {
werror("Output file specified multiple times.\n");
exit(1);
}
out = Stdio.File();
if (!out->open(val, "wct")) {
werror("Failed to open %O for writing.\n", val);
exit(1);
}
out_name = val;
break;
case "sym":
// -s Add single symbol.
......@@ -133,7 +129,8 @@ int main(int argc, array(string) argv)
werror("Failed to open symbol file %O.\n", val);
exit(1);
}
symbols += String.trim_whites((replace(raw_syms, "\r", "")/"\n")[*]);
symbols += String.trim_whites((replace(raw_syms, "\r", "")/"\n")[*]) -
({""});
break;
}
}
......@@ -158,6 +155,24 @@ int main(int argc, array(string) argv)
mapping(string:array(array(Parser.C.Token))) symbol_info = parse(tokens);
Stdio.File out = Stdio.stdout;
if (out_name) {
out = Stdio.File();
if (!out->open(out_name, "wct")) {
werror("Failed to open %O for writing.\n", out_name);
exit(1);
}
}
out->write("/*\n"
" * Automatically generated by " __FILE__ "\n"
" * on " __DATE__ ". Do NOT edit.\n"
" */\n"
"\n"
"%{#include \"%s\"\n%}\n"
"\n",
headers);
int fail;
foreach(Array.uniq(sort(symbols)), string sym) {
array(array(Parser.C.Token)) info = symbol_info[sym];
......@@ -171,6 +186,7 @@ int main(int argc, array(string) argv)
out->write("static %s (*vec_%s)%s;\n"
"%s %s%s\n"
"{\n"
// FIXME: Code to resolve the symbol here.
" %svec_%s(",
rettype, sym, params,
rettype, sym, params,
......@@ -178,6 +194,8 @@ int main(int argc, array(string) argv)
array(array(Parser.C.Token)) args = info[1][1..sizeof(info[1])-2]/({","});
foreach(args; int n; array(Parser.C.Token) arg) {
if (sizeof(arg) == 1) continue; // probable void.
array(Parser.C.Token)|Parser.C.Token name = arg[-1];
if (arrayp(name)) {
if (name[0]->text == "(") {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment