Use raw strings on gdb.python/py-xmethods.exp (and fix Python 3.8's "SyntaxWarning: invalid escape sequence")
Commit Message
The way unrecognized escape sequences are handled has changed in
Python 3.8: users now see a SyntaxWarning message, which will
eventually become a SyntaxError in future versions of Python:
(gdb) source /blabla/gdb.python/py-xmethods/py-xmethods.py
/blabla/gdb.python/py-xmethods/py-xmethods.py:204: SyntaxWarning: invalid escape seque
nce \+
'operator\+',
/blabla/gdb.python/py-xmethods/py-xmethods.py:211: SyntaxWarning: invalid escape seque
nce \+
'operator\+\+',
One of our testcases, gdb.python/py-xmethods.exp, contains strings in
the form of "operator\+". This is not recognized by Python, but is
still needed by the testsuite to work properly. The solution is
simple: we just have to make sure these strings are marked as
raw (i.e, r""). This is what this patch does. I took the opportunity
to also convert other strings to raw, which, in two cases, allowed the
removal of an extra backslash.
I tested this using Python 3.7 and Python 3.8, and everything works
fine.
I think I could push this as obvious, but decided to send it to
gdb-patches just in case.
gdb/testsuite/ChangeLog:
2019-08-25 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.python/py-xmethods.exp: Use raw strings when passing
arguments to SimpleXMethodMatcher.
---
gdb/testsuite/gdb.python/py-xmethods.py | 36 ++++++++++++-------------
1 file changed, 18 insertions(+), 18 deletions(-)
Comments
On 2019-08-25 12:21 p.m., Sergio Durigan Junior wrote:
> The way unrecognized escape sequences are handled has changed in
> Python 3.8: users now see a SyntaxWarning message, which will
> eventually become a SyntaxError in future versions of Python:
>
> (gdb) source /blabla/gdb.python/py-xmethods/py-xmethods.py
> /blabla/gdb.python/py-xmethods/py-xmethods.py:204: SyntaxWarning: invalid escape seque
> nce \+
> 'operator\+',
> /blabla/gdb.python/py-xmethods/py-xmethods.py:211: SyntaxWarning: invalid escape seque
> nce \+
> 'operator\+\+',
>
> One of our testcases, gdb.python/py-xmethods.exp, contains strings in
> the form of "operator\+". This is not recognized by Python, but is
> still needed by the testsuite to work properly. The solution is
> simple: we just have to make sure these strings are marked as
> raw (i.e, r""). This is what this patch does. I took the opportunity
> to also convert other strings to raw, which, in two cases, allowed the
> removal of an extra backslash.
>
> I tested this using Python 3.7 and Python 3.8, and everything works
> fine.
>
> I think I could push this as obvious, but decided to send it to
> gdb-patches just in case.
Just to understand correctly, could you have also changed
'operator\+'
to
'operator\\+'
?
In any case, I think using raw strings is a good solution, it requires less escaping, so your patch LGTM.
Simon
On Sunday, August 25 2019, Simon Marchi wrote:
> On 2019-08-25 12:21 p.m., Sergio Durigan Junior wrote:
>> The way unrecognized escape sequences are handled has changed in
>> Python 3.8: users now see a SyntaxWarning message, which will
>> eventually become a SyntaxError in future versions of Python:
>>
>> (gdb) source /blabla/gdb.python/py-xmethods/py-xmethods.py
>> /blabla/gdb.python/py-xmethods/py-xmethods.py:204: SyntaxWarning: invalid escape seque
>> nce \+
>> 'operator\+',
>> /blabla/gdb.python/py-xmethods/py-xmethods.py:211: SyntaxWarning: invalid escape seque
>> nce \+
>> 'operator\+\+',
>>
>> One of our testcases, gdb.python/py-xmethods.exp, contains strings in
>> the form of "operator\+". This is not recognized by Python, but is
>> still needed by the testsuite to work properly. The solution is
>> simple: we just have to make sure these strings are marked as
>> raw (i.e, r""). This is what this patch does. I took the opportunity
>> to also convert other strings to raw, which, in two cases, allowed the
>> removal of an extra backslash.
>>
>> I tested this using Python 3.7 and Python 3.8, and everything works
>> fine.
>>
>> I think I could push this as obvious, but decided to send it to
>> gdb-patches just in case.
>
> Just to understand correctly, could you have also changed
>
> 'operator\+'
>
> to
>
> 'operator\\+'
>
> ?
Yeah, that works as well. I thought it made more sense to use raw
strings because that's what the documentation seems to recommend, and
also what other projects started using.
> In any case, I think using raw strings is a good solution, it requires less escaping, so your patch LGTM.
Thanks, pushed: d9c4ba536c522b8dc2194d4100270a159be7894a
@@ -199,34 +199,34 @@ class G_methods_matcher(XMethodMatcher):
global_dm_list = [
- SimpleXMethodMatcher('A_plus_A',
- '^dop::A$',
- 'operator\+',
+ SimpleXMethodMatcher(r'A_plus_A',
+ r'^dop::A$',
+ r'operator\+',
A_plus_A,
# This is a replacement, hence match the arg type
# exactly!
type_A.const().reference()),
- SimpleXMethodMatcher('plus_plus_A',
- '^dop::A$',
- 'operator\+\+',
+ SimpleXMethodMatcher(r'plus_plus_A',
+ r'^dop::A$',
+ r'operator\+\+',
plus_plus_A),
- SimpleXMethodMatcher('A_geta',
- '^dop::A$',
- '^geta$',
+ SimpleXMethodMatcher(r'A_geta',
+ r'^dop::A$',
+ r'^geta$',
A_geta),
- SimpleXMethodMatcher('A_getarrayind',
- '^dop::A$',
- '^getarrayind$',
+ SimpleXMethodMatcher(r'A_getarrayind',
+ r'^dop::A$',
+ r'^getarrayind$',
A_getarrayind,
type_int),
- SimpleXMethodMatcher('A_indexoper',
- '^dop::A$',
- 'operator\\[\\]',
+ SimpleXMethodMatcher(r'A_indexoper',
+ r'^dop::A$',
+ r'operator\[\]',
A_indexoper,
type_int),
- SimpleXMethodMatcher('B_indexoper',
- '^dop::B$',
- 'operator\\[\\]',
+ SimpleXMethodMatcher(r'B_indexoper',
+ r'^dop::B$',
+ r'operator\[\]',
B_indexoper,
type_int)
]