[cfe-dev] Objective-C Message Send Generation
Chris Lattner
clattner at apple.com
Fri Feb 29 09:22:00 PST 2008
On Feb 29, 2008, at 7:16 AM, David Chisnall wrote:
> I'll keep these in my local copy because they let me compile simple
> Objective-C programs without hitting aborts, and add the missing
> bits, but I've removed them from the diff.
Ok! Thanks again for working on this by the way.
Here are some more picky details :)
--- CGObjCRuntime.h (revision 0)
+++ CGObjCRuntime.h (revision 0)
@@ -0,0 +1,46 @@
+#ifndef __CODEGENOBJC_H_INCLUDED__
+#define __CODEGENOBJC_H_INCLUDED__
Please use a name that isn't in the implementation namespace, for
example CLANG_CODEGEN_OBCJRUNTIME_H like the other headers.
+#include "clang/AST/AST.h"
+#include "clang/AST/Expr.h"
+
+#include "llvm/Constants.h"
+#include "llvm/Function.h"
+#include "llvm/GlobalVariable.h"
+#include "llvm/Intrinsics.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/LLVMBuilder.h"
+#include "llvm/Module.h"
Please don't #include headers redundantly (Module.h pulls in
function.h, for example). Also, please use forward definitions of
classes to avoid #including as much as possible. In this case, you
should be able to fwd declare all the llvm classes you use.
+using llvm::Value;
Headers shouldn't have "using", this pollutes the namespace of the
file that includes it.
+ //TODO: Make this selectable at runtime
+ Runtime = ObjCDefaultRuntime(M);
+}
This object needs to be deleted in ~CodeGenModule().
+ Function *SelFunction = TheModule.getFunction("sel_get_uid");
+ // If we haven't got the selector lookup function, look it up now.
+ // TODO: Factor this out and use it to implement @selector() too.
+ if(SelFunction == 0) {
+ std::vector<const llvm::Type*> Str(1,
....
+ }
This code can be simplified through the use of the
Module::getOrInsertFunction method. Something like this should work:
PtrToInt8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
llvm::Constant *SelFunction =
TheModule.getOrInsertFunction("sel_get_uid", PtrToInt8Ty, NULL);
A similar approach can simplify creation of the objc_msg_lookup
function.
+ // Call the method
+ for(size_t i=0 ; i<ArgC ; i++) {
+ lookupArgs.push_back(ArgV[i]);
+ }
This loop can be replaced with:
lookupArgs.insert(lookupArgs.end(), ArgV, ArgV+ArgC);
Otherwise, looks great! Thanks for working on this David!
-Chris
More information about the cfe-dev
mailing list