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 ...
*/