Hi,

I would like to refactor the code in DMD for the Objective-C integration. I’m 
mostly interested in replacing the way used to determine if the Objective-C 
integration should be enabled or not.

This is currently done in the makefile by either adding a file containing the 
code for the Objective-C integration or a stub implementation for the targets 
that does not support the Objective-C integration. Since this is determined at 
build time (of the compiler) this does not work well with cross-compiling, LDC 
have all targets enabled by default.

I would like to change this to determine if the Objective-C integration should 
be enabled or not at runtime (of the compiler). I was thinking I could do that 
by having an interface with two classes implementing the interface. One which 
is used when the Objective-C integration should be enabled and one when it 
should be disabled. Example:

__gshared Objc objc;

void initialize()
{
    objc = global.params.hasObjectiveC ? new Supported : new Unsupported;
}

interface Objc
{
    void setObjc(ClassDeclaration cd);
}

final class Unsupported : Objc
{
    void setObjc(ClassDeclaration cd)
    {
        cd.error("Objective-C classes not supported");
    }
}

final class Supported : Objc
{
    void setObjc(ClassDeclaration cd)
    {
        cd.objc.objc = true;
    }
}

Does this sound like an acceptable solution or are there better alternatives? 
I’m also open to suggestions for better names for the classes.

—
/Jacob Carlborg
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to