summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNitish Chandra <nitishchandrachinta@gmail.com>2018-02-26 21:31:20 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2018-02-26 21:31:20 (GMT)
commit3a087beddd9f0955eb9080a6fd1499ff89ca74bf (patch)
treefd2c5b431db0c253e1c81e21b50a66ca81bccbdd
parent6b5df906afe113dbe421d044322254cfd4747c9c (diff)
downloadcpython-3a087beddd9f0955eb9080a6fd1499ff89ca74bf.zip
cpython-3a087beddd9f0955eb9080a6fd1499ff89ca74bf.tar.gz
cpython-3a087beddd9f0955eb9080a6fd1499ff89ca74bf.tar.bz2
bpo-32836: Remove obsolete code from symtable pass (GH-5680)
When comprehensions switched to using a nested scope, the old code for generating a temporary name to hold the accumulation target became redundant, but was never actually removed. Patch by Nitish Chandra.
-rw-r--r--Include/symtable.h1
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2018-02-14-12-35-47.bpo-32836.bThJnx.rst1
-rw-r--r--Python/symtable.c25
3 files changed, 1 insertions, 26 deletions
diff --git a/Include/symtable.h b/Include/symtable.h
index 86ae3c2..007f88d 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -60,7 +60,6 @@ typedef struct _symtable_entry {
int ste_col_offset; /* offset of first line of block */
int ste_opt_lineno; /* lineno of last exec or import * */
int ste_opt_col_offset; /* offset of last exec or import * */
- int ste_tmpname; /* counter for listcomp temp vars */
struct symtable *ste_table;
} PySTEntryObject;
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-02-14-12-35-47.bpo-32836.bThJnx.rst b/Misc/NEWS.d/next/Core and Builtins/2018-02-14-12-35-47.bpo-32836.bThJnx.rst
new file mode 100644
index 0000000..4eeb9aa
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-02-14-12-35-47.bpo-32836.bThJnx.rst
@@ -0,0 +1 @@
+Don't use temporary variables in cases of list/dict/set comprehensions
diff --git a/Python/symtable.c b/Python/symtable.c
index ac14058..3e8c6f5 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -69,7 +69,6 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block,
ste->ste_varkeywords = 0;
ste->ste_opt_lineno = 0;
ste->ste_opt_col_offset = 0;
- ste->ste_tmpname = 0;
ste->ste_lineno = lineno;
ste->ste_col_offset = col_offset;
@@ -1083,24 +1082,6 @@ error:
}
static int
-symtable_new_tmpname(struct symtable *st)
-{
- char tmpname[256];
- identifier tmp;
-
- PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]",
- ++st->st_cur->ste_tmpname);
- tmp = PyUnicode_InternFromString(tmpname);
- if (!tmp)
- return 0;
- if (!symtable_add_def(st, tmp, DEF_LOCAL))
- return 0;
- Py_DECREF(tmp);
- return 1;
-}
-
-
-static int
symtable_record_directive(struct symtable *st, identifier name, stmt_ty s)
{
PyObject *data, *mangled;
@@ -1723,7 +1704,6 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e,
expr_ty elt, expr_ty value)
{
int is_generator = (e->kind == GeneratorExp_kind);
- int needs_tmp = !is_generator;
comprehension_ty outermost = ((comprehension_ty)
asdl_seq_GET(generators, 0));
/* Outermost iterator is evaluated in current scope */
@@ -1742,11 +1722,6 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e,
symtable_exit_block(st, (void *)e);
return 0;
}
- /* Allocate temporary name if needed */
- if (needs_tmp && !symtable_new_tmpname(st)) {
- symtable_exit_block(st, (void *)e);
- return 0;
- }
VISIT(st, expr, outermost->target);
VISIT_SEQ(st, expr, outermost->ifs);
VISIT_SEQ_TAIL(st, comprehension, generators, 1);