def func(directory): for root,_,files in os.walk(directory): for f in files: if f.endswith('.c'): filename = os.path.join(root, f) print(filename) with tempfile.TemporaryFile() as fp: with open(filename) as f: change_count = 0 for line in f: if line.strip().endswith(';') and ',' in line: if line.count('(') == line.count(')'): doc = domutil.get_doc_from_code(line) unit_nodes = doc.getElementsByTagName('unit') unit_node = unit_nodes.item(0) decl_stmt_node = domutil.get_first_child_by_tagname(unit_node, 'decl_stmt') if domutil.is_element(decl_stmt_node) and decl_stmt_node.tagName == 'decl_stmt': decl_nodes = domutil.get_children_by_tagname(decl_stmt_node, 'decl') if len(decl_nodes) > 1: change_count+=1 # result = syntaxutil.parse_decl_stmt_code(line) full_type = get_type(line) # FIXME job *job, *sj = deserializeJob(nextjob,remlen,&nextjob,SER_MESSAGE); if full_type and '(' not in line: variables = line.split(',')[:] var1 = variables[0] line = var1 + ';\n' + ';\n'.join([full_type + ' ' + var for var in variables[1:]]) fp.write(line.encode('utf8')) print('made '+str(change_count)+' changes to file: ' + filename) fp.seek(0) content = fp.read().decode('utf8') with open(filename, 'w') as f: f.write(content)
def parse_parameter_list(node): """Parse a <parameter_list> of a function. :return ((type1,var1), (type2,var2), ...) """ assert(domutil.is_element(node) and node.tagName == 'parameter_list') result = [] for param_node in domutil.get_children_by_tagname(node, 'param'): decl_node = domutil.get_first_child_by_tagname(param_node, 'decl') if decl_node: type_name,var_name,_ = parse_decl(decl_node) result.append((type_name, var_name)) return result
def parse_struct(node): """Parse a <struct> node Do not anonymous inner enum, union or structs. :return (name, [(type1, field1), (type1, field1), ...]) """ assert(domutil.is_element(node) and node.tagName == 'struct') name_node = domutil.get_first_child_by_tagname(node, 'name') block_node = domutil.get_first_child_by_tagname(node, 'block') if name_node: name = domutil.get_text_content(name_node) else: name = '' fields = [] for decl_stmt_node in domutil.get_children_by_tagname(block_node, 'decl_stmt'): decl = parse_decl_stmt(decl_stmt_node) fields.append(decl[0:2]) return (name, fields)
def parse_expr(node): """Parse a <expr> :retrn a set of variable names used. :bug it=(item*)ptr; the type cast will be recognized as name :bug there may be <expr> inside <expr> """ assert(domutil.is_element(node) and node.tagName == 'expr') name_nodes = domutil.get_children_by_tagname(node, 'name') names = set() for name_node in name_nodes: name = domutil.get_text_content(name_node) # TODO move array related code into util names.add(simplify_variable_name(name)) # for a->b double_name_node = domutil.get_first_child_by_tagnames(node, 'name', 'name') if double_name_node: name = domutil.get_text_content(double_name_node) names.add(simplify_variable_name(name)) return names