| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | #!/usr/bin/pythonimport sys, re, osnone0, some0 = 0,0branchTaken0, branchNot0 = 0,0BRANCH = FalseFUNC = Falseif sys.argv[1] == '-b':    BRANCH = True    del sys.argv[1]if sys.argv[1] == '-f':    FUNC = True    del sys.argv[1]def show(name, none, some):    if some+none == 0:        none = 1    print name, none, some, "%.02f"%(100*(float(some)/(some+none)))file_args = sys.argv[1:]files = []for fn in file_args:    if os.path.isdir(fn):        files.extend(os.path.join(fn, f) for f in os.listdir(fn))    else:        files.append(fn)for fn in files:    none = some = branchTaken = branchNot = 0    inFunc = ""    for line in open(fn, 'r'):        m = re.match(r'^[^:]*:([^:]*):(.*)', line)        if m:            body = m.group(2).rstrip()            lineno = m.group(1).strip()        else:            body = ""            lineno = "?"        m = re.match(r'^([A-Za-z_][A-Za-z0-9_]*)(?:, *)?\(', body)        if m:	    inFunc = "%s:%s %s" %(fn,lineno,m.group(1))	elif body == "}":	    if FUNC and inFunc:     	        show(inFunc, none, some)                none = some = 0                inFunc = None        if re.match(r'^ *###', line):            none += 1        elif re.match(r'^ *\d', line):            some += 1        else:            m = re.match(r'^branch.*taken (\d+)%', line)            if m:                if int(m.group(1)) == 0:                    branchNot += 1                else:                    branchTaken += 1    none0 += none    some0 += some    branchTaken0 += branchTaken    branchNot0 += branchNot    if FUNC:       pass    elif BRANCH:        if branchTaken or branchNot:            show(fn, branchNot, branchTaken)    else:        if some or none:            show(fn, none, some)if BRANCH:    if branchTaken0 or branchNot0:        show("TOTAL", branchNot0, branchTaken0)else:    if some0 or none0:        show("TOTAL", none0, some0)
 |