forked from OSchip/llvm-project
objective-C: refactor/simplify parsing of delayed
method/c-funcs defined in objc class implementation. No intended functionality change. llvm-svn: 161540
This commit is contained in:
parent
ba01f2bc04
commit
18d0a5d509
|
@ -1318,8 +1318,7 @@ public:
|
|||
void CheckForFunctionRedefinition(FunctionDecl *FD);
|
||||
Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D);
|
||||
Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D);
|
||||
void ActOnStartOfObjCMethodOrCFunctionDef(Scope *S, Decl *D,
|
||||
bool parseMethod);
|
||||
void ActOnStartOfObjCMethodDef(Scope *S, Decl *D);
|
||||
bool isObjCMethodDecl(Decl *D) {
|
||||
return D && isa<ObjCMethodDecl>(D);
|
||||
}
|
||||
|
|
|
@ -2880,7 +2880,10 @@ void Parser::ParseLexedObjCMethodDefs(LexedMethod &LM, bool parseMethod) {
|
|||
|
||||
// Tell the actions module that we have entered a method or c-function definition
|
||||
// with the specified Declarator for the method/function.
|
||||
Actions.ActOnStartOfObjCMethodOrCFunctionDef(getCurScope(), MCDecl, parseMethod);
|
||||
if (parseMethod)
|
||||
Actions.ActOnStartOfObjCMethodDef(getCurScope(), MCDecl);
|
||||
else
|
||||
Actions.ActOnStartOfFunctionDef(getCurScope(), MCDecl);
|
||||
|
||||
if (SkipFunctionBodies && trySkippingFunctionBody()) {
|
||||
BodyScope.Exit();
|
||||
|
|
|
@ -282,34 +282,10 @@ void Sema::AddAnyMethodToGlobalPool(Decl *D) {
|
|||
AddFactoryMethodToGlobalPool(MDecl, true);
|
||||
}
|
||||
|
||||
/// ActOnStartOfObjCMethodOrCFunctionDef - This routine sets up parameters; invisible
|
||||
/// and user declared, in the method definition's AST. This routine is also called
|
||||
/// for C-functions defined in an Objective-c class implementation.
|
||||
void Sema::ActOnStartOfObjCMethodOrCFunctionDef(Scope *FnBodyScope, Decl *D,
|
||||
bool parseMethod) {
|
||||
assert((getCurMethodDecl() == 0 && getCurFunctionDecl() == 0) &&
|
||||
"Method/c-function parsing confused");
|
||||
if (!parseMethod) {
|
||||
FunctionDecl *FDecl = dyn_cast_or_null<FunctionDecl>(D);
|
||||
// If we don't have a valid c-function decl, simply return.
|
||||
if (!FDecl)
|
||||
return;
|
||||
PushDeclContext(FnBodyScope, FDecl);
|
||||
PushFunctionScope();
|
||||
|
||||
for (FunctionDecl::param_const_iterator PI = FDecl->param_begin(),
|
||||
E = FDecl->param_end(); PI != E; ++PI) {
|
||||
ParmVarDecl *Param = (*PI);
|
||||
if (!Param->isInvalidDecl() &&
|
||||
RequireCompleteType(Param->getLocation(), Param->getType(),
|
||||
diag::err_typecheck_decl_incomplete_type))
|
||||
Param->setInvalidDecl();
|
||||
if ((*PI)->getIdentifier())
|
||||
PushOnScopeChains(*PI, FnBodyScope);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible
|
||||
/// and user declared, in the method definition's AST.
|
||||
void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
|
||||
assert((getCurMethodDecl() == 0) && "Methodparsing confused");
|
||||
ObjCMethodDecl *MDecl = dyn_cast_or_null<ObjCMethodDecl>(D);
|
||||
|
||||
// If we don't have a valid method decl, simply return.
|
||||
|
|
Loading…
Reference in New Issue