|
81 | 81 | minint = -sys.maxsize-1 |
82 | 82 | maxint = sys.maxsize |
83 | 83 | else: |
84 | | - from itertools import izip_longest as zip_longest |
85 | 84 | from StringIO import StringIO |
86 | 85 | minint = -sys.maxint-1 |
87 | 86 | maxint = sys.maxint |
@@ -1148,29 +1147,42 @@ def n_mapexpr(self, node): |
1148 | 1147 | """ |
1149 | 1148 | p = self.prec |
1150 | 1149 | self.prec = 100 |
1151 | | - assert node[-1] == 'kvlist' |
1152 | | - node = node[-1] # goto kvlist |
1153 | 1150 |
|
1154 | 1151 | self.indentMore(INDENT_PER_LEVEL) |
1155 | 1152 | line_seperator = ',\n' + self.indent |
1156 | 1153 | sep = INDENT_PER_LEVEL[:-1] |
1157 | 1154 | self.write('{') |
1158 | | - for kv in node: |
1159 | | - assert kv in ('kv', 'kv2', 'kv3') |
1160 | | - # kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR |
1161 | | - # kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR |
1162 | | - # kv3 ::= expr expr STORE_MAP |
1163 | | - if kv == 'kv': |
1164 | | - name = self.traverse(kv[-2], indent='') |
1165 | | - value = self.traverse(kv[1], indent=self.indent+(len(name)+2)*' ') |
1166 | | - elif kv == 'kv2': |
1167 | | - name = self.traverse(kv[1], indent='') |
1168 | | - value = self.traverse(kv[-3], indent=self.indent+(len(name)+2)*' ') |
1169 | | - elif kv == 'kv3': |
1170 | | - name = self.traverse(kv[-2], indent='') |
1171 | | - value = self.traverse(kv[0], indent=self.indent+(len(name)+2)*' ') |
1172 | | - self.write(sep, name, ': ', value) |
1173 | | - sep = line_seperator |
| 1155 | + |
| 1156 | + if node[0].type.startswith('kvlist'): |
| 1157 | + # Python 3.5 style key/value list in mapexpr |
| 1158 | + l = list(node[0]) |
| 1159 | + i = 0 |
| 1160 | + while i < len(l): |
| 1161 | + name = self.traverse(l[i], indent='') |
| 1162 | + value = self.traverse(l[i+1], indent=self.indent+(len(name)+2)*' ') |
| 1163 | + self.write(sep, name, ': ', value) |
| 1164 | + sep = line_seperator |
| 1165 | + i += 2 |
| 1166 | + else: |
| 1167 | + assert node[-1] == 'kvlist' |
| 1168 | + node = node[-1] # goto kvlist |
| 1169 | + |
| 1170 | + for kv in node: |
| 1171 | + assert kv in ('kv', 'kv2', 'kv3') |
| 1172 | + # kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR |
| 1173 | + # kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR |
| 1174 | + # kv3 ::= expr expr STORE_MAP |
| 1175 | + if kv == 'kv': |
| 1176 | + name = self.traverse(kv[-2], indent='') |
| 1177 | + value = self.traverse(kv[1], indent=self.indent+(len(name)+2)*' ') |
| 1178 | + elif kv == 'kv2': |
| 1179 | + name = self.traverse(kv[1], indent='') |
| 1180 | + value = self.traverse(kv[-3], indent=self.indent+(len(name)+2)*' ') |
| 1181 | + elif kv == 'kv3': |
| 1182 | + name = self.traverse(kv[-2], indent='') |
| 1183 | + value = self.traverse(kv[0], indent=self.indent+(len(name)+2)*' ') |
| 1184 | + self.write(sep, name, ': ', value) |
| 1185 | + sep = line_seperator |
1174 | 1186 | self.write('}') |
1175 | 1187 | self.indentLess(INDENT_PER_LEVEL) |
1176 | 1188 | self.prec = p |
|
0 commit comments