Some refactoring in my patch on document
command source fidelity. // rdar://13066276
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176401 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/CommentBriefParser.cpp b/lib/AST/CommentBriefParser.cpp
index 95daa7e..090b921 100644
--- a/lib/AST/CommentBriefParser.cpp
+++ b/lib/AST/CommentBriefParser.cpp
@@ -78,7 +78,7 @@
continue;
}
- if (Tok.is(tok::command)) {
+ if (Tok.is(tok::backslash_command) || Tok.is(tok::at_command)) {
const CommandInfo *Info = Traits.getCommandInfo(Tok.getCommandID());
if (Info->IsBriefCommand) {
FirstParagraphOrBrief.clear();
diff --git a/lib/AST/CommentLexer.cpp b/lib/AST/CommentLexer.cpp
index da865d2..2018099 100644
--- a/lib/AST/CommentLexer.cpp
+++ b/lib/AST/CommentLexer.cpp
@@ -298,7 +298,7 @@
switch(*TokenPtr) {
case '\\':
case '@': {
- T.HDCommand = (*TokenPtr == '@');
+ bool AtCommand = (*TokenPtr == '@');
TokenPtr++;
if (TokenPtr == CommentEnd) {
formTextToken(T, TokenPtr);
@@ -359,7 +359,9 @@
setupAndLexVerbatimLine(T, TokenPtr, Info);
return;
}
- formTokenWithChars(T, TokenPtr, tok::command);
+ formTokenWithChars(T, TokenPtr,
+ (AtCommand ? tok::at_command
+ : tok::backslash_command));
T.setCommandID(Info->getID());
return;
}
diff --git a/lib/AST/CommentParser.cpp b/lib/AST/CommentParser.cpp
index f5c933e..c6bd922 100644
--- a/lib/AST/CommentParser.cpp
+++ b/lib/AST/CommentParser.cpp
@@ -300,7 +300,7 @@
}
BlockCommandComment *Parser::parseBlockCommand() {
- assert(Tok.is(tok::command));
+ assert(Tok.is(tok::backslash_command) || Tok.is(tok::at_command));
ParamCommandComment *PC;
TParamCommandComment *TPC;
@@ -312,19 +312,19 @@
IsParam = true;
PC = S.actOnParamCommandStart(Tok.getLocation(),
Tok.getEndLocation(),
- Tok.getCommandID());
- PC->setHDCommand(Tok.getHDCommand());
+ Tok.getCommandID(),
+ Tok.is(tok::at_command));
} else if (Info->IsTParamCommand) {
IsTParam = true;
TPC = S.actOnTParamCommandStart(Tok.getLocation(),
Tok.getEndLocation(),
- Tok.getCommandID());
- TPC->setHDCommand(Tok.getHDCommand());
+ Tok.getCommandID(),
+ Tok.is(tok::at_command));
} else {
BC = S.actOnBlockCommandStart(Tok.getLocation(),
Tok.getEndLocation(),
- Tok.getCommandID());
- BC->setHDCommand(Tok.getHDCommand());
+ Tok.getCommandID(),
+ Tok.is(tok::at_command));
}
consumeToken();
@@ -395,7 +395,7 @@
}
InlineCommandComment *Parser::parseInlineCommand() {
- assert(Tok.is(tok::command));
+ assert(Tok.is(tok::backslash_command) || Tok.is(tok::at_command));
const Token CommandTok = Tok;
consumeToken();
@@ -562,7 +562,8 @@
consumeToken();
continue;
- case tok::command: {
+ case tok::backslash_command:
+ case tok::at_command: {
const CommandInfo *Info = Traits.getCommandInfo(Tok.getCommandID());
if (Info->IsBlockCommand) {
if (Content.size() == 0)
@@ -572,7 +573,7 @@
if (Info->IsVerbatimBlockEndCommand) {
Diag(Tok.getLocation(),
diag::warn_verbatim_block_end_without_start)
- << Tok.getHDCommand()
+ << Tok.is(tok::at_command)
<< Info->Name
<< SourceRange(Tok.getLocation(), Tok.getEndLocation());
consumeToken();
@@ -710,7 +711,8 @@
switch (Tok.getKind()) {
case tok::text:
case tok::unknown_command:
- case tok::command:
+ case tok::backslash_command:
+ case tok::at_command:
case tok::html_start_tag:
case tok::html_end_tag:
return parseParagraphOrBlockCommand();
diff --git a/lib/AST/CommentSema.cpp b/lib/AST/CommentSema.cpp
index 3227138..e7bd5c8 100644
--- a/lib/AST/CommentSema.cpp
+++ b/lib/AST/CommentSema.cpp
@@ -49,8 +49,9 @@
BlockCommandComment *Sema::actOnBlockCommandStart(SourceLocation LocBegin,
SourceLocation LocEnd,
- unsigned CommandID) {
- return new (Allocator) BlockCommandComment(LocBegin, LocEnd, CommandID);
+ unsigned CommandID,
+ bool AtCommand) {
+ return new (Allocator) BlockCommandComment(LocBegin, LocEnd, CommandID, AtCommand);
}
void Sema::actOnBlockCommandArgs(BlockCommandComment *Command,
@@ -69,9 +70,10 @@
ParamCommandComment *Sema::actOnParamCommandStart(SourceLocation LocBegin,
SourceLocation LocEnd,
- unsigned CommandID) {
+ unsigned CommandID,
+ bool AtCommand) {
ParamCommandComment *Command =
- new (Allocator) ParamCommandComment(LocBegin, LocEnd, CommandID);
+ new (Allocator) ParamCommandComment(LocBegin, LocEnd, CommandID, AtCommand);
if (!isFunctionDecl())
Diag(Command->getLocation(),
@@ -162,9 +164,10 @@
TParamCommandComment *Sema::actOnTParamCommandStart(SourceLocation LocBegin,
SourceLocation LocEnd,
- unsigned CommandID) {
+ unsigned CommandID,
+ bool AtCommand) {
TParamCommandComment *Command =
- new (Allocator) TParamCommandComment(LocBegin, LocEnd, CommandID);
+ new (Allocator) TParamCommandComment(LocBegin, LocEnd, CommandID, AtCommand);
if (!isTemplateOrSpecialization())
Diag(Command->getLocation(),
@@ -432,7 +435,7 @@
if (!DiagLoc.isValid())
DiagLoc = Command->getCommandNameRange(Traits).getEnd();
Diag(DiagLoc, diag::warn_doc_block_command_empty_paragraph)
- << Command->getHDCommand()
+ << Command->getAtCommand()
<< Command->getCommandName(Traits)
<< Command->getSourceRange();
}
@@ -460,7 +463,7 @@
}
Diag(Command->getLocation(),
diag::warn_doc_returns_attached_to_a_void_function)
- << Command->getHDCommand()
+ << Command->getAtCommand()
<< Command->getCommandName(Traits)
<< DiagKind
<< Command->getSourceRange();
@@ -472,7 +475,7 @@
Diag(Command->getLocation(),
diag::warn_doc_returns_not_attached_to_a_function_decl)
- << Command->getHDCommand()
+ << Command->getAtCommand()
<< Command->getCommandName(Traits)
<< Command->getSourceRange();
}
@@ -505,18 +508,18 @@
StringRef CommandName = Command->getCommandName(Traits);
StringRef PrevCommandName = PrevCommand->getCommandName(Traits);
Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate)
- << Command->getHDCommand()
+ << Command->getAtCommand()
<< CommandName
<< Command->getSourceRange();
if (CommandName == PrevCommandName)
Diag(PrevCommand->getLocation(), diag::note_doc_block_command_previous)
- << PrevCommand->getHDCommand()
+ << PrevCommand->getAtCommand()
<< PrevCommandName
<< PrevCommand->getSourceRange();
else
Diag(PrevCommand->getLocation(),
diag::note_doc_block_command_previous_alias)
- << PrevCommand->getHDCommand()
+ << PrevCommand->getAtCommand()
<< PrevCommandName
<< CommandName;
}