aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2007-10-31 16:03:04 +0000
committerSteve Naroff <snaroff@apple.com>2007-10-31 16:03:04 +0000
commit498856cb30333cfeed3e8399e5a2b4c58836884d (patch)
tree15fc0f4d875bad09f138a3adb5efb360ecc3a4b7
parentdea84f82b20e0183f8703d62ebd113d5f3755cff (diff)
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... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43557 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/RewriteTest.cpp17
-rw-r--r--Lex/Preprocessor.cpp1
2 files changed, 12 insertions, 6 deletions
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index 788b522612..6a5bb0fc3a 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -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();
diff --git a/Lex/Preprocessor.cpp b/Lex/Preprocessor.cpp
index 04b2a80f02..c1f4970f30 100644
--- a/Lex/Preprocessor.cpp
+++ b/Lex/Preprocessor.cpp
@@ -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>).