def _next_argsig(s):
    """
    given a string, find the next complete argument signature and
    return it and a new string advanced past that point
    """

    c = s[0]

    if c in "BCDFIJSVZ":
        result = (c, s[1:])

    elif c == "[":
        d, s = _next_argsig(s[1:])
        result = (c + d, s[len(d) + 1:])

    elif c == "L":
        i = s.find(';') + 1
        result = (s[:i], s[i + 1:])

    elif c == "(":
        i = s.find(')') + 1
        result = (s[:i], s[i:])

    else:
        raise Unimplemented("_next_argsig is %r in %r" % (c, s))

    return result
def _next_argsig ( s ) : c = s [ 0 ] if c in "BCDFIJSVZ" : result = ( c , s [ 1 : ] ) elif c == "[" : d , s = _next_argsig ( s [ 1 : ] ) result = ( c + d , s [ len ( d ) + 1 : ] ) elif c == "L" : i = s . find ( ';' ) + 1 result = ( s [ : i ] , s [ i + 1 : ] ) elif c == "(" : i = s . find ( ')' ) + 1 result = ( s [ : i ] , s [ i : ] ) else : raise Unimplemented ( "_next_argsig is %r in %r" % ( c , s ) ) return result
given a string, find the next complete argument signature and
    return it and a new string advanced past that point