On 2015-12-14 20:20, Mike McKee wrote:

Oh, I found I could do:

$ sudo brew update
$ sudo brew upgrade dmd

Alternatively you can install DMD using DVM [1].

Now it generates this error:

$ dmd -m64 -L-framework -LFoundation test.d
test.d(6): Error: undefined identifier 'selector'
test.d(12): Error: undefined identifier 'selector'
test.d(13): Error: undefined identifier 'selector'

Here's the source I'm trying to compile, and evidently it doesn't like
@selector for some reason:

// test.d
module main;

extern (Objective-C)
interface Class
{
     NSString alloc() @selector("alloc");
}

extern (Objective-C)
interface NSString
{
     NSString initWithUTF8String(in char* str)
@selector("initWithUTF8String:");
     void release() @selector("release");
}

extern (C) void NSLog(NSString, ...);
extern (C) Class objc_lookUpClass(in char* name);

void main()
{
     auto cls = objc_lookUpClass("NSString");
     auto str = cls.alloc().initWithUTF8String("Hello World!");
     NSLog(str);
     str.release();
}

Hmm, that should work. @selector is defined in core.attributes which should be imported automatically through the object module. Perhaps the compiler doesn't pick up the correct version of druntime.

Could you please add "-v" do the command line when compiling. Look in the beginning of the output for "import object". If you open the "object" module, it should contain a line like this, in the beginning of the file (line 52 for me) :

version (D_ObjectiveC) public import core.attribute : selector;

Then in the "attribute" module (which should come right after the "object" module in the output) should contain this, in the bottom of the file:

version (D_ObjectiveC) struct selector
{
    string selector;
}

My output with the "-v" flag looks like this:

$ dmd -v main.d
binary    dmd
version   v2.069.1
config    /Users/jacob/.dvm/compilers/dmd-2.069.1/osx/bin/dmd.conf
parse     main
importall main
import object (/Users/jacob/.dvm/compilers/dmd-2.069.1/osx/bin/../../src/druntime/import/object.d) import core.attribute (/Users/jacob/.dvm/compilers/dmd-2.069.1/osx/bin/../../src/druntime/import/core/attribute.d) import std.stdio (/Users/jacob/.dvm/compilers/dmd-2.069.1/osx/bin/../../src/phobos/std/stdio.d)

You can also see the config file used in the beginning of the output above. That tells the compiler where do find the druntime.

Please try all these commands directly on the command line without using Xcode in anyway.

[1] https://github.com/jacob-carlborg/dvm

--
/Jacob Carlborg

Reply via email to