[cfe-commits] r150710 - in /cfe/trunk: lib/Parse/ParseExpr.cpp test/SemaObjCXX/properties.mm

Jean-Daniel Dupas devlists at shadowlab.org
Thu Feb 16 14:42:58 PST 2012


I'm glad to see you changed your mind about this one ;-)

http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-August/010310.html

Le 16 févr. 2012 à 19:19, Douglas Gregor a écrit :

> Author: dgregor
> Date: Thu Feb 16 12:19:22 2012
> New Revision: 150710
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=150710&view=rev
> Log:
> In Objective-C++, allow the keyword 'class' to be used as a property
> name for dot syntax, e.g., NSObject.class or foo.class. For other
> C++-keywords-as-method-names, use message send syntax. Fixes
> <rdar://problem/10794452>.
> 
> Modified:
>    cfe/trunk/lib/Parse/ParseExpr.cpp
>    cfe/trunk/test/SemaObjCXX/properties.mm
> 
> Modified: cfe/trunk/lib/Parse/ParseExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExpr.cpp?rev=150710&r1=150709&r2=150710&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseExpr.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseExpr.cpp Thu Feb 16 12:19:22 2012
> @@ -726,7 +726,9 @@
>          (&II == Ident_super && getCurScope()->isInObjcMethodScope()))) {
>       ConsumeToken();
> 
> -      if (Tok.isNot(tok::identifier)) {
> +      // Allow either an identifier or the keyword 'class' (in C++).
> +      if (Tok.isNot(tok::identifier) && 
> +          !(getLang().CPlusPlus && Tok.is(tok::kw_class))) {
>         Diag(Tok, diag::err_expected_property_name);
>         return ExprError();
>       }
> @@ -1406,11 +1408,23 @@
>       // FIXME: Add support for explicit call of template constructor.
>       SourceLocation TemplateKWLoc;
>       UnqualifiedId Name;
> -      if (ParseUnqualifiedId(SS, 
> -                             /*EnteringContext=*/false, 
> -                             /*AllowDestructorName=*/true,
> -                             /*AllowConstructorName=*/ getLang().MicrosoftExt, 
> -                             ObjectType, TemplateKWLoc, Name))
> +      if (getLang().ObjC2 && OpKind == tok::period && Tok.is(tok::kw_class)) {
> +        // Objective-C++:
> +        //   After a '.' in a member access expression, treat the keyword
> +        //   'class' as if it were an identifier.
> +        //
> +        // This hack allows property access to the 'class' method because it is
> +        // such a common method name. For other C++ keywords that are 
> +        // Objective-C method names, one must use the message send syntax.
> +        IdentifierInfo *Id = Tok.getIdentifierInfo();
> +        SourceLocation Loc = ConsumeToken();
> +        Name.setIdentifier(Id, Loc);
> +      } else if (ParseUnqualifiedId(SS, 
> +                                    /*EnteringContext=*/false, 
> +                                    /*AllowDestructorName=*/true,
> +                                    /*AllowConstructorName=*/
> +                                      getLang().MicrosoftExt, 
> +                                    ObjectType, TemplateKWLoc, Name))
>         LHS = ExprError();
> 
>       if (!LHS.isInvalid())
> 
> Modified: cfe/trunk/test/SemaObjCXX/properties.mm
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/properties.mm?rev=150710&r1=150709&r2=150710&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjCXX/properties.mm (original)
> +++ cfe/trunk/test/SemaObjCXX/properties.mm Thu Feb 16 12:19:22 2012
> @@ -68,3 +68,20 @@
>   if (t5->count < 2) { }
> }
> 
> +
> + at interface Test6
> ++ (Class)class;
> +- (Class)class;
> + at end
> +
> +void test6(Test6 *t6) {
> +  Class x = t6.class;
> +  Class x2 = Test6.class;
> +}
> +
> +template<typename T>
> +void test6_template(T *t6) {
> +  Class x = t6.class;
> +}
> +
> +template void test6_template(Test6*);
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- Jean-Daniel








More information about the cfe-commits mailing list