def traceParseAction(f):
 f = _trim_arity(f)
 def z(*paArgs):
  thisFunc = f.func_name
  (s, l, t) = paArgs[(-3):]
  if (len(paArgs) > 3):
   thisFunc = ((paArgs[0].__class__.__name__ + '.') + thisFunc)
  sys.stderr.write((">>entering %s(line: '%s', %d, %s)\n" % (thisFunc, line(l, s), l, t)))
  try:
   ret = f(*paArgs)
  except Exception as exc:
   sys.stderr.write(('<<leaving %s (exception: %s)\n' % (thisFunc, exc)))
   raise
  sys.stderr.write(('<<leaving %s (ret: %s)\n' % (thisFunc, ret)))
  return ret
 try:
  z.__name__ = f.__name__
 except AttributeError:
  pass
 return z

def traceParseAction ( f ) : f = _trim_arity ( f ) def z ( * paArgs ) : thisFunc = f . func_name ( s , l , t ) = paArgs [ ( - 3 ) : ] if ( len ( paArgs ) > 3 ) : thisFunc = ( ( paArgs [ 0 ] . __class__ . __name__ + '.' ) + thisFunc ) sys . stderr . write ( ( ">>entering %s(line: '%s', %d, %s)\n" % ( thisFunc , line ( l , s ) , l , t ) ) ) try : ret = f ( * paArgs ) except Exception as exc : sys . stderr . write ( ( '<<leaving %s (exception: %s)\n' % ( thisFunc , exc ) ) ) raise sys . stderr . write ( ( '<<leaving %s (ret: %s)\n' % ( thisFunc , ret ) ) ) return ret try : z . __name__ = f . __name__ except AttributeError : pass return z
decorator for debugging parse actions .