From 0cbd805a10b91f803bccbb5a54f8e54c2e40e9e8 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Fri, 4 Aug 2006 05:09:28 +0000 Subject: Bug #1333982: string/number constants were inappropriately stored in the byte code and co_consts even if they were not used, ie immediately popped off the stack. --- Lib/test/test_code.py | 17 +++++++++++++++++ Misc/NEWS | 4 ++++ Python/compile.c | 6 ++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 52bc894..4e68638 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -61,6 +61,23 @@ nlocals: 1 flags: 67 consts: ('None',) +>>> def optimize_away(): +... 'doc string' +... 'not a docstring' +... 53 +... 53L + +>>> dump(optimize_away.func_code) +name: optimize_away +argcount: 0 +names: () +varnames: () +cellvars: () +freevars: () +nlocals: 0 +flags: 67 +consts: ("'doc string'", 'None') + """ def consts(t): diff --git a/Misc/NEWS b/Misc/NEWS index 6a31535..c4904da 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -17,6 +17,10 @@ Core and builtins magic number. This means that .pyc files generated before 2.5c1 will be regenerated. +- Bug #1333982: string/number constants were inappropriately stored + in the byte code and co_consts even if they were not used, ie + immediately popped off the stack. + Library ------- diff --git a/Python/compile.c b/Python/compile.c index 755531e..6a9e8c9 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -2745,11 +2745,13 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) case Global_kind: break; case Expr_kind: - VISIT(c, expr, s->v.Expr.value); if (c->c_interactive && c->c_nestlevel <= 1) { + VISIT(c, expr, s->v.Expr.value); ADDOP(c, PRINT_EXPR); } - else { + else if (s->v.Expr.value->kind != Str_kind && + s->v.Expr.value->kind != Num_kind) { + VISIT(c, expr, s->v.Expr.value); ADDOP(c, POP_TOP); } break; -- cgit v0.12