function process_function(f,arr) {
// are we in a method?
let klass = f.memberOf;
if (!klass) return;
for (v in iterate_vars(arr)) // look at all of the "variables" used in this function
if (!v.isFunction && !v.fieldOf) // that aren't function calls or struct members
for each (let m in klass.members) // now look at class members
if (m.shortName == v.shortName) // that have same name as above vars
warning(m.name + " is shadowed by a local variable", v.loc)
}
/*
class Foo {
Foo():myData(NULL) {
}
void doStuff() {
char *myData = new char[31];
}
~Foo() {
delete [] myData;
}
char *myData;
};
g++ -fplugin=gcc_dehydra.so -fplugin-arg=shadow_checker.js ...
*/