diff --git a/scripts/wrap/parse.py b/scripts/wrap/parse.py index 1954101af..7079c8170 100644 --- a/scripts/wrap/parse.py +++ b/scripts/wrap/parse.py @@ -2,6 +2,7 @@ Support for accessing parse tree for MuPDF headers. ''' +import collections import os import sys import time @@ -9,7 +10,7 @@ import time import jlib try: - import clang + import clang.cindex except ImportError as e: jlib.log( 'Warning, could not import clang: {e}') clang = None @@ -487,6 +488,10 @@ class Arg: get_args_cache = dict() +# get_args() needs to know how to get something hashable from a clang.cindex.Cursor. +if clang: + g_cursor_is_hashable = issubclass(clang.cindex.Cursor, collections.abc.Hashable) + def get_args( tu, cursor, include_fz_context=False, skip_first_alt=False, verbose=False): ''' Yields Arg instance for each arg of the function at . @@ -509,7 +514,10 @@ def get_args( tu, cursor, include_fz_context=False, skip_first_alt=False, verbos # if verbose: jlib.log( '## Looking at args of {cursor.spelling=}') - key = tu, cursor.location.file, cursor.location.line, include_fz_context, skip_first_alt + if g_cursor_is_hashable: + key = tu, cursor, include_fz_context, skip_first_alt + else: + key = tu, cursor.location.file, cursor.location.line, include_fz_context, skip_first_alt ret = get_args_cache.get( key) if not verbose and state.state_.show_details(cursor.spelling): verbose = True