summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/objgraph.py
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-01-17 08:48:39 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-01-17 08:48:39 (GMT)
commit70c4378dbcfdcbeef6fb3aa348f32ed862fe8eb7 (patch)
treecf47b67db3753288cfd9fa2adc45e7c5cd2f8741 /Tools/scripts/objgraph.py
parenta88854059309667092000da55d4d5a5804267e9f (diff)
downloadcpython-70c4378dbcfdcbeef6fb3aa348f32ed862fe8eb7.zip
cpython-70c4378dbcfdcbeef6fb3aa348f32ed862fe8eb7.tar.gz
cpython-70c4378dbcfdcbeef6fb3aa348f32ed862fe8eb7.tar.bz2
Whitespace normalization.
Diffstat (limited to 'Tools/scripts/objgraph.py')
-rwxr-xr-xTools/scripts/objgraph.py256
1 files changed, 128 insertions, 128 deletions
diff --git a/Tools/scripts/objgraph.py b/Tools/scripts/objgraph.py
index 4eab79b..e25e5b8 100755
--- a/Tools/scripts/objgraph.py
+++ b/Tools/scripts/objgraph.py
@@ -40,19 +40,19 @@ matcher = regex.compile('\(.*\):\t?........ \(.\) \(.*\)$')
# If there is no list for the key yet, it is created.
#
def store(dict, key, item):
- if dict.has_key(key):
- dict[key].append(item)
- else:
- dict[key] = [item]
+ if dict.has_key(key):
+ dict[key].append(item)
+ else:
+ dict[key] = [item]
# Return a flattened version of a list of strings: the concatenation
# of its elements with intervening spaces.
#
def flat(list):
- s = ''
- for item in list:
- s = s + ' ' + item
- return s[1:]
+ s = ''
+ for item in list:
+ s = s + ' ' + item
+ return s[1:]
# Global variables mapping defined/undefined names to files and back.
#
@@ -65,151 +65,151 @@ undef2file = {}
# Argument is an open file.
#
def readinput(file):
- while 1:
- s = file.readline()
- if not s:
- break
- # If you get any output from this line,
- # it is probably caused by an unexpected input line:
- if matcher.search(s) < 0: s; continue # Shouldn't happen
- (ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
- fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
- if type in definitions:
- store(def2file, name, fn)
- store(file2def, fn, name)
- elif type in externals:
- store(file2undef, fn, name)
- store(undef2file, name, fn)
- elif not type in ignore:
- print fn + ':' + name + ': unknown type ' + type
+ while 1:
+ s = file.readline()
+ if not s:
+ break
+ # If you get any output from this line,
+ # it is probably caused by an unexpected input line:
+ if matcher.search(s) < 0: s; continue # Shouldn't happen
+ (ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
+ fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
+ if type in definitions:
+ store(def2file, name, fn)
+ store(file2def, fn, name)
+ elif type in externals:
+ store(file2undef, fn, name)
+ store(undef2file, name, fn)
+ elif not type in ignore:
+ print fn + ':' + name + ': unknown type ' + type
# Print all names that were undefined in some module and where they are
# defined.
#
def printcallee():
- flist = file2undef.keys()
- flist.sort()
- for file in flist:
- print file + ':'
- elist = file2undef[file]
- elist.sort()
- for ext in elist:
- if len(ext) >= 8:
- tabs = '\t'
- else:
- tabs = '\t\t'
- if not def2file.has_key(ext):
- print '\t' + ext + tabs + ' *undefined'
- else:
- print '\t' + ext + tabs + flat(def2file[ext])
+ flist = file2undef.keys()
+ flist.sort()
+ for file in flist:
+ print file + ':'
+ elist = file2undef[file]
+ elist.sort()
+ for ext in elist:
+ if len(ext) >= 8:
+ tabs = '\t'
+ else:
+ tabs = '\t\t'
+ if not def2file.has_key(ext):
+ print '\t' + ext + tabs + ' *undefined'
+ else:
+ print '\t' + ext + tabs + flat(def2file[ext])
# Print for each module the names of the other modules that use it.
#
def printcaller():
- files = file2def.keys()
- files.sort()
- for file in files:
- callers = []
- for label in file2def[file]:
- if undef2file.has_key(label):
- callers = callers + undef2file[label]
- if callers:
- callers.sort()
- print file + ':'
- lastfn = ''
- for fn in callers:
- if fn <> lastfn:
- print '\t' + fn
- lastfn = fn
- else:
- print file + ': unused'
+ files = file2def.keys()
+ files.sort()
+ for file in files:
+ callers = []
+ for label in file2def[file]:
+ if undef2file.has_key(label):
+ callers = callers + undef2file[label]
+ if callers:
+ callers.sort()
+ print file + ':'
+ lastfn = ''
+ for fn in callers:
+ if fn <> lastfn:
+ print '\t' + fn
+ lastfn = fn
+ else:
+ print file + ': unused'
# Print undefine names and where they are used.
#
def printundef():
- undefs = {}
- for file in file2undef.keys():
- for ext in file2undef[file]:
- if not def2file.has_key(ext):
- store(undefs, ext, file)
- elist = undefs.keys()
- elist.sort()
- for ext in elist:
- print ext + ':'
- flist = undefs[ext]
- flist.sort()
- for file in flist:
- print '\t' + file
+ undefs = {}
+ for file in file2undef.keys():
+ for ext in file2undef[file]:
+ if not def2file.has_key(ext):
+ store(undefs, ext, file)
+ elist = undefs.keys()
+ elist.sort()
+ for ext in elist:
+ print ext + ':'
+ flist = undefs[ext]
+ flist.sort()
+ for file in flist:
+ print '\t' + file
# Print warning messages about names defined in more than one file.
#
def warndups():
- savestdout = sys.stdout
- sys.stdout = sys.stderr
- names = def2file.keys()
- names.sort()
- for name in names:
- if len(def2file[name]) > 1:
- print 'warning:', name, 'multiply defined:',
- print flat(def2file[name])
- sys.stdout = savestdout
+ savestdout = sys.stdout
+ sys.stdout = sys.stderr
+ names = def2file.keys()
+ names.sort()
+ for name in names:
+ if len(def2file[name]) > 1:
+ print 'warning:', name, 'multiply defined:',
+ print flat(def2file[name])
+ sys.stdout = savestdout
# Main program
#
def main():
- try:
- optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
- except getopt.error:
- sys.stdout = sys.stderr
- print 'Usage:', os.path.basename(sys.argv[0]),
- print '[-cdu] [file] ...'
- print '-c: print callers per objectfile'
- print '-d: print callees per objectfile'
- print '-u: print usage of undefined symbols'
- print 'If none of -cdu is specified, all are assumed.'
- print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
- print 'e.g.: nm -o /lib/libc.a | objgraph'
- return 1
- optu = optc = optd = 0
- for opt, void in optlist:
- if opt == '-u':
- optu = 1
- elif opt == '-c':
- optc = 1
- elif opt == '-d':
- optd = 1
- if optu == optc == optd == 0:
- optu = optc = optd = 1
- if not args:
- args = ['-']
- for file in args:
- if file == '-':
- readinput(sys.stdin)
- else:
- readinput(open(file, 'r'))
- #
- warndups()
- #
- more = (optu + optc + optd > 1)
- if optd:
- if more:
- print '---------------All callees------------------'
- printcallee()
- if optu:
- if more:
- print '---------------Undefined callees------------'
- printundef()
- if optc:
- if more:
- print '---------------All Callers------------------'
- printcaller()
- return 0
+ try:
+ optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
+ except getopt.error:
+ sys.stdout = sys.stderr
+ print 'Usage:', os.path.basename(sys.argv[0]),
+ print '[-cdu] [file] ...'
+ print '-c: print callers per objectfile'
+ print '-d: print callees per objectfile'
+ print '-u: print usage of undefined symbols'
+ print 'If none of -cdu is specified, all are assumed.'
+ print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
+ print 'e.g.: nm -o /lib/libc.a | objgraph'
+ return 1
+ optu = optc = optd = 0
+ for opt, void in optlist:
+ if opt == '-u':
+ optu = 1
+ elif opt == '-c':
+ optc = 1
+ elif opt == '-d':
+ optd = 1
+ if optu == optc == optd == 0:
+ optu = optc = optd = 1
+ if not args:
+ args = ['-']
+ for file in args:
+ if file == '-':
+ readinput(sys.stdin)
+ else:
+ readinput(open(file, 'r'))
+ #
+ warndups()
+ #
+ more = (optu + optc + optd > 1)
+ if optd:
+ if more:
+ print '---------------All callees------------------'
+ printcallee()
+ if optu:
+ if more:
+ print '---------------Undefined callees------------'
+ printundef()
+ if optc:
+ if more:
+ print '---------------All Callers------------------'
+ printcaller()
+ return 0
# Call the main program.
# Use its return value as exit status.
# Catch interrupts to avoid stack trace.
#
try:
- sys.exit(main())
+ sys.exit(main())
except KeyboardInterrupt:
- sys.exit(1)
+ sys.exit(1)