static void addAccessFields (tagEntryInfo *const entry, const vString *const ident, pythonKind kind, boolean has_parent, boolean parent_is_class) { pythonAccess access; access = accessFromIdentifier (ident, kind, has_parent, parent_is_class); entry->extensionFields.access = PythonAccesses [access]; /* FIXME: should we really set isFileScope in addition to access? */ if (access == A_PRIVATE) entry->isFileScope = TRUE; }
/* Given a string with the contents of a line directly after the "def" keyword, * extract all relevant information and create a tag. */ static void makeFunctionTag (vString *const function, vString *const parent, int is_class_parent, const char *arglist) { pythonAccess access; tagEntryInfo tag; initTagEntry (&tag, vStringValue (function)); tag.kindName = PythonKinds[K_FUNCTION].name; tag.kind = PythonKinds[K_FUNCTION].letter; tag.extensionFields.arglist = arglist; /* add argument list of __init__() methods to the class tag */ if (strcmp (vStringValue (function), "__init__") == 0 && parent != NULL) { const char *parent_tag_name = get_class_name_from_parent (vStringValue (parent)); if (parent_tag_name != NULL) setTagArglistByName (parent_tag_name, arglist); } if (vStringLength (parent) > 0) { if (is_class_parent) { tag.kindName = PythonKinds[K_METHOD].name; tag.kind = PythonKinds[K_METHOD].letter; tag.extensionFields.scope [0] = PythonKinds[K_CLASS].name; tag.extensionFields.scope [1] = vStringValue (parent); } else { tag.extensionFields.scope [0] = PythonKinds[K_FUNCTION].name; tag.extensionFields.scope [1] = vStringValue (parent); } } access = accessFromIdentifier (function); tag.extensionFields.access = PythonAccesses [access]; /* FIXME: should we really set isFileScope in addition to access? */ if (access == A_PRIVATE) tag.isFileScope = TRUE; makeTagEntry (&tag); }
static void initPythonEntry (tagEntryInfo *const e, const tokenInfo *const token, const pythonKind kind) { accessType access; int parentKind = -1; NestingLevel *nl; initTagEntry (e, vStringValue (token->string), kind); e->lineNumber = token->lineNumber; e->filePosition = token->filePosition; nl = nestingLevelsGetCurrent (PythonNestingLevels); if (nl) { tagEntryInfo *nlEntry = getEntryOfNestingLevel (nl); e->extensionFields.scopeIndex = nl->corkIndex; /* nlEntry can be NULL if a kind was disabled. But what can we do * here? Even disabled kinds should count for the hierarchy I * guess -- as it'd otherwise be wrong -- but with cork we're * f****d up as there's nothing to look up. Damn. */ if (nlEntry) { parentKind = nlEntry->kindIndex; /* functions directly inside classes are methods, fix it up */ if (kind == K_FUNCTION && parentKind == K_CLASS) e->kindIndex = K_METHOD; } } access = accessFromIdentifier (token->string, kind, parentKind); e->extensionFields.access = PythonAccesses[access]; /* FIXME: should we really set isFileScope in addition to access? */ if (access == ACCESS_PRIVATE) e->isFileScope = true; }