Checking in some code that is still under construction.
I need to (finally) change the way Class/id/SEL/IMP are built-in...the current approach of doing it in the preprocessor is "broken". The other problem is Sema::GetObjcIdType/GetObjcSelType/GetObjcClassType, the hooks that initialize ASTContext lazily. These built-in types need to be done up front... llvm-svn: 43557
This commit is contained in:
parent
d728e949bb
commit
ac0216385f
|
|
@ -406,22 +406,28 @@ CallExpr *RewriteTest::SynthesizeCallToFunctionDecl(
|
|||
|
||||
bool RewriteTest::functionReferencesAnyObjcQualifiedInterfaceTypes(
|
||||
const FunctionTypeProto *proto) {
|
||||
const PointerType *pType = proto->getResultType()->getAsPointerType();
|
||||
if (pType) {
|
||||
QualType resultType = proto->getResultType();
|
||||
|
||||
if (resultType == Context->getObjcIdType()) {
|
||||
// FIXME: we don't currently represent "id <Protocol>" in the type system.
|
||||
// Implement a heuristic here (until we do).
|
||||
} else if (const PointerType *pType = resultType->getAsPointerType()) {
|
||||
Type *pointeeType = pType->getPointeeType().getTypePtr();
|
||||
if (isa<ObjcQualifiedInterfaceType>(pointeeType))
|
||||
return true; // we have "Class <Protocol> *".
|
||||
}
|
||||
// Now check arguments.
|
||||
for (unsigned i = 0; i < proto->getNumArgs(); i++) {
|
||||
pType = proto->getArgType(i)->getAsPointerType();
|
||||
if (pType) {
|
||||
QualType argType = proto->getArgType(i);
|
||||
if (argType == Context->getObjcIdType()) {
|
||||
// FIXME: we don't currently represent "id <Protocol>" in the type system.
|
||||
// Implement a heuristic here (until we do).
|
||||
} else if (const PointerType *pType = argType->getAsPointerType()) {
|
||||
Type *pointeeType = pType->getPointeeType().getTypePtr();
|
||||
if (isa<ObjcQualifiedInterfaceType>(pointeeType))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// FIXME: we don't currently represent "id <Protocol>" in the type system.
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -431,6 +437,7 @@ void RewriteTest::RewriteFunctionDecl(FunctionDecl *FD) {
|
|||
SelGetUidFunctionDecl = FD;
|
||||
return;
|
||||
}
|
||||
return; // FIXME: remove when the code below is ready.
|
||||
// Check for ObjC 'id' and class types that have been adorned with protocol
|
||||
// information (id<p>, C<p>*). The protocol references need to be rewritten!
|
||||
const FunctionType *funcType = FD->getType()->getAsFunctionType();
|
||||
|
|
|
|||
|
|
@ -369,7 +369,6 @@ static void InitializePredefinedMacros(Preprocessor &PP,
|
|||
DefineBuiltinMacro(Buf, "__OBJC__=1");
|
||||
if (PP.getLangOptions().ObjC2)
|
||||
DefineBuiltinMacro(Buf, "__OBJC2__=1");
|
||||
|
||||
if (PP.getLangOptions().ObjC1) {
|
||||
const char *ObjcType;
|
||||
// Predefine all the ObjC goodies (traditionally declared in <objc/objc.h>).
|
||||
|
|
|
|||
Loading…
Reference in New Issue