|
@@ -249,18 +249,12 @@ TEST_F(SourceManagerTest, getMacroArgExpandedLocation) {
|
|
|
namespace {
|
|
|
|
|
|
struct MacroAction {
|
|
|
- enum Kind { kExpansion, kDefinition, kUnDefinition};
|
|
|
-
|
|
|
SourceLocation Loc;
|
|
|
std::string Name;
|
|
|
- unsigned MAKind : 3;
|
|
|
-
|
|
|
- MacroAction(SourceLocation Loc, StringRef Name, unsigned K)
|
|
|
- : Loc(Loc), Name(Name), MAKind(K) { }
|
|
|
-
|
|
|
- bool isExpansion() const { return MAKind == kExpansion; }
|
|
|
- bool isDefinition() const { return MAKind & kDefinition; }
|
|
|
- bool isUnDefinition() const { return MAKind & kUnDefinition; }
|
|
|
+ bool isDefinition; // if false, it is expansion.
|
|
|
+
|
|
|
+ MacroAction(SourceLocation Loc, StringRef Name, bool isDefinition)
|
|
|
+ : Loc(Loc), Name(Name), isDefinition(isDefinition) { }
|
|
|
};
|
|
|
|
|
|
class MacroTracker : public PPCallbacks {
|
|
@@ -273,22 +267,13 @@ public:
|
|
|
const MacroDirective *MD) override {
|
|
|
Macros.push_back(MacroAction(MD->getLocation(),
|
|
|
MacroNameTok.getIdentifierInfo()->getName(),
|
|
|
- MacroAction::kDefinition));
|
|
|
- }
|
|
|
- void MacroUndefined(const Token &MacroNameTok,
|
|
|
- const MacroDefinition &MD,
|
|
|
- const MacroDirective *UD) override {
|
|
|
- Macros.push_back(
|
|
|
- MacroAction(UD ? UD->getLocation() : SourceLocation(),
|
|
|
- MacroNameTok.getIdentifierInfo()->getName(),
|
|
|
- UD ? MacroAction::kDefinition | MacroAction::kUnDefinition
|
|
|
- : MacroAction::kUnDefinition));
|
|
|
+ true));
|
|
|
}
|
|
|
void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,
|
|
|
SourceRange Range, const MacroArgs *Args) override {
|
|
|
Macros.push_back(MacroAction(MacroNameTok.getLocation(),
|
|
|
MacroNameTok.getIdentifierInfo()->getName(),
|
|
|
- MacroAction::kExpansion));
|
|
|
+ false));
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -296,10 +281,7 @@ public:
|
|
|
|
|
|
TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) {
|
|
|
const char *header =
|
|
|
- "#define MACRO_IN_INCLUDE 0\n"
|
|
|
- "#define MACRO_DEFINED\n"
|
|
|
- "#undef MACRO_DEFINED\n"
|
|
|
- "#undef MACRO_UNDEFINED\n";
|
|
|
+ "#define MACRO_IN_INCLUDE 0\n";
|
|
|
|
|
|
const char *main =
|
|
|
"#define M(x) x\n"
|
|
@@ -345,46 +327,34 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) {
|
|
|
// Make sure we got the tokens that we expected.
|
|
|
ASSERT_EQ(0U, toks.size());
|
|
|
|
|
|
- ASSERT_EQ(15U, Macros.size());
|
|
|
+ ASSERT_EQ(9U, Macros.size());
|
|
|
// #define M(x) x
|
|
|
- ASSERT_TRUE(Macros[0].isDefinition());
|
|
|
+ ASSERT_TRUE(Macros[0].isDefinition);
|
|
|
ASSERT_EQ("M", Macros[0].Name);
|
|
|
// #define INC "/test-header.h"
|
|
|
- ASSERT_TRUE(Macros[1].isDefinition());
|
|
|
+ ASSERT_TRUE(Macros[1].isDefinition);
|
|
|
ASSERT_EQ("INC", Macros[1].Name);
|
|
|
// M expansion in #include M(INC)
|
|
|
- ASSERT_FALSE(Macros[2].isDefinition());
|
|
|
+ ASSERT_FALSE(Macros[2].isDefinition);
|
|
|
ASSERT_EQ("M", Macros[2].Name);
|
|
|
// INC expansion in #include M(INC)
|
|
|
- ASSERT_TRUE(Macros[3].isExpansion());
|
|
|
+ ASSERT_FALSE(Macros[3].isDefinition);
|
|
|
ASSERT_EQ("INC", Macros[3].Name);
|
|
|
// #define MACRO_IN_INCLUDE 0
|
|
|
- ASSERT_TRUE(Macros[4].isDefinition());
|
|
|
+ ASSERT_TRUE(Macros[4].isDefinition);
|
|
|
ASSERT_EQ("MACRO_IN_INCLUDE", Macros[4].Name);
|
|
|
- // #define MACRO_DEFINED
|
|
|
- ASSERT_TRUE(Macros[5].isDefinition());
|
|
|
- ASSERT_FALSE(Macros[5].isUnDefinition());
|
|
|
- ASSERT_EQ("MACRO_DEFINED", Macros[5].Name);
|
|
|
- // #undef MACRO_DEFINED
|
|
|
- ASSERT_TRUE(Macros[6].isDefinition());
|
|
|
- ASSERT_TRUE(Macros[6].isUnDefinition());
|
|
|
- ASSERT_EQ("MACRO_DEFINED", Macros[6].Name);
|
|
|
- // #undef MACRO_UNDEFINED
|
|
|
- ASSERT_FALSE(Macros[7].isDefinition());
|
|
|
- ASSERT_TRUE(Macros[7].isUnDefinition());
|
|
|
- ASSERT_EQ("MACRO_UNDEFINED", Macros[7].Name);
|
|
|
// #define INC2 </test-header.h>
|
|
|
- ASSERT_TRUE(Macros[8].isDefinition());
|
|
|
- ASSERT_EQ("INC2", Macros[8].Name);
|
|
|
+ ASSERT_TRUE(Macros[5].isDefinition);
|
|
|
+ ASSERT_EQ("INC2", Macros[5].Name);
|
|
|
// M expansion in #include M(INC2)
|
|
|
- ASSERT_FALSE(Macros[9].isDefinition());
|
|
|
- ASSERT_EQ("M", Macros[9].Name);
|
|
|
+ ASSERT_FALSE(Macros[6].isDefinition);
|
|
|
+ ASSERT_EQ("M", Macros[6].Name);
|
|
|
// INC2 expansion in #include M(INC2)
|
|
|
- ASSERT_TRUE(Macros[10].isExpansion());
|
|
|
- ASSERT_EQ("INC2", Macros[10].Name);
|
|
|
+ ASSERT_FALSE(Macros[7].isDefinition);
|
|
|
+ ASSERT_EQ("INC2", Macros[7].Name);
|
|
|
// #define MACRO_IN_INCLUDE 0
|
|
|
- ASSERT_TRUE(Macros[11].isDefinition());
|
|
|
- ASSERT_EQ("MACRO_IN_INCLUDE", Macros[11].Name);
|
|
|
+ ASSERT_TRUE(Macros[8].isDefinition);
|
|
|
+ ASSERT_EQ("MACRO_IN_INCLUDE", Macros[8].Name);
|
|
|
|
|
|
// The INC expansion in #include M(INC) comes before the first
|
|
|
// MACRO_IN_INCLUDE definition of the included file.
|
|
@@ -392,7 +362,7 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) {
|
|
|
|
|
|
// The INC2 expansion in #include M(INC2) comes before the second
|
|
|
// MACRO_IN_INCLUDE definition of the included file.
|
|
|
- EXPECT_TRUE(SourceMgr.isBeforeInTranslationUnit(Macros[10].Loc, Macros[11].Loc));
|
|
|
+ EXPECT_TRUE(SourceMgr.isBeforeInTranslationUnit(Macros[7].Loc, Macros[8].Loc));
|
|
|
}
|
|
|
|
|
|
#endif
|