[pypy-svn] r6029 - pypy/branch/pypy-genc/translator
arigo at codespeak.net
arigo at codespeak.net
Wed Aug 18 11:01:39 CEST 2004
Author: arigo
Date: Wed Aug 18 11:01:38 2004
New Revision: 6029
Modified:
pypy/branch/pypy-genc/translator/genc.h
pypy/branch/pypy-genc/translator/genc.py
Log:
Fix refcounting bugs.
Modified: pypy/branch/pypy-genc/translator/genc.h
==============================================================================
--- pypy/branch/pypy-genc/translator/genc.h (original)
+++ pypy/branch/pypy-genc/translator/genc.h Wed Aug 18 11:01:38 2004
@@ -4,7 +4,8 @@
#include <Python.h>
-#define FREE(x) Py_DECREF(x);
+#define INCREF(x) Py_INCREF(x);
+#define DECREF(x) Py_DECREF(x);
#define CASE(x,y) if (PyObject_RichCompareBool(x,y,Py_EQ))
#define ELSE(x,y) assert(PyObject_RichCompareBool(x,y,Py_EQ));
Modified: pypy/branch/pypy-genc/translator/genc.py
==============================================================================
--- pypy/branch/pypy-genc/translator/genc.py (original)
+++ pypy/branch/pypy-genc/translator/genc.py Wed Aug 18 11:01:38 2004
@@ -105,7 +105,7 @@
args = graph.getargs()
_eval = self.var_or_const_name
returntypename = 'PyObject*'
- l = ['PyObject* %s' % _eval(a) for a in args]
+ l = ['PyObject* %s' % a for a in args]
return '%s %s(%s)' % (returntypename,
self.funcname[func],
', '.join(l))
@@ -197,18 +197,15 @@
sourceargs = exit.args
targetargs = exit.target.inputargs
assert len(sourceargs) == len(targetargs)
- # get rid of assignments of UndefinedConstant
- sargs, targs = [], []
- for s,t in zip(sourceargs, targetargs):
- if not isinstance(s, UndefinedConstant):
- sargs.append(s)
- targs.append(t)
for n in range(len(to_release)-1, -1, -1):
var = to_release[n]
- if var not in sargs:
- print >> f, '%sFREE(%s)' % (indent, var)
- for s,t in zip(sargs, targs):
- print >> f, '%s%s = %s;' % (indent, t, _eval(s))
+ if var not in sourceargs:
+ print >> f, '%sDECREF(%s)' % (indent, var)
+ for s,t in zip(sourceargs, targetargs):
+ sname = _eval(s)
+ if isinstance(s, Constant):
+ print >> f, '%sINCREF(%s)' % (indent, sname)
+ print >> f, '%s%s = %s;' % (indent, t, sname)
print >> f, '%sgoto %s;' % (indent,
blockname[exit.target])
if close:
@@ -222,7 +219,7 @@
reachable = False
for n in range(len(to_release)-1, -1, -1):
if reachable:
- print >> f, '\tFREE(%s)' % to_release[n]
+ print >> f, '\tDECREF(%s)' % to_release[n]
if n in errlabels:
print >> f, ' %s:' % errlabels[n]
reachable = True
More information about the Pypy-commit
mailing list