[cfe-dev] Dealing with parse errors with Python bindings of libclang

Ethan Smith via cfe-dev cfe-dev at lists.llvm.org
Sat Aug 13 14:33:10 PDT 2016


Thanks for your reply vedant,

I think I might work on a patch. It seems if I use clang_
createTranslationUnitFromSourceFile, I can pass the return as the
TranslationUnit parameter for clang_parseTranslationUnit2. After a bit of
fiddling, I found that I needed to make my own enum wrapper for CXErrorCode
(where should I place the code for this? In cindex near the "Exception
Classes" section?), and now I can get the correct return code.

I was thinking of giving the CXErrorCode in the TranslationUnitLoadError
given. (Eg,  "clang.cindex.TranslationUnitLoadError: Error parsing
translation unit:  CXError_InvalidArguments")

Also, since this moves to clang_parseTranslationUnit2, and there are no
other references to the it, should I comment out
clang_parseTranslationUnit? Or leave it in?

Also, I should submit this fix once I hear back on the above as a Github
PR, correct?

~>Ethan

On Fri, Aug 12, 2016 at 6:45 PM, Vedant Kumar <vsk at apple.com> wrote:

> Hi Ethan,
>
> Unfortunately, this is a known bug in the python bindings (see: the FIXME
> in
> bindings/clang/cindex.py). The fix here should be to 1) expose a function
> which
> can unwrap a CXErrorCode into a more pythonic error value and 2) use that
> function to help move from the clang_parseTranslationUnit API to
> clang_parseTranslationUnit2.
>
> If you don't have the time to put together a patch, you might be able to
> get a
> debugger to break on clang_parseTranslationUnit and inspect the error state
> there.
>
> best,
> vedant
>
> > On Aug 8, 2016, at 10:36 AM, Ethan Smith via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
> >
> > First off, thanks for the awesome library!
> >
> > I am using the Python bindings of libclang. I am trying to use it to
> parse really any c/c++ library for code generation, however, as an example,
> I tried to bind libui (https://github.com/andlabs/libui). However, when I
> try to index.parse after setting up a clang index, I get a
> TranslationUnitLoadError. Since this returns a null pointer, I can't figure
> out what went wrong. Is there a way to tell what is causing the parser to
> fail? I also tried to pass 0x200 ( CXTranslationUnit_KeepGoing) as an
> option, which should, as I understand it, tell the parser to continue on
> fail, it has no effect. How can I get some useful information to tell me
> what I need to do to fix the parser error? For the record, the library
> compiles fine with clang itself.
> >
> > Could I expose more useful info from the c libclang? I suppose I'm not
> opposed to writing my own bindings.
> >
> > Thanks!
> >
> > Ethan
> >
> > _______________________________________________
> > cfe-dev mailing list
> > cfe-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160813/88b7a49a/attachment.html>


More information about the cfe-dev mailing list