@@ -101,6 +101,10 @@ typedef enum {
101101 PYTHON_UNKNOWN_INDIRECTLY_IMPORTED ,
102102} pythonUnknownRole ;
103103
104+ typedef enum {
105+ PYTHON_CLASS_SUPERCLASS ,
106+ } pythonClassRole ;
107+
104108/* Roles related to `import'
105109 * ==========================
106110 * import X X = (kind:module, role:imported)
@@ -135,8 +139,13 @@ static roleDefinition PythonUnknownRoles [] = {
135139 "classes/variables/functions/modules imported in alternative name" },
136140};
137141
142+ static roleDefinition PythonClassRoles [] = {
143+ { true, "super" , "super class" },
144+ };
145+
138146static kindDefinition PythonKinds [COUNT_KIND ] = {
139- {true, 'c' , "class" , "classes" },
147+ {true, 'c' , "class" , "classes" ,
148+ .referenceOnly = false, ATTACH_ROLES (PythonClassRoles ) },
140149 {true, 'f' , "function" , "functions" },
141150 {true, 'm' , "member" , "class members" },
142151 {true, 'v' , "variable" , "variables" },
@@ -1042,13 +1051,41 @@ static void deleteTypedParam (struct typedParam *p)
10421051static void parseInheritanceList (tokenInfo * const token ,
10431052 vString * const inneritanceList )
10441053{
1054+ tokenInfo * lastToken = newToken ();
1055+
10451056 do
10461057 {
1058+ copyToken (lastToken , token );
10471059 readTokenFull (token , true);
1060+ if (lastToken -> type == TOKEN_IDENTIFIER
1061+ && (token -> type == ',' || token -> type == ')' ))
1062+ {
1063+ if (lastToken -> reftag == CORK_NIL )
1064+ {
1065+ tagEntryInfo e ;
1066+ initRefTagEntry (& e , vStringValue (lastToken -> string ),
1067+ K_CLASS , PYTHON_CLASS_SUPERCLASS );
1068+ e .lineNumber = lastToken -> lineNumber ;
1069+ e .filePosition = lastToken -> filePosition ;
1070+ lastToken -> reftag = makeTagEntry (& e );
1071+ }
1072+ else
1073+ {
1074+ tagEntryInfo * e = getEntryInCorkQueue (lastToken -> reftag );
1075+ if (e )
1076+ {
1077+ clearRoles (e );
1078+ e -> kindIndex = K_CLASS ;
1079+ assignRole (e , PYTHON_CLASS_SUPERCLASS );
1080+ }
1081+ }
1082+ }
10481083 if (token -> type != ')' )
10491084 reprCat (inneritanceList , token );
10501085 }
10511086 while (token -> type != TOKEN_EOF && token -> type != ')' );
1087+
1088+ deleteToken (lastToken );
10521089}
10531090
10541091static void parseArglist (tokenInfo * const token ,
0 commit comments