D1 & D2 discrepancy
    lanael 
    lanael at free.fr
       
    Fri Dec 23 01:12:13 PST 2011
    
    
  
The following piece of code compiles without error on D1(1.072) & 
D2(2.057).
However the D2 version doesn't run fine. ( output below )
---------------------------->8----------------------------
abstract class Receiver(M) {
	this() { Broadcaster!(M).register(this); }
	~this() { Broadcaster!(M).unregister(this); }
	abstract void onMessage( M message );
}
abstract class Emitter(M) {
	void emit(M message) { Broadcaster!(M).broadcast(message); }	
}
static class Broadcaster(M) {
	private static Receiver!(M)[string] mReceivers;
	public static void register( Receiver!(M) receiver ) {
		mReceivers[receiver.toString()] = receiver;
	}
	public static void unregister( Receiver!(M) receiver ) {
		mReceivers.remove(receiver.toString());
	}
	public static void broadcast( M message ) {
		foreach( ref receiver; mReceivers ) {
			receiver.onMessage( message );
		}
		delete message;
	}
}
//================================================== import 
std.stdio;
void main() {
	class TestMessage {
		this( string m ) { stringAttribute = m; }
		string stringAttribute;
	}
	class TestReceiver1: Receiver!(TestMessage) {
		this() { super(); }
		override void onMessage( TestMessage m ) {
			writefln( "receiver 1 :", m.stringAttribute );
		}
	}
	class TestReceiver2: Receiver!(TestMessage) {
		this() { super(); }
		override void onMessage( TestMessage m ) {
			writefln( "receiver 2 :", m.stringAttribute );
		}
	}
	class TestEmitter: Emitter!(TestMessage) {
		void send() {
			emit( new TestMessage("Hey") );
		}
	}
	auto e = new TestEmitter;
	auto r1 = new TestReceiver1;
	auto r2 = new TestReceiver2;
	e.send;
	delete r2;
	e.send;
}
----------------------------8<----------------------------
* Output of the D1 version :
receiver 1 :Hey
receiver 2 :Hey
receiver 1 :Hey
* Output of the D2 version :
receiver 1 :
receiver 2 :
receiver 1 :
Is this a bug or something stupid on my part ?
    
    
More information about the Digitalmars-d
mailing list