+def get_always_args(token, always_args, args = [], stack = []):
+ if token in stack:
+ return
+ if token.type == 'END_TKN':
+ for arg in list(always_args):
+ if arg not in args:
+ always_args.remove(arg)
+ return
+
+ stack = stack + [token]
+ if token.type in handlers and token.varname is not None:
+ args = args + [token.varname]
+ for nexttkn in token.next():
+ get_always_args(nexttkn, always_args, args, stack)
+
+class Macros(dict):
+ def load(self, filename):
+ filedata = clippy.parse(filename)
+ for entry in filedata['data']:
+ if entry['type'] != 'PREPROC':
+ continue
+ ppdir = entry['line'].lstrip().split(None, 1)
+ if ppdir[0] != 'define' or len(ppdir) != 2:
+ continue
+ ppdef = ppdir[1].split(None, 1)
+ name = ppdef[0]
+ if '(' in name:
+ continue
+ val = ppdef[1] if len(ppdef) == 2 else ''
+
+ val = val.strip(' \t\n\\')
+ if name in self:
+ sys.stderr.write('warning: macro %s redefined!\n' % (name))
+ self[name] = val
+
+def process_file(fn, ofd, dumpfd, all_defun, macros):
+ errors = 0