[cfe-dev] Extracting macro information using libclang, the C Interface to Clang
Kevin Funk
kfunk at kde.org
Thu Nov 27 23:08:53 PST 2014
On Thursday 27 November 2014 18:47:17 Mark wrote:
> Hello all,
> I'm new to libclang and using the Clang C-interface (version 3.6.0,
> 222169) to parse some C header files.
>
> My goal is to extract all the #define constants from the .h files.
>
> For example, for the following #defines:
>
> #define FEE 12
> #define FIE 34
> #define FOE (FEE+FIE)
> #define FUM FIE
>
> I would like to get both the names and the resulting raw values as follows:
>
> FEE = 12
> FIE = 34
> FOE = 46
> FUM = 34
>
> I've got as far as handling /CXCursor_MacroDefinition, /and getting the
> macro name from the cursor spelling. But after that, it's not clear to
> me how I might obtain further information about the defined macro values
> themselves.
Yep. That's where we are as well. Getting the definitions + their uses is
easy.
Context: I'm the one working on (lib)Clang integration in KDevelop.
> Is this possible using the libclang C interface?
> If so, could someone please provide an example, or suggest an approach
> that that might work?
I was looking into this several months ago [1], too, and didn't find a
solution so far. I'd love to get some API in libclang for achieving this.
The open-source woboq code browser (code.woboq.org) has this feature, but uses
C++-API of Clang; so it's definitely possible, but I still didn't find the
time to map this implementation to libclang.
Example usage:
http://code.woboq.org/qt5/qtbase/src/corelib/kernel/qobject.h.html#108,
hover over 'Q_OBJECT'.
The code dealing with Clang's C++ API is here:
https://github.com/woboq/woboq_codebrowser/blob/master/generator/preprocessorcallback.cpp
Note: If you're interested in getting this into libclang I'd be glad to help
out!
[1] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-August/038543.html
>
> Thank you,
>
> Mark.
--
Kevin Funk | kfunk at kde.org | http://kfunk.org
More information about the cfe-dev
mailing list