it is now possible to register buildins in VM
[gaemu.git] / checker.d
blobb34ea227449312d2d266cb8c3815daddf3b0aee4
1 module checker is aliced;
3 import std.stdio;
5 import gmlparser;
6 import gmlparser.anal;
8 import ungmk;
9 import loader;
12 // ////////////////////////////////////////////////////////////////////////// //
13 void main (string[] args) {
14 NodeFunc[] funcs;
16 bool dumpFileNames = false;
17 bool styleWarnings = false;
18 bool doScripts = true, doActions = true;
19 bool warnVars = false;
20 bool warnWith = false;
21 bool warnAss = false;
23 bool nomore = false;
24 string[] scargs;
25 foreach (string fname; args[1..$]) {
26 import std.file;
27 import std.path;
28 if (nomore) {
29 scargs ~= fname;
30 } else {
31 if (fname.length == 0) continue;
32 if (fname == "--") { nomore = true; continue; }
33 if (fname == "-d") { dumpFileNames = true; continue; }
34 if (fname == "-w") { styleWarnings = true; continue; }
35 if (fname == "-S") { doScripts = false; continue; }
36 if (fname == "-A") { doActions = false; continue; }
37 if (fname == "-wall") {
38 warnVars = true;
39 warnWith = true;
40 warnAss = true;
41 continue;
43 if (fname == "-wvardecl") { warnVars = true; continue; }
44 if (fname == "-wwith") { warnWith = true; continue; }
45 if (fname == "-wass") { warnAss = true; continue; }
46 if (fname[0] == '@') {
47 if (fname.length < 2) assert(0, "gmk file?");
48 auto gmk = new Gmk(fname[1..$]);
49 funcs ~= gmkLoadScripts(gmk, doScripts:doScripts, doActions:doActions);
50 continue;
52 if (isDir(fname)) {
53 foreach (auto de; dirEntries(fname, "*.gm[lx]", SpanMode.breadth)) {
54 bool doit = true;
55 foreach (auto pt; pathSplitter(de.dirName)) {
56 if (pt.length && pt[0] == '_') { doit = false; break; }
58 if (doit) {
59 if (dumpFileNames) { import std.stdio; writeln("loading '", de.name, "'..."); }
60 funcs ~= loadScript(de.name, true);
63 } else {
64 if (dumpFileNames) { import std.stdio; writeln("loading '", fname, "'..."); }
65 funcs ~= loadScript(fname, true);
70 if (funcs.length > 0) {
71 writeln(funcs.length, " function", (funcs.length > 1 ? "s" : ""), " parsed");
72 foreach (auto fn; funcs) {
73 if (warnVars) {analVars(fn);
74 bool skip = false;
75 foreach (string name; [
76 "scrCreateTile",
77 "scrCreateTileObj",
78 "scrLoadCheckpoint",
79 "scrLoadLevel",
80 "scrMakeItem",
81 "scrSetCursorTile",
82 "scrSetVendingItem",
83 "scrTestLevel",
84 "scrMagicSigns",
85 ]) {
86 if (fn.name == name) { skip = true; break; }
88 if (!skip && fn.name.length > 3 && fn.name[0..3] == "sui") skip = true;
89 if (!skip) analVars(fn);
91 if (warnWith) analWith(fn);
92 if (warnAss) analAss(fn);