Skip to content

Commit c07c8e2

Browse files
committed
FastDSS: set the attributes to None for functions that are not implemented.
1 parent 652817d commit c07c8e2

1 file changed

Lines changed: 72 additions & 63 deletions

File tree

src/_fastdss.c

Lines changed: 72 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,6 @@ static int AltDSS_PyContext_init(AltDSS_PyContextObject *self, PyObject *args, P
948948
PyObject* setObj = NULL;
949949
PyObject* fakeLib = NULL;
950950
FastDSSFuncInfo* finfo = NULL;
951-
void** tmpFunc = NULL;
952951

953952
if (sizeof(unsigned long long) < sizeof(void*))
954953
{
@@ -984,8 +983,7 @@ static int AltDSS_PyContext_init(AltDSS_PyContextObject *self, PyObject *args, P
984983
while (finfo->c_funcOffset)
985984
{
986985
// printf("INFO: function %s\n", finfo->fname);
987-
tmpFunc = *(void**)(((char*) self->dssCFuncs) + finfo->c_funcOffset);
988-
if (tmpFunc != NULL && !AltDSS_Add_PyFunc(self, finfo, setObj, fakeLib))
986+
if (!AltDSS_Add_PyFunc(self, finfo, setObj, fakeLib))
989987
{
990988
goto ERROR_INIT;
991989
}
@@ -1256,74 +1254,85 @@ int AltDSS_Add_PyFunc(AltDSS_PyContextObject *self, FastDSSFuncInfo* finfo, PyOb
12561254
{
12571255
PyObject **py_func = (PyObject**)(((char*)self) + finfo->attrOffset);
12581256
PyObject *key = NULL;
1257+
void** tmpFunc = *(void**)(((char*) self->dssCFuncs) + finfo->c_funcOffset);
12591258

1260-
if (finfo->resType == fastdss_types_void)
1259+
if (tmpFunc != NULL)
12611260
{
1262-
switch (finfo->argType)
1261+
if (finfo->resType == fastdss_types_void)
12631262
{
1264-
case fastdss_types_i32_i32:
1265-
case fastdss_types_f64:
1266-
case fastdss_types_i32:
1267-
case fastdss_types_b16:
1268-
case fastdss_types_str:
1269-
case fastdss_types_void:
1270-
*py_func = (PyObject*) PyObject_New(AltDSS_PyScalarSetterObject, &AltDSS_PyScalarSetterType);
1271-
if ((*py_func) == NULL)
1272-
{
1263+
switch (finfo->argType)
1264+
{
1265+
case fastdss_types_i32_i32:
1266+
case fastdss_types_f64:
1267+
case fastdss_types_i32:
1268+
case fastdss_types_b16:
1269+
case fastdss_types_str:
1270+
case fastdss_types_void:
1271+
*py_func = (PyObject*) PyObject_New(AltDSS_PyScalarSetterObject, &AltDSS_PyScalarSetterType);
1272+
if ((*py_func) == NULL)
1273+
{
1274+
goto ADD_FUNC_ERROR;
1275+
}
1276+
AltDSS_PyScalarSetter_cinit((AltDSS_PyScalarSetterObject*) *py_func, self, finfo);
1277+
break;
1278+
default:
12731279
goto ADD_FUNC_ERROR;
1274-
}
1275-
AltDSS_PyScalarSetter_cinit((AltDSS_PyScalarSetterObject*) *py_func, self, finfo);
1276-
break;
1277-
default:
1278-
goto ADD_FUNC_ERROR;
1279-
}
1280-
}
1281-
else
1282-
{
1283-
switch (finfo->resType)
1280+
}
1281+
}
1282+
else
12841283
{
1285-
case fastdss_types_strs:
1286-
*py_func = (PyObject*) PyObject_New(AltDSS_PyStrListGetterObject, &AltDSS_PyStrListGetterType);
1287-
if ((*py_func) == NULL)
1288-
{
1289-
goto ADD_FUNC_ERROR;
1290-
}
1291-
AltDSS_PyStrListGetter_cinit((AltDSS_PyStrListGetterObject*) *py_func, self, finfo);
1292-
break;
1293-
case fastdss_types_str:
1294-
*py_func = (PyObject*) PyObject_New(AltDSS_PyStrGetterObject, &AltDSS_PyStrGetterType);
1295-
if ((*py_func) == NULL)
1296-
{
1297-
goto ADD_FUNC_ERROR;
1298-
}
1299-
AltDSS_PyStrGetter_cinit((AltDSS_PyStrGetterObject*) *py_func, self, finfo);
1300-
break;
1301-
case fastdss_types_f64:
1302-
case fastdss_types_i32:
1303-
case fastdss_types_b16:
1304-
*py_func = (PyObject*) PyObject_New(AltDSS_PyScalarGetterObject, &AltDSS_PyScalarGetterType);
1305-
if ((*py_func) == NULL)
1306-
{
1307-
goto ADD_FUNC_ERROR;
1308-
}
1309-
AltDSS_PyScalarGetter_cinit((AltDSS_PyScalarGetterObject*) *py_func, self, finfo);
1310-
break;
1311-
case fastdss_types_gr_z128s:
1312-
case fastdss_types_gr_z128:
1313-
case fastdss_types_gr_f64s:
1314-
case fastdss_types_gr_i32s:
1315-
case fastdss_types_gr_i8s:
1316-
*py_func = (PyObject*) PyObject_New(AltDSS_PyGRGetterObject, &AltDSS_PyGRGetterType);
1317-
if ((*py_func) == NULL)
1318-
{
1284+
switch (finfo->resType)
1285+
{
1286+
case fastdss_types_strs:
1287+
*py_func = (PyObject*) PyObject_New(AltDSS_PyStrListGetterObject, &AltDSS_PyStrListGetterType);
1288+
if ((*py_func) == NULL)
1289+
{
1290+
goto ADD_FUNC_ERROR;
1291+
}
1292+
AltDSS_PyStrListGetter_cinit((AltDSS_PyStrListGetterObject*) *py_func, self, finfo);
1293+
break;
1294+
case fastdss_types_str:
1295+
*py_func = (PyObject*) PyObject_New(AltDSS_PyStrGetterObject, &AltDSS_PyStrGetterType);
1296+
if ((*py_func) == NULL)
1297+
{
1298+
goto ADD_FUNC_ERROR;
1299+
}
1300+
AltDSS_PyStrGetter_cinit((AltDSS_PyStrGetterObject*) *py_func, self, finfo);
1301+
break;
1302+
case fastdss_types_f64:
1303+
case fastdss_types_i32:
1304+
case fastdss_types_b16:
1305+
*py_func = (PyObject*) PyObject_New(AltDSS_PyScalarGetterObject, &AltDSS_PyScalarGetterType);
1306+
if ((*py_func) == NULL)
1307+
{
1308+
goto ADD_FUNC_ERROR;
1309+
}
1310+
AltDSS_PyScalarGetter_cinit((AltDSS_PyScalarGetterObject*) *py_func, self, finfo);
1311+
break;
1312+
case fastdss_types_gr_z128s:
1313+
case fastdss_types_gr_z128:
1314+
case fastdss_types_gr_f64s:
1315+
case fastdss_types_gr_i32s:
1316+
case fastdss_types_gr_i8s:
1317+
*py_func = (PyObject*) PyObject_New(AltDSS_PyGRGetterObject, &AltDSS_PyGRGetterType);
1318+
if ((*py_func) == NULL)
1319+
{
1320+
goto ADD_FUNC_ERROR;
1321+
}
1322+
AltDSS_PyGRGetter_cinit((AltDSS_PyGRGetterObject*) *py_func, self, finfo);
1323+
break;
1324+
default:
13191325
goto ADD_FUNC_ERROR;
1320-
}
1321-
AltDSS_PyGRGetter_cinit((AltDSS_PyGRGetterObject*) *py_func, self, finfo);
1322-
break;
1323-
default:
1324-
goto ADD_FUNC_ERROR;
1326+
}
13251327
}
13261328
}
1329+
else
1330+
{
1331+
// If the function is not available in the lib,
1332+
// set the attribute to None, but mark it as done.
1333+
*py_func = Py_None;
1334+
Py_INCREF(*py_func);
1335+
}
13271336

13281337
key = PyUnicode_FromString(finfo->fname);
13291338
Py_INCREF(key);

0 commit comments

Comments
 (0)