- if (!arg)
- goto fail;
- if (PyObject_SetAttrString (result, "name", arg) < 0)
- goto failarg;
- Py_DECREF (arg);
-
- arg = TYPE_FIELD_ARTIFICIAL (type, field) ? Py_True : Py_False;
- Py_INCREF (arg);
- if (PyObject_SetAttrString (result, "artificial", arg) < 0)
- goto failarg;
- Py_DECREF (arg);
-
- if (TYPE_CODE (type) == TYPE_CODE_CLASS)
- arg = field < TYPE_N_BASECLASSES (type) ? Py_True : Py_False;
+ if (arg == NULL)
+ arg = gdbpy_ref<>::new_reference (Py_None);
+
+ if (PyObject_SetAttrString (result.get (), "name", arg.get ()) < 0)
+ return NULL;
+
+ arg = gdbpy_ref<>::new_reference (TYPE_FIELD_ARTIFICIAL (type, field)
+ ? Py_True : Py_False);
+ if (PyObject_SetAttrString (result.get (), "artificial", arg.get ()) < 0)
+ return NULL;
+
+ if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+ arg = gdbpy_ref<>::new_reference (field < TYPE_N_BASECLASSES (type)
+ ? Py_True : Py_False);