From: Dag Sverre Seljebotn Date: Fri, 25 Jul 2008 10:17:21 +0000 (+0200) Subject: Merge of refcount bugfix X-Git-Tag: 0.9.8.1~49^2~74 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=1b6b0e504e2b04c3f57cefcad2132efbfb2d8d91;p=cython.git Merge of refcount bugfix --- 1b6b0e504e2b04c3f57cefcad2132efbfb2d8d91 diff --cc Cython/Compiler/ExprNodes.py index fef53037,b0c98c66..cf8f0d6b --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@@ -1049,19 -1037,16 +1050,19 @@@ class NameNode(AtomicExprNode) #print "...from", rhs ### #print "...LHS type", self.type, "ctype", self.ctype() ### #print "...RHS type", rhs.type, "ctype", rhs.ctype() ### - rhs.make_owned_reference(code) - if entry.is_local and not Options.init_local_none: - initalized = entry.scope.control_flow.get_state((entry.name, 'initalized'), self.pos) - if initalized is True: + if not self.skip_assignment_decref: + if entry.is_local and not Options.init_local_none: + initalized = entry.scope.control_flow.get_state((entry.name, 'initalized'), self.pos) + if initalized is True: + code.put_decref(self.result_code, self.ctype()) + elif initalized is None: + code.put_xdecref(self.result_code, self.ctype()) + else: code.put_decref(self.result_code, self.ctype()) - elif initalized is None: - code.put_xdecref(self.result_code, self.ctype()) - else: - code.put_decref(self.result_code, self.ctype()) - code.putln('%s = %s;' % (self.result_code, rhs.result_as(self.ctype()))) + if self.type.is_buffer: + self.generate_acquire_buffer(rhs, code) + else: + code.putln('%s = %s;' % (self.result_code, rhs.result_as(self.ctype()))) if debug_disposal_code: print("NameNode.generate_assignment_code:") print("...generating post-assignment code for %s" % rhs)