~jameinel/meliae/proxy

« back to all changes in this revision

Viewing changes to meliae/_loader.pyx

  • Committer: John Arbash Meinel
  • Date: 2009-12-23 17:22:39 UTC
  • Revision ID: john@arbash-meinel.com-20091223172239-54paa072jangsls3
A bit more cleanup.

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
    return val
49
49
 
50
50
 
 
51
cdef _free_ref_list(RefList *ref_list):
 
52
    """Decref and free the list."""
 
53
    cdef long i
 
54
 
 
55
    if ref_list == NULL:
 
56
        return
 
57
    for i from 0 <= i < ref_list.size:
 
58
        Py_DECREF(ref_list.refs[i])
 
59
    PyMem_Free(ref_list)
 
60
 
 
61
 
51
62
cdef object _ref_list_to_list(RefList *ref_list):
52
63
    """Convert the notation of [len, items, ...] into [items].
53
64
 
169
180
            return _ref_list_to_list(self._ref_list)
170
181
 
171
182
        def __set__(self, value):
172
 
            if self._ref_list != NULL:
173
 
                PyMem_Free(self._ref_list)
174
 
                self._ref_list = NULL
 
183
            _free_ref_list(self._ref_list)
175
184
            self._ref_list = _list_to_ref_list(value)
176
185
 
177
186
    property num_refs:
190
199
            return _ref_list_to_list(self._referrer_list)
191
200
 
192
201
        def __set__(self, value):
193
 
            if self._referrer_list != NULL:
194
 
                PyMem_Free(self._referrer_list)
195
 
                self._referrer_list = NULL
 
202
            _free_ref_list(self._referrer_list)
196
203
            self._referrer_list = _list_to_ref_list(value)
197
204
 
198
205
    property num_referrers:
204
211
 
205
212
    def __dealloc__(self):
206
213
        cdef long i
207
 
        if self._ref_list != NULL:
208
 
            for i from 0 <= i < self._ref_list.size:
209
 
                Py_DECREF(self._ref_list.refs[i])
210
 
            PyMem_Free(self._ref_list)
211
 
            self._ref_list = NULL
212
 
        if self._referrer_list != NULL:
213
 
            for i from 0 <= i < self._referrer_list.size:
214
 
                Py_DECREF(self._referrer_list.refs[i])
215
 
            PyMem_Free(self._referrer_list)
216
 
            self._referrer_list = NULL
 
214
        _free_ref_list(self._ref_list)
 
215
        self._ref_list = NULL
 
216
        _free_ref_list(self._referrer_list)
 
217
        self._referrer_list = NULL
217
218
 
218
219
    def __repr__(self):
219
220
        cdef int i, max_refs