[KoCo-CVS] [Commit] KoreanCodecs/src hangul.c
Brought to you by:
perky
From: Chang <pe...@us...> - 2002-04-28 19:39:33
|
perky 02/04/27 13:59:21 Modified: src hangul.c Log: - Fix garbage collection errors Revision Changes Path 1.8 +16 -7 KoreanCodecs/src/hangul.c Index: hangul.c =================================================================== RCS file: /cvsroot/koco/KoreanCodecs/src/hangul.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- hangul.c 26 Apr 2002 08:21:54 -0000 1.7 +++ hangul.c 27 Apr 2002 20:59:21 -0000 1.8 @@ -4,14 +4,14 @@ * KoreanCodecs Hangul Module C Implementation * * Author : Hye-Shik Chang <pe...@fa...> - * Date : $Date: 2002/04/26 08:21:54 $ + * Date : $Date: 2002/04/27 20:59:21 $ * Created : 25 April 2002 * - * $Revision: 1.7 $ + * $Revision: 1.8 $ */ static char *version = -"$Id: hangul.c,v 1.7 2002/04/26 08:21:54 perky Exp $"; +"$Id: hangul.c,v 1.8 2002/04/27 20:59:21 perky Exp $"; #include "Python.h" @@ -611,10 +611,11 @@ UniNull = PyUnicode_FromUnicode(NULL, 0); tuni[0] = 0x3000; /* Unicode Double-wide Space */ UniSpace = PyUnicode_FromUnicode(tuni, 1); - Py_INCREF(UniSpace); /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); + PyDict_SetItemString(d, "Space", UniSpace); + /*Py_DECREF(UniSpace); never die */ SET_INTCONSTANT(d, NCHOSUNG); SET_INTCONSTANT(d, NJUNGSUNG); SET_INTCONSTANT(d, NJONGSUNG); @@ -677,30 +678,34 @@ tuni[0] = jamo->code; unijamo = PyUnicode_FromUnicode(tuni, 1); PyDict_SetItemString(d, jamo->name, unijamo); - Py_INCREF(unijamo); /* PuTyple_SET_ITEM steals reference */ if (isJaeum(jamo->code)) { PyTuple_SET_ITEM(JaeumCodes, cur_jaeum++, unijamo); + Py_INCREF(unijamo); if (isChosung(jamo->code)) { jamo->orders[0] = cur_cho; jamo_chosung[cur_cho] = jamo; PyList_SET_ITEM(Chosung, cur_cho++, unijamo); + Py_INCREF(unijamo); PyDict_SetItemString(JaeumDict, jamo->name, unijamo); } if (isJongsung(jamo->code)) { jamo->orders[2] = cur_jong; jamo_jongsung[cur_jong] = jamo; PyList_SET_ITEM(Jongsung, cur_jong++, unijamo); + Py_INCREF(unijamo); PyDict_SetItemString(JaeumDict, jamo->name, unijamo); } multicls = JaeumMulti; } else { /* Moeum */ PyTuple_SET_ITEM(MoeumCodes, cur_moeum++, unijamo); + Py_INCREF(unijamo); if (isJungsung(jamo->code)) { jamo->orders[1] = cur_jung; jamo_jungsung[cur_jung] = jamo; PyList_SET_ITEM(Jungsung, cur_jung++, unijamo); + Py_INCREF(unijamo); PyDict_SetItemString(MoeumDict, jamo->name, unijamo); } multicls = MoeumMulti; @@ -715,10 +720,13 @@ PyDict_SetItem(multicls, unijamo, tmp); Py_DECREF(tmp); } + Py_DECREF(unijamo); } - Py_DECREF(JaeumDict); - Py_DECREF(MoeumDict); + Py_DECREF(Chosung); Py_DECREF(Jungsung); Py_DECREF(Jongsung); + Py_DECREF(JaeumDict); Py_DECREF(MoeumDict); + Py_DECREF(JaeumCodes); Py_DECREF(MoeumCodes); + Py_DECREF(JaeumMulti); Py_DECREF(MoeumMulti); } tmp = PyTuple_New(2); @@ -745,6 +753,7 @@ ErrorObject = PyErr_NewException("hangul.UnicodeHangulError", NULL, NULL); PyDict_SetItemString(d, "UnicodeHangulError", ErrorObject); + Py_DECREF(ErrorObject); /* Check for errors */ if (PyErr_Occurred()) |