[cfe-dev] Evaluating bitfield width with libclang
Richard Smith
richard at metafoo.co.uk
Thu Sep 6 11:45:47 PDT 2012
On Thu, Sep 6, 2012 at 10:47 AM, Sergiy Migdalskiy
<migdalskiy at hotmail.com>wrote:
> Ok, does everyone agree on this variant?
> Also, is the check "isValueDependent()" essentially for the cases when
> bitwidth is templatized? Or is there some other reason?
>
Yes, exactly, it's for the case where the bitwidth involves a template
argument in a way which means we can't evaluate it.
> // Return bitfield bit width. Cursor must be a value-independent bit field
> declaration
>
> int clang_Cursor_getBitfieldWidth(**CXCursor C) {
> if (clang_isDeclaration(C.kind)) {
> Decl *D = cxcursor::getCursorDecl(C);
> if( const FieldDecl *FD = dyn_cast_or_null< FieldDecl >(D) ){
> Expr *pBitWidth = FD->getBitWidth();
> if( pBitWidth && !pBitWidth->isValueDependent() )
> return FD->getBitWidthValue( getCursorASTUnit(C)->**getASTContext()
> );
>
> }
> }
> return -1;
> }
>
Yes, this looks fine to me, functionally. There are some coding style
violations here (variable names, whitespace). See:
http://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
http://llvm.org/docs/CodingStandards.html#spaces-before-parentheses
The next thing to do is to get a complete patch together and mail it to
cfe-commits@ for a proper review. This patch should include test cases
(maybe extend c-index-test.c's PrintCursor to print out the bit width for
bitfields, and extend one of the test/Index/* tests to make sure the
correct value is produced).
Thanks!
Richard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120906/c85f8580/attachment.html>
More information about the cfe-dev
mailing list