From 477d7defe527debf8ba2da722df881e881e4bd9c Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Tue, 14 Dec 2010 07:28:17 +0100 Subject: [PATCH] comments, code cleanup --- Cython/Compiler/ExprNodes.py | 33 ++++++++++++++++++--------------- Cython/Compiler/Nodes.py | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index e46b9521..ab31ec6c 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -5007,27 +5007,30 @@ class YieldExprNode(ExprNode): code.put_init_to_py_none(Naming.retval_cname, py_object_type) saved = [] code.temp_allocator.reset() - code.putln('/* Save temporary variables */') - for cname, type, manage_ref in code.funcstate.temps_in_use(): - save_cname = code.temp_allocator.allocate_temp(type) - saved.append((cname, save_cname, type)) - if type.is_pyobject: - code.put_xgiveref(cname) - code.putln('%s->%s = %s;' % (Naming.cur_scope_cname, save_cname, cname)) + temps_in_use = code.funcstate.temps_in_use() + if temps_in_use: + code.putln('/* Save temporary variables */') + for cname, type, manage_ref in temps_in_use: + save_cname = code.temp_allocator.allocate_temp(type) + saved.append((cname, save_cname, type)) + if type.is_pyobject: + code.put_xgiveref(cname) + code.putln('%s->%s = %s;' % (Naming.cur_scope_cname, save_cname, cname)) code.put_xgiveref(Naming.retval_cname) code.put_finish_refcount_context() - code.putln("/* return from function, yielding value */") + code.putln("/* return from generator, yielding value */") code.putln("%s->%s.resume_label = %d;" % (Naming.cur_scope_cname, Naming.obj_base_cname, self.label_num)) code.putln("return %s;" % Naming.retval_cname); code.put_label(self.label_name) - code.putln('/* Restore temporary variables */') - for cname, save_cname, type in saved: - code.putln('%s = %s->%s;' % (cname, Naming.cur_scope_cname, save_cname)) - if type.is_pyobject: - code.putln('%s->%s = 0;' % (Naming.cur_scope_cname, save_cname)) - if type.is_pyobject: - code.put_xgotref(cname) + if saved: + code.putln('/* Restore temporary variables */') + for cname, save_cname, type in saved: + code.putln('%s = %s->%s;' % (cname, Naming.cur_scope_cname, save_cname)) + if type.is_pyobject: + code.putln('%s->%s = 0;' % (Naming.cur_scope_cname, save_cname)) + if type.is_pyobject: + code.put_xgotref(cname) if self.result_is_used: self.allocate_temp_result(code) code.putln('%s = %s; %s' % diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index d3443036..3ddfad07 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -1510,7 +1510,7 @@ class FuncDefNode(StatNode, BlockNode): resume_code.putln("case 0: goto %s;" % first_run_label) for yield_expr in self.yields: resume_code.putln("case %d: goto %s;" % (yield_expr.label_num, yield_expr.label_name)); - resume_code.putln("default: /* raise error here */"); + resume_code.putln("default: /* CPython raises the right error here */"); resume_code.putln("return NULL;"); resume_code.putln("}"); # ----- Python version -- 2.26.2