Issue #2333: Backport set and dict comprehensions syntax.
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index f50fb22..3f35bbb 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -186,10 +186,10 @@
enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
IfExp_kind=5, Dict_kind=6, Set_kind=7, ListComp_kind=8,
- GeneratorExp_kind=9, Yield_kind=10, Compare_kind=11,
- Call_kind=12, Repr_kind=13, Num_kind=14, Str_kind=15,
- Attribute_kind=16, Subscript_kind=17, Name_kind=18,
- List_kind=19, Tuple_kind=20};
+ SetComp_kind=9, DictComp_kind=10, GeneratorExp_kind=11,
+ Yield_kind=12, Compare_kind=13, Call_kind=14, Repr_kind=15,
+ Num_kind=16, Str_kind=17, Attribute_kind=18,
+ Subscript_kind=19, Name_kind=20, List_kind=21, Tuple_kind=22};
struct _expr {
enum _expr_kind kind;
union {
@@ -237,6 +237,17 @@
struct {
expr_ty elt;
asdl_seq *generators;
+ } SetComp;
+
+ struct {
+ expr_ty key;
+ expr_ty value;
+ asdl_seq *generators;
+ } DictComp;
+
+ struct {
+ expr_ty elt;
+ asdl_seq *generators;
} GeneratorExp;
struct {
@@ -458,6 +469,12 @@
#define ListComp(a0, a1, a2, a3, a4) _Py_ListComp(a0, a1, a2, a3, a4)
expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int
col_offset, PyArena *arena);
+#define SetComp(a0, a1, a2, a3, a4) _Py_SetComp(a0, a1, a2, a3, a4)
+expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int
+ col_offset, PyArena *arena);
+#define DictComp(a0, a1, a2, a3, a4, a5) _Py_DictComp(a0, a1, a2, a3, a4, a5)
+expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int
+ lineno, int col_offset, PyArena *arena);
#define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4)
expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int
col_offset, PyArena *arena);
diff --git a/Include/graminit.h b/Include/graminit.h
index fdc6481..ce597d9 100644
--- a/Include/graminit.h
+++ b/Include/graminit.h
@@ -64,7 +64,7 @@
#define power 317
#define atom 318
#define listmaker 319
-#define testlist_gexp 320
+#define testlist_comp 320
#define lambdef 321
#define trailer 322
#define subscriptlist 323
@@ -80,9 +80,9 @@
#define list_iter 333
#define list_for 334
#define list_if 335
-#define gen_iter 336
-#define gen_for 337
-#define gen_if 338
+#define comp_iter 336
+#define comp_for 337
+#define comp_if 338
#define testlist1 339
#define encoding_decl 340
#define yield_expr 341
diff --git a/Include/opcode.h b/Include/opcode.h
index 3824f7f..9764109 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -147,6 +147,9 @@
/* Support for opargs more than 16 bits long */
#define EXTENDED_ARG 145
+#define SET_ADD 146
+#define MAP_ADD 147
+
enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, PyCmp_GT=Py_GT, PyCmp_GE=Py_GE,
PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
diff --git a/Include/symtable.h b/Include/symtable.h
index a5f7652..081fd3b 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -42,6 +42,7 @@
an argument */
int ste_lineno; /* first line of block */
int ste_opt_lineno; /* lineno of last exec or import * */
+ int ste_tmpname; /* counter for listcomp temp vars */
struct symtable *ste_table;
} PySTEntryObject;