Can't get Objective-C class method to compile.

Jeremie Pelletier via Digitalmars-d digitalmars-d at puremagic.com
Wed Dec 30 19:43:58 PST 2015


Hello, I'm trying out the new interface to Objective-C and I 
can't get this to compile:

     module main;

     extern (Objective-C) {
         interface NSObject {
             void release() @selector("release");
         }

         interface NSString : NSObject {
             const(char)* UTF8String() @selector("UTF8String");
         }

         interface NSProcessInfo : NSObject {
             static NSProcessInfo processInfo() 
@selector("processInfo");

             NSString operatingSystemVersionString()
                 @selector("operatingSystemVersionString");
         }
     }


     void main() {
         import std.stdio;

         auto str = 
NSProcessInfo.processInfo.operatingSystemVersionString;
         writeln(str.UTF8String);
         str.release();
     }

I used the following command line:

> dmd main.d -L-framework -LFoundation

I'm running the latest dmd (2.069.2) and it exits after printing 
this message:

> Assertion failed: (ethis), function 
> objc_callfunc_setupMethodCall, file objc_glue.c, line 276.
> Abort trap: 6

This is from the class method call to NSProcessInfo.processInfo.

I've tried without the selector but get a linker error on 
__D4main13NSProcessInfo11processInfoYZC4main13NSProcessInfo.

I'm not sure if it is a bug or if I'm not using it correctly so 
I'm asking here before opening a bug report :)


More information about the Digitalmars-d mailing list