text: import compiler
  import dis
  import types
  
  def extract_code_objects(co):
      l = [co]
      for const in co.co_consts:
          if type(const) == types.CodeType:
              l.append(const)
      return l
  
  def compare(a, b):
      if not (a.co_name == "?" or a.co_name.startswith('<lambda')):
          assert a.co_name == b.co_name, (a, b)
      if a.co_stacksize != b.co_stacksize:
          print "stack mismatch %s: %d vs. %d" % (a.co_name,
                                                  a.co_stacksize,
                                                  b.co_stacksize)
          if a.co_stacksize > b.co_stacksize:
              print "good code"
              dis.dis(a)
              print "bad code"
              dis.dis(b)
              assert 0
  
  def main(files):
      for file in files:
          print file
          buf = open(file).read()
          try:
              co1 = compile(buf, file, "exec")
          except SyntaxError:
              print "skipped"
              continue
          co2 = compiler.compile(buf, file, "exec")
          co1l = extract_code_objects(co1)
          co2l = extract_code_objects(co2)
          for a, b in zip(co1l, co2l):
              compare(a, b)
  
  if __name__ == "__main__":
      import sys
      main(sys.argv[1:])
  