Skip to content

Commit 43fe55a

Browse files
committed
Do proper cleanups, increase reference of None, format switch
1 parent 6249514 commit 43fe55a

File tree

2 files changed

+61
-65
lines changed

2 files changed

+61
-65
lines changed

Parser/asdl_c.py

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -691,23 +691,18 @@ def visitModule(self, mod):
691691
static inline PyObject *
692692
find_field_default(PyObject *field_default)
693693
{
694-
PyObject *ret = NULL;
695694
if (PyUnicode_GET_LENGTH(field_default) < 1) {
696-
goto result;
695+
return NULL;
697696
}
698697
switch (PyUnicode_READ_CHAR(field_default, 0)){
699-
case '?':
700-
ret = Py_None;
701-
goto result;
702-
case '*':
703-
ret = PyList_New(0);
704-
goto result;
705-
default:
706-
goto result;
698+
case '?':
699+
Py_INCREF(Py_None);
700+
return Py_None;
701+
case '*':
702+
return PyList_New(0);
703+
default:
704+
return NULL;
707705
}
708-
result:
709-
Py_DECREF(field_default);
710-
return ret;
711706
}
712707
713708
static int
@@ -716,10 +711,10 @@ def visitModule(self, mod):
716711
Py_ssize_t i, numfields = 0;
717712
int res = -1;
718713
PyObject *key, *value, *fields, *field_defaults;
719-
if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), astmodulestate_global->_fields, &fields) < 0) {
714+
if (_PyObject_LookupAttr(Py_TYPE(self), astmodulestate_global->_fields, &fields) < 0) {
720715
goto cleanup;
721716
}
722-
if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), astmodulestate_global->_field_defaults, &field_defaults) < 0) {
717+
if (_PyObject_LookupAttr(Py_TYPE(self), astmodulestate_global->_field_defaults, &field_defaults) < 0) {
723718
goto cleanup;
724719
}
725720
if (fields) {
@@ -757,7 +752,7 @@ def visitModule(self, mod):
757752
goto cleanup;
758753
}
759754
}
760-
PyObject *field, *field_default;
755+
PyObject *field, *raw_field_default, *field_default;
761756
for (i = 0; i < numfields; i++) {
762757
field = PySequence_GetItem(fields, i);
763758
if (!field) {
@@ -767,16 +762,18 @@ def visitModule(self, mod):
767762
int attr_present = PyObject_HasAttr(self, field);
768763
Py_DECREF(field);
769764
if (!attr_present) {
770-
field_default = PySequence_GetItem(field_defaults, i);
771-
if (!field_default) {
765+
raw_field_default = PySequence_GetItem(field_defaults, i);
766+
if (!raw_field_default) {
772767
res = -1;
773768
goto cleanup;
774769
}
775-
if (!(field_default = find_field_default(field_default))) {
770+
field_default = find_field_default(raw_field_default);
771+
Py_DECREF(raw_field_default);
772+
if (!field_default) {
776773
continue;
777774
}
778775
res = PyObject_SetAttr(self, field, field_default);
779-
Py_XDECREF(field_default);
776+
Py_DECREF(field_default);
780777
if (res < 0) {
781778
goto cleanup;
782779
}
@@ -847,29 +844,31 @@ def visitModule(self, mod):
847844
PyObject* base,
848845
const char* const* fields,
849846
const char* const* field_defaults,
850-
int num_fields,
847+
Py_ssize_t num_fields,
851848
const char *doc
852849
)
853850
{
854-
PyObject *fnames, *fdefaults, *result;
855-
int i;
851+
Py_ssize_t i;
852+
PyObject *fnames, *fdefaults;
853+
PyObject *result = NULL;
854+
856855
fnames = PyTuple_New(num_fields);
857856
if (!fnames) {
858-
return NULL;
857+
goto exit;
859858
}
860859
fdefaults = PyTuple_New(num_fields);
861860
if (!fdefaults) {
862-
return NULL;
861+
goto exit;
863862
}
864863
for (i = 0; i < num_fields; i++) {
865864
PyObject *field = PyUnicode_InternFromString(fields[i]);
866865
if (!field) {
867-
goto cleanup;
866+
goto exit;
868867
}
869868
PyTuple_SET_ITEM(fnames, i, field);
870869
PyObject *field_default = PyUnicode_InternFromString(field_defaults[i]);
871870
if (!field_default) {
872-
goto cleanup;
871+
goto exit;
873872
}
874873
PyTuple_SET_ITEM(fdefaults, i, field_default);
875874
}
@@ -881,12 +880,11 @@ def visitModule(self, mod):
881880
astmodulestate_global->__module__,
882881
astmodulestate_global->_ast,
883882
astmodulestate_global->__doc__, doc);
884-
Py_DECREF(fnames);
883+
goto exit;
884+
exit:
885+
Py_XDECREF(fnames);
886+
Py_XDECREF(fdefaults);
885887
return result;
886-
cleanup:
887-
Py_DECREF(fnames);
888-
Py_DECREF(fdefaults);
889-
return NULL;
890888
}
891889
892890
static int

Python/Python-ast.c

Lines changed: 31 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)