зеркало из https://github.com/microsoft/clang-1.git
move function to a more logical location, add its grammar productions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
fbb9898a5e
Коммит
e8b724d481
|
@ -552,40 +552,6 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) {
|
|||
}
|
||||
}
|
||||
|
||||
/// ParseObjcTypeQualifierList - This routine parses the objective-c's type
|
||||
/// qualifier list and builds their bitmask representation in the input
|
||||
/// argument.
|
||||
void Parser::ParseObjcTypeQualifierList(ObjcDeclSpec &DS) {
|
||||
while (1) {
|
||||
if (!Tok.is(tok::identifier))
|
||||
return;
|
||||
|
||||
const IdentifierInfo *II = Tok.getIdentifierInfo();
|
||||
for (unsigned i = 0; i != objc_NumQuals; ++i) {
|
||||
if (II != ObjcTypeQuals[i])
|
||||
continue;
|
||||
|
||||
ObjcDeclSpec::ObjcDeclQualifier Qual;
|
||||
switch (i) {
|
||||
default: assert(0 && "Unknown decl qualifier");
|
||||
case objc_in: Qual = ObjcDeclSpec::DQ_In; break;
|
||||
case objc_out: Qual = ObjcDeclSpec::DQ_Out; break;
|
||||
case objc_inout: Qual = ObjcDeclSpec::DQ_Inout; break;
|
||||
case objc_oneway: Qual = ObjcDeclSpec::DQ_Oneway; break;
|
||||
case objc_bycopy: Qual = ObjcDeclSpec::DQ_Bycopy; break;
|
||||
case objc_byref: Qual = ObjcDeclSpec::DQ_Byref; break;
|
||||
}
|
||||
DS.setObjcDeclQualifier(Qual);
|
||||
ConsumeToken();
|
||||
II = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// If this wasn't a recognized qualifier, bail out.
|
||||
if (II) return;
|
||||
}
|
||||
}
|
||||
|
||||
/// ParseTag - Parse "struct-or-union-or-class-or-enum identifier[opt]", where
|
||||
/// the first token has already been read and has been turned into an instance
|
||||
/// of DeclSpec::TST (TagType). This returns true if there is an error parsing,
|
||||
|
|
|
@ -491,14 +491,49 @@ bool Parser::isObjCPropertyAttribute() {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// objc-type-name:
|
||||
/// '(' objc-type-qualifiers[opt] type-name ')'
|
||||
/// '(' objc-type-qualifiers[opt] ')'
|
||||
/// ParseObjcTypeQualifierList - This routine parses the objective-c's type
|
||||
/// qualifier list and builds their bitmask representation in the input
|
||||
/// argument.
|
||||
///
|
||||
/// objc-type-qualifiers:
|
||||
/// objc-type-qualifier
|
||||
/// objc-type-qualifiers objc-type-qualifier
|
||||
///
|
||||
void Parser::ParseObjcTypeQualifierList(ObjcDeclSpec &DS) {
|
||||
while (1) {
|
||||
if (!Tok.is(tok::identifier))
|
||||
return;
|
||||
|
||||
const IdentifierInfo *II = Tok.getIdentifierInfo();
|
||||
for (unsigned i = 0; i != objc_NumQuals; ++i) {
|
||||
if (II != ObjcTypeQuals[i])
|
||||
continue;
|
||||
|
||||
ObjcDeclSpec::ObjcDeclQualifier Qual;
|
||||
switch (i) {
|
||||
default: assert(0 && "Unknown decl qualifier");
|
||||
case objc_in: Qual = ObjcDeclSpec::DQ_In; break;
|
||||
case objc_out: Qual = ObjcDeclSpec::DQ_Out; break;
|
||||
case objc_inout: Qual = ObjcDeclSpec::DQ_Inout; break;
|
||||
case objc_oneway: Qual = ObjcDeclSpec::DQ_Oneway; break;
|
||||
case objc_bycopy: Qual = ObjcDeclSpec::DQ_Bycopy; break;
|
||||
case objc_byref: Qual = ObjcDeclSpec::DQ_Byref; break;
|
||||
}
|
||||
DS.setObjcDeclQualifier(Qual);
|
||||
ConsumeToken();
|
||||
II = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// If this wasn't a recognized qualifier, bail out.
|
||||
if (II) return;
|
||||
}
|
||||
}
|
||||
|
||||
/// objc-type-name:
|
||||
/// '(' objc-type-qualifiers[opt] type-name ')'
|
||||
/// '(' objc-type-qualifiers[opt] ')'
|
||||
///
|
||||
Parser::TypeTy *Parser::ParseObjCTypeName(ObjcDeclSpec &DS) {
|
||||
assert(Tok.is(tok::l_paren) && "expected (");
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче