GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • [ date ]
  • [ thread ]
  • [ subject ]
  • [ author ]

This view

  • Original page
  • New address

GeezerVison is showing mail.python.org — [Python-Dev] Py_SETREF/Py_XSETREF (was: Why is type_modified() in typeobject.c not a public function?)

[Python-Dev] Py_SETREF/Py_XSETREF (was: Why is type_modified() in typeobject.c not a public function?)

Stefan Behnel stefan_ml at behnel.de
Thu May 29 11:55:38 CEST 2008

  • Previous message: [Python-Dev] Why is type_modified() in typeobject.c not a public function?
  • Next message: [Python-Dev] Iterable String Redux (aka String ABC)
  • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

Antoine Pitrou wrote:
> Stefan Behnel <stefan_ml <at> behnel.de> writes:
>> BTW, I noticed that the code in typeobject.c uses "DECREF before set" two
>> times, like this:
>>
>> 		method_cache[h].version = type->tp_version_tag;
>> 		method_cache[h].value = res;  /* borrowed */
>> 		Py_INCREF(name);
>> 		Py_DECREF(method_cache[h].name);
>> 		method_cache[h].name = name;
> 
> Since this is so common, would it be useful to define a macro for the correct
> construct?
> 
> Something like
> 
> #define Py_SETREF(var, obj) \
>     { PyObject *tmp = (var); Py_INCREF(obj); \
>       (var) = (obj); Py_XDECREF(tmp); }
> 
> Or, if we want to allow more optimizations, make two versions of it:
> 
> #define Py_SETREF(var, obj) \
>     { PyObject *tmp = (var); Py_INCREF(obj); \
>       (var) = (obj); Py_DECREF(tmp); }
> 
> #define Py_XSETREF(var, obj) \
>     { PyObject *tmp = (var); Py_INCREF(obj); \
>       (var) = (obj); Py_XDECREF(tmp); }

Both sound like a good idea to me. Having to think about whether or not DECREF
poses a problem in a specific case is just cumbersome.

Stefan


  • Previous message: [Python-Dev] Why is type_modified() in typeobject.c not a public function?
  • Next message: [Python-Dev] Iterable String Redux (aka String ABC)
  • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

More information about the Python-Dev mailing list
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.