diff --git a/src/globals.h b/src/globals.h index eb849b9dadc0..c4359b3a12d5 100644 --- a/src/globals.h +++ b/src/globals.h @@ -63,6 +63,7 @@ struct Param bool isOpenBSD; // generate code for OpenBSD bool isSolaris; // generate code for Solaris bool mscoff; // for Win32: write COFF object files instead of OMF + bool objc; // for OSX (for now): support for Objective-C methods char useDeprecated; // 0: don't allow use of deprecated features // 1: silently allow use of deprecated features // 2: warn about the use of deprecated features diff --git a/src/magicport.json b/src/magicport.json index d766de7e79b7..c85dd3501ee8 100644 --- a/src/magicport.json +++ b/src/magicport.json @@ -139,9 +139,7 @@ "function objc_FuncDeclaration_semantic_setSelector", "function objc_isUdaSelector", "function objc_FuncDeclaration_semantic_validateSelector", - "function objc_FuncDeclaration_semantic_checkLinkage", - "function objc_tryMain_dObjc", - "function objc_tryMain_init" + "function objc_FuncDeclaration_semantic_checkLinkage" ], "extra" : [ "extern(C++) void objc_initSymbols();" diff --git a/src/mars.c b/src/mars.c index 598243ff18da..9a50a69949e7 100644 --- a/src/mars.c +++ b/src/mars.c @@ -72,6 +72,9 @@ void parseConfFile(StringTable *environment, const char *path, size_t len, unsig void genObjFile(Module *m, bool multiobj); void genhelpers(Module *m, bool iscomdat); +// in objc_glue.c +void objc_initSymbols(); + /** Normalize path by turning forward slashes into backslashes */ const char * toWinPath(const char *src) { @@ -1066,6 +1069,8 @@ Language changes listed by -transition=id:\n\ global.params.debuglibname = global.params.defaultlibname; #if TARGET_OSX + if (global.params.is64bit) + global.params.objc = true; global.params.pic = 1; #endif @@ -1194,7 +1199,9 @@ Language changes listed by -transition=id:\n\ VersionCondition::addPredefinedGlobalIdent("D_NoBoundsChecks"); VersionCondition::addPredefinedGlobalIdent("D_HardFloat"); - objc_tryMain_dObjc(); + + if (global.params.objc) + VersionCondition::addPredefinedGlobalIdent("D_ObjectiveC"); // Initialization Lexer::initLexer(); @@ -1203,11 +1210,16 @@ Language changes listed by -transition=id:\n\ Module::init(); Target::init(); Expression::init(); - objc_tryMain_init(); initPrecedence(); builtin_init(); initTraitsStringTable(); + if (global.params.objc) + { + objc_initSymbols(); + ObjcSelector::init(); + } + if (global.params.verbose) { fprintf(global.stdmsg, "binary %s\n", global.params.argv0); fprintf(global.stdmsg, "version %s\n", global.version); diff --git a/src/objc.c b/src/objc.c index b4c1c6938654..45da5d9062f1 100644 --- a/src/objc.c +++ b/src/objc.c @@ -26,7 +26,6 @@ #include "visitor.h" void mangleToBuffer(Type *t, OutBuffer *buf); -void objc_initSymbols(); // MARK: Objc_ClassDeclaration @@ -140,19 +139,6 @@ void objc_FuncDeclaration_semantic_checkLinkage(FuncDeclaration *fd) fd->error("must have Objective-C linkage to attach a selector"); } -// MARK: init - -void objc_tryMain_dObjc() -{ - VersionCondition::addPredefinedGlobalIdent("D_ObjectiveC"); -} - -void objc_tryMain_init() -{ - objc_initSymbols(); - ObjcSelector::init(); -} - // MARK: Selector StringTable ObjcSelector::stringtable; diff --git a/src/objc.di b/src/objc.di index 7703830867b0..5cf2f1068f7e 100644 --- a/src/objc.di +++ b/src/objc.di @@ -55,5 +55,3 @@ extern (C++) void objc_FuncDeclaration_semantic_setSelector(FuncDeclaration fd, extern (C++) bool objc_isUdaSelector(StructDeclaration sd); extern (C++) void objc_FuncDeclaration_semantic_validateSelector(FuncDeclaration fd); extern (C++) void objc_FuncDeclaration_semantic_checkLinkage(FuncDeclaration fd); -extern (C++) void objc_tryMain_dObjc(); -extern (C++) void objc_tryMain_init(); diff --git a/src/objc.h b/src/objc.h index 4bd773a2d197..3bceab11320a 100644 --- a/src/objc.h +++ b/src/objc.h @@ -72,7 +72,5 @@ bool objc_isUdaSelector(StructDeclaration *sd); void objc_FuncDeclaration_semantic_validateSelector(FuncDeclaration *fd); void objc_FuncDeclaration_semantic_checkLinkage(FuncDeclaration *fd); -void objc_tryMain_dObjc(); -void objc_tryMain_init(); #endif /* DMD_OBJC_H */ diff --git a/src/objc_glue_stubs.c b/src/objc_glue_stubs.c index 7f72b47c1812..433b74c81ff3 100644 --- a/src/objc_glue_stubs.c +++ b/src/objc_glue_stubs.c @@ -17,6 +17,11 @@ class Type; class TypeFunction; struct elem; +void objc_initSymbols() +{ + // noop +} + void objc_callfunc_setupEp(elem *esel, elem **ep, int reverse) { // noop diff --git a/src/objc_stubs.c b/src/objc_stubs.c index 736cc92a93c9..37f138269b7d 100644 --- a/src/objc_stubs.c +++ b/src/objc_stubs.c @@ -28,6 +28,12 @@ ObjcSelector::ObjcSelector(const char *sv, size_t len, size_t pcount) assert(0); } +void ObjcSelector::init() +{ + printf("Should never be called when D_OBJC is false\n"); + assert(0); +} + ObjcSelector *ObjcSelector::lookup(const char *s) { printf("Should never be called when D_OBJC is false\n"); @@ -107,12 +113,3 @@ void objc_FuncDeclaration_semantic_checkLinkage(FuncDeclaration *fd) // noop } -void objc_tryMain_dObjc() -{ - // noop -} - -void objc_tryMain_init() -{ - // noop -} diff --git a/src/objc_stubs.d b/src/objc_stubs.d index 6e00ba7bcb9e..088e6330737e 100644 --- a/src/objc_stubs.d +++ b/src/objc_stubs.d @@ -85,12 +85,3 @@ extern (C++) void objc_FuncDeclaration_semantic_checkLinkage(FuncDeclaration fd) // noop } -extern (C++) void objc_tryMain_dObjc() -{ - // noop -} - -extern (C++) void objc_tryMain_init() -{ - // noop -}