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