[cfe-commits] r46973 - in /cfe/trunk: Lex/Preprocessor.cpp Parse/ParseDecl.cpp include/clang/Basic/TokenKinds.def include/clang/Parse/Parser.h

Steve Naroff snaroff at apple.com
Mon Feb 11 14:30:04 PST 2008


Author: snaroff
Date: Mon Feb 11 16:29:58 2008
New Revision: 46973

URL: http://llvm.org/viewvc/llvm-project?rev=46973&view=rev
Log:

Move Microsoft __declspec hack from the parser to the preprocessor. Since we have no plans to actually implement this construct, it is cleaner to limit the change to the preprocessor.

Modified:
    cfe/trunk/Lex/Preprocessor.cpp
    cfe/trunk/Parse/ParseDecl.cpp
    cfe/trunk/include/clang/Basic/TokenKinds.def
    cfe/trunk/include/clang/Parse/Parser.h

Modified: cfe/trunk/Lex/Preprocessor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/Preprocessor.cpp?rev=46973&r1=46972&r2=46973&view=diff

==============================================================================
--- cfe/trunk/Lex/Preprocessor.cpp (original)
+++ cfe/trunk/Lex/Preprocessor.cpp Mon Feb 11 16:29:58 2008
@@ -435,6 +435,7 @@
     DefineBuiltinMacro(Buf, "__int16=short");
     DefineBuiltinMacro(Buf, "__int32=int");
     DefineBuiltinMacro(Buf, "__int64=long long");
+    DefineBuiltinMacro(Buf, "__declspec(X)=");
   }
   // FIXME: Should emit a #line directive here.
 }

Modified: cfe/trunk/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseDecl.cpp?rev=46973&r1=46972&r2=46973&view=diff

==============================================================================
--- cfe/trunk/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/Parse/ParseDecl.cpp Mon Feb 11 16:29:58 2008
@@ -36,48 +36,6 @@
   return Actions.ActOnTypeName(CurScope, DeclaratorInfo).Val;
 }
 
-/// FuzzyParseMicrosoftDeclspec. The following construct is Microsoft's
-/// equivalent of GCC's __attribute__. The grammar below is taken from 
-/// Microsoft's website. Unfortunately, it is incomplete. FIXME: If/when we 
-/// parse this for real, we will need to get a real/current grammar.
-///
-///  decl-specifier:
-///    '__declspec' '(' extended-decl-modifier-seq ')'
-///  
-///  extended-decl-modifier-seq:
-///    extended-decl-modifier opt
-///    extended-decl-modifier extended-decl-modifier-seq
-///
-///  extended-decl-modifier:
-///    align( # )
-///    allocate(" segname ")
-///    appdomain
-///    deprecated
-///    dllimport
-///    dllexport
-///    jitintrinsic
-///    naked
-///    noalias
-///    noinline
-///    noreturn
-///    nothrow
-///    novtable
-///    process
-///    property({get=get_func_name|,put=put_func_name})
-///    restrict
-///    selectany
-///    thread
-///    uuid(" ComObjectGUID ")
-///
-void Parser::FuzzyParseMicrosoftDeclspec() {
-  assert(Tok.is(tok::kw___declspec) && "Not an declspec!");
-  ConsumeToken();
-  do {
-    ConsumeAnyToken();
-  } while (ParenCount > 0 && Tok.isNot(tok::eof));
-  return;
-}
-
 /// ParseAttributes - Parse a non-empty attributes list.
 ///
 /// [GNU] attributes:
@@ -483,13 +441,6 @@
     case tok::kw_typedef:
       isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_typedef, Loc, PrevSpec);
       break;
-    case tok::kw___declspec:
-      FuzzyParseMicrosoftDeclspec();
-      // Don't consume the next token, __declspec's can appear one after
-      // another. For example:
-      //   __declspec(deprecated("comment1")) 
-      //   __declspec(deprecated("comment2")) extern unsigned int _winmajor;
-      continue;
     case tok::kw_extern:
       if (DS.isThreadSpecified())
         Diag(Tok, diag::ext_thread_before, "extern");
@@ -674,9 +625,6 @@
     Tok.is(tok::kw_union) ? DeclSpec::TST_union : DeclSpec::TST_struct;
   SourceLocation StartLoc = ConsumeToken();
 
-  if (getLang().Microsoft && Tok.is(tok::kw___declspec))
-    FuzzyParseMicrosoftDeclspec();
-  
   // Parse the tag portion of this.
   DeclTy *TagDecl;
   if (ParseTag(TagDecl, TagType, StartLoc))

Modified: cfe/trunk/include/clang/Basic/TokenKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=46973&r1=46972&r2=46973&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/TokenKinds.def (original)
+++ cfe/trunk/include/clang/Basic/TokenKinds.def Mon Feb 11 16:29:58 2008
@@ -299,9 +299,6 @@
 // Apple Extension.
 KEYWORD(__private_extern__          , EXTC90|EXTC99|NOTCPP)
 
-// Microsoft Extension.
-KEYWORD(__declspec     , EXTC90|EXTC99|NOTCPP)
-
 // Alternate spelling for various tokens.  There are GCC extensions in all
 // languages, but should not be disabled in strict conformance mode.
 ALIAS("__attribute__", __attribute)

Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=46973&r1=46972&r2=46973&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Mon Feb 11 16:29:58 2008
@@ -441,7 +441,6 @@
   bool isTypeSpecifierQualifier() const;
 
   TypeTy *ParseTypeName();
-  void FuzzyParseMicrosoftDeclspec();
   AttributeList *ParseAttributes();
   void ParseTypeofSpecifier(DeclSpec &DS);
   





More information about the cfe-commits mailing list