Re: [Mesa-dev] [PATCH] r600/egd_tables.py: added support for python 3
Quoting Emil Velikov (2018-02-27 03:56:30) > On 23 February 2018 at 15:03, Stefan Dirschwrote: > > Patch by "Tomas Chvatal" with modifications > > by "Michal Srb" to not break python 2. > > https://bugzilla.suse.com/show_bug.cgi?id=1082303 > > > > Signed-off-by: Stefan Dirsch > > --- > > src/gallium/drivers/r600/egd_tables.py | 52 > > +- > > 1 file changed, 26 insertions(+), 26 deletions(-) > > > > diff --git a/src/gallium/drivers/r600/egd_tables.py > > b/src/gallium/drivers/r600/egd_tables.py > > index d7b78c7fb1..b3b8b50292 100644 > > --- a/src/gallium/drivers/r600/egd_tables.py > > +++ b/src/gallium/drivers/r600/egd_tables.py > > @@ -60,7 +60,7 @@ class StringTable: > > """ > > fragments = [ > > '"%s\\0" /* %s */' % ( > > -te[0].encode('string_escape'), > > +te[0].encode('unicode_escape'), > > ', '.join(str(idx) for idx in te[2]) This is relying on bad behavior, in python2 this is going to be bytes, but in python3 it will be a unicode string, and you can't encode a unicode, only decode it. There are two choices, either change the parse file to open in bytes mode, or change it to open in text mode (use io.open for that) and convert the file to assume unicode strings instead of bytestrings. > > ) > > for te in self.table > > @@ -217,10 +217,10 @@ def write_tables(regs, packets): > > strings = StringTable() > > strings_offsets = IntTable("int") > > > > -print '/* This file is autogenerated by egd_tables.py from > > evergreend.h. Do not edit directly. */' > > -print > > -print CopyRight.strip() > > -print ''' > > +print('/* This file is autogenerated by egd_tables.py from > > evergreend.h. Do not edit directly. */') This is not sufficient, in python 2.x this is now a print statement with grouping parens, but in python3 this is a print function. They have different behavior. To address this we should add `from __future__ import print_function` as the first import of the file, so that the semantics are closer (more recent versions of python 3 have additional optional parameters for print(), but that's a different problem.) > > +print('') > > +print(CopyRight.strip()) > > +print(''' > > #ifndef EG_TABLES_H > > #define EG_TABLES_H > > > > @@ -242,20 +242,20 @@ struct eg_packet3 { > > unsigned name_offset; > > unsigned op; > > }; > > -''' > > +''') > > > > -print 'static const struct eg_packet3 packet3_table[] = {' > > +print('static const struct eg_packet3 packet3_table[] = {') > > for pkt in packets: > > -print '\t{%s, %s},' % (strings.add(pkt[5:]), pkt) > > -print '};' > > -print > > +print('\t{%s, %s},' % (strings.add(pkt[5:]), pkt)) > > +print('};') > > +print('') > > > > -print 'static const struct eg_field egd_fields_table[] = {' > > +print('static const struct eg_field egd_fields_table[] = {') > > > > fields_idx = 0 > > for reg in regs: > > if len(reg.fields) and reg.own_fields: > > -print '\t/* %s */' % (fields_idx) > > +print('\t/* %s */' % (fields_idx)) > > > > reg.fields_idx = fields_idx > > > > @@ -266,34 +266,34 @@ struct eg_packet3 { > > while value[1] >= len(values_offsets): > > values_offsets.append(-1) > > values_offsets[value[1]] = > > strings.add(strip_prefix(value[0])) > > -print '\t{%s, %s(~0u), %s, %s},' % ( > > +print('\t{%s, %s(~0u), %s, %s},' % ( > > strings.add(field.name), field.s_name, > > -len(values_offsets), > > strings_offsets.add(values_offsets)) > > +len(values_offsets), > > strings_offsets.add(values_offsets))) > > else: > > -print '\t{%s, %s(~0u)},' % (strings.add(field.name), > > field.s_name) > > +print('\t{%s, %s(~0u)},' % (strings.add(field.name), > > field.s_name)) > > fields_idx += 1 > > > > -print '};' > > -print > > +print('};') > > +print('') > > > > -print 'static const struct eg_reg egd_reg_table[] = {' > > +print('static const struct eg_reg egd_reg_table[] = {') > > for reg in regs: > > if len(reg.fields): > > -print '\t{%s, %s, %s, %s},' % (strings.add(reg.name), > > reg.r_name, > > -len(reg.fields), reg.fields_idx if reg.own_fields else > > reg.fields_owner.fields_idx) > > +print('\t{%s, %s, %s, %s},' % (strings.add(reg.name), > > reg.r_name, > > +len(reg.fields), reg.fields_idx if reg.own_fields else > > reg.fields_owner.fields_idx)) > > else: > > -print '\t{%s, %s},' %
Re: [Mesa-dev] [PATCH] r600/egd_tables.py: added support for python 3
On 23 February 2018 at 15:03, Stefan Dirschwrote: > Patch by "Tomas Chvatal" with modifications > by "Michal Srb" to not break python 2. > https://bugzilla.suse.com/show_bug.cgi?id=1082303 > > Signed-off-by: Stefan Dirsch > --- > src/gallium/drivers/r600/egd_tables.py | 52 > +- > 1 file changed, 26 insertions(+), 26 deletions(-) > > diff --git a/src/gallium/drivers/r600/egd_tables.py > b/src/gallium/drivers/r600/egd_tables.py > index d7b78c7fb1..b3b8b50292 100644 > --- a/src/gallium/drivers/r600/egd_tables.py > +++ b/src/gallium/drivers/r600/egd_tables.py > @@ -60,7 +60,7 @@ class StringTable: > """ > fragments = [ > '"%s\\0" /* %s */' % ( > -te[0].encode('string_escape'), > +te[0].encode('unicode_escape'), > ', '.join(str(idx) for idx in te[2]) > ) > for te in self.table > @@ -217,10 +217,10 @@ def write_tables(regs, packets): > strings = StringTable() > strings_offsets = IntTable("int") > > -print '/* This file is autogenerated by egd_tables.py from evergreend.h. > Do not edit directly. */' > -print > -print CopyRight.strip() > -print ''' > +print('/* This file is autogenerated by egd_tables.py from evergreend.h. > Do not edit directly. */') > +print('') > +print(CopyRight.strip()) > +print(''' > #ifndef EG_TABLES_H > #define EG_TABLES_H > > @@ -242,20 +242,20 @@ struct eg_packet3 { > unsigned name_offset; > unsigned op; > }; > -''' > +''') > > -print 'static const struct eg_packet3 packet3_table[] = {' > +print('static const struct eg_packet3 packet3_table[] = {') > for pkt in packets: > -print '\t{%s, %s},' % (strings.add(pkt[5:]), pkt) > -print '};' > -print > +print('\t{%s, %s},' % (strings.add(pkt[5:]), pkt)) > +print('};') > +print('') > > -print 'static const struct eg_field egd_fields_table[] = {' > +print('static const struct eg_field egd_fields_table[] = {') > > fields_idx = 0 > for reg in regs: > if len(reg.fields) and reg.own_fields: > -print '\t/* %s */' % (fields_idx) > +print('\t/* %s */' % (fields_idx)) > > reg.fields_idx = fields_idx > > @@ -266,34 +266,34 @@ struct eg_packet3 { > while value[1] >= len(values_offsets): > values_offsets.append(-1) > values_offsets[value[1]] = > strings.add(strip_prefix(value[0])) > -print '\t{%s, %s(~0u), %s, %s},' % ( > +print('\t{%s, %s(~0u), %s, %s},' % ( > strings.add(field.name), field.s_name, > -len(values_offsets), > strings_offsets.add(values_offsets)) > +len(values_offsets), > strings_offsets.add(values_offsets))) > else: > -print '\t{%s, %s(~0u)},' % (strings.add(field.name), > field.s_name) > +print('\t{%s, %s(~0u)},' % (strings.add(field.name), > field.s_name)) > fields_idx += 1 > > -print '};' > -print > +print('};') > +print('') > > -print 'static const struct eg_reg egd_reg_table[] = {' > +print('static const struct eg_reg egd_reg_table[] = {') > for reg in regs: > if len(reg.fields): > -print '\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name, > -len(reg.fields), reg.fields_idx if reg.own_fields else > reg.fields_owner.fields_idx) > +print('\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name, > +len(reg.fields), reg.fields_idx if reg.own_fields else > reg.fields_owner.fields_idx)) > else: > -print '\t{%s, %s},' % (strings.add(reg.name), reg.r_name) > -print '};' > -print > +print('\t{%s, %s},' % (strings.add(reg.name), reg.r_name)) > +print('};') > +print('') > > strings.emit(sys.stdout, "egd_strings") > > -print > +print('') > > strings_offsets.emit(sys.stdout, "egd_strings_offsets") > > -print > -print '#endif' > +print('') > +print('#endif') > > > def main(): > -- Dylan, being our python expert can you please take a look at this patch? It looks great on my end, modulo some minor tweaks in the commit message. Say: "make the script python 2+3 compatible" Thanks Emil ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] r600/egd_tables.py: added support for python 3
Patch by "Tomas Chvatal"with modifications by "Michal Srb" to not break python 2. https://bugzilla.suse.com/show_bug.cgi?id=1082303 Signed-off-by: Stefan Dirsch --- src/gallium/drivers/r600/egd_tables.py | 52 +- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/gallium/drivers/r600/egd_tables.py b/src/gallium/drivers/r600/egd_tables.py index d7b78c7fb1..b3b8b50292 100644 --- a/src/gallium/drivers/r600/egd_tables.py +++ b/src/gallium/drivers/r600/egd_tables.py @@ -60,7 +60,7 @@ class StringTable: """ fragments = [ '"%s\\0" /* %s */' % ( -te[0].encode('string_escape'), +te[0].encode('unicode_escape'), ', '.join(str(idx) for idx in te[2]) ) for te in self.table @@ -217,10 +217,10 @@ def write_tables(regs, packets): strings = StringTable() strings_offsets = IntTable("int") -print '/* This file is autogenerated by egd_tables.py from evergreend.h. Do not edit directly. */' -print -print CopyRight.strip() -print ''' +print('/* This file is autogenerated by egd_tables.py from evergreend.h. Do not edit directly. */') +print('') +print(CopyRight.strip()) +print(''' #ifndef EG_TABLES_H #define EG_TABLES_H @@ -242,20 +242,20 @@ struct eg_packet3 { unsigned name_offset; unsigned op; }; -''' +''') -print 'static const struct eg_packet3 packet3_table[] = {' +print('static const struct eg_packet3 packet3_table[] = {') for pkt in packets: -print '\t{%s, %s},' % (strings.add(pkt[5:]), pkt) -print '};' -print +print('\t{%s, %s},' % (strings.add(pkt[5:]), pkt)) +print('};') +print('') -print 'static const struct eg_field egd_fields_table[] = {' +print('static const struct eg_field egd_fields_table[] = {') fields_idx = 0 for reg in regs: if len(reg.fields) and reg.own_fields: -print '\t/* %s */' % (fields_idx) +print('\t/* %s */' % (fields_idx)) reg.fields_idx = fields_idx @@ -266,34 +266,34 @@ struct eg_packet3 { while value[1] >= len(values_offsets): values_offsets.append(-1) values_offsets[value[1]] = strings.add(strip_prefix(value[0])) -print '\t{%s, %s(~0u), %s, %s},' % ( +print('\t{%s, %s(~0u), %s, %s},' % ( strings.add(field.name), field.s_name, -len(values_offsets), strings_offsets.add(values_offsets)) +len(values_offsets), strings_offsets.add(values_offsets))) else: -print '\t{%s, %s(~0u)},' % (strings.add(field.name), field.s_name) +print('\t{%s, %s(~0u)},' % (strings.add(field.name), field.s_name)) fields_idx += 1 -print '};' -print +print('};') +print('') -print 'static const struct eg_reg egd_reg_table[] = {' +print('static const struct eg_reg egd_reg_table[] = {') for reg in regs: if len(reg.fields): -print '\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name, -len(reg.fields), reg.fields_idx if reg.own_fields else reg.fields_owner.fields_idx) +print('\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name, +len(reg.fields), reg.fields_idx if reg.own_fields else reg.fields_owner.fields_idx)) else: -print '\t{%s, %s},' % (strings.add(reg.name), reg.r_name) -print '};' -print +print('\t{%s, %s},' % (strings.add(reg.name), reg.r_name)) +print('};') +print('') strings.emit(sys.stdout, "egd_strings") -print +print('') strings_offsets.emit(sys.stdout, "egd_strings_offsets") -print -print '#endif' +print('') +print('#endif') def main(): -- 2.13.6 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev