@@ -27,7 +27,7 @@ struct objd_bridge(Allowed...){
2727*/
2828pragma (inline)
2929To __bridge (To, From)(From from) @nogc @trusted pure {
30- static assert (objd_sym_bridgable ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
30+ static assert (objd_can_bridge ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
3131
3232 return * cast (To* )&from;
3333}
@@ -44,7 +44,7 @@ To __bridge(To, From)(From from) @nogc @trusted pure {
4444*/
4545pragma (inline)
4646To __bridge_retained (To, From)(From from) @nogc @trusted pure if (is (To : NSObjectProtocol)) {
47- static assert (objd_sym_bridgable ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
47+ static assert (objd_can_bridge ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
4848
4949 return cast (To)CFBridgingRetain(* cast (From* )&from);
5050}
@@ -61,7 +61,7 @@ To __bridge_retained(To, From)(From from) @nogc @trusted pure if (is(To : NSObje
6161*/
6262pragma (inline)
6363To __bridge_transfer (To, From)(From from) @nogc @trusted pure if (is (To : CFTypeRef)) {
64- static assert (objd_sym_bridgable ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
64+ static assert (objd_can_bridge ! (To, From), From.stringof~ " can't safely be bridged to " ~ To.stringof~ " !" );
6565
6666 return cast (To)CFBridgingRelease(* cast (From* )&from);
6767}
@@ -91,23 +91,23 @@ private:
9191extern (C ) extern void * CFBridgingRetain(void * ); // To CF
9292extern (C ) extern void * CFBridgingRelease(void * ); // From CF
9393
94- template objd_sym_bridgable (To, From) {
94+ template objd_can_bridge (To, From) {
9595 alias toUda = getUDAs! (To, objd_bridge);
9696 alias fromUda = getUDAs! (From, objd_bridge);
97+ template __is_bridagable (ToCheck) {
98+ template __is_bridagable (T) {
99+ enum __is_bridagable = is (T == ToCheck);
100+ }
101+ }
97102
98- static if (toUda.length > 0 ) {
99- enum objd_sym_bridgable =
100- anySatisfy! (objd_is_bridagable! To, toUda[0 ].allowed) ||
101- anySatisfy! (objd_is_bridagable! From, toUda[0 ].allowed);
102- } else static if (fromUda.length > 0 ) {
103- enum objd_sym_bridgable =
104- anySatisfy! (objd_is_bridagable! To, fromUda[0 ].allowed) ||
105- anySatisfy! (objd_is_bridagable! From, fromUda[0 ].allowed);
106- } else enum objd_sym_bridgable = false ;
107- }
108-
109- template objd_is_bridagable (ToCheck) {
110- template objd_is_bridagable (T) {
111- enum objd_is_bridagable = is (T == ToCheck);
103+ static foreach (uda; AliasSeq! (fromUda, toUda)) {
104+ static if (
105+ ! is (typeof (objd_can_bridge) == bool ) &&
106+ (anySatisfy! (__is_bridagable! To, uda.allowed) ||
107+ anySatisfy! (__is_bridagable! From, uda.allowed))
108+ ) enum objd_can_bridge = true ;
112109 }
110+
111+ static if (! is (typeof (objd_can_bridge) == bool ))
112+ enum objd_can_bridge = false ;
113113}
0 commit comments