view run/t/throw_07_B.d @ 1025:8516fcb66401

Exception handling is broken for delegates on Linux <mclysenk@mtu.edu> 2006-05-11 news:e3u2au$2l0c$1@digitaldaemon.com
author thomask
date Wed, 24 May 2006 16:23:57 +0000
parents
children b8c0195059d9
line wrap: on
line source

// $HeadURL$
// $Date$
// $Author$

// @author@	<mclysenk@mtu.edu>
// @date@	2006-05-11
// @uri@	news:e3u2au$2l0c$1@digitaldaemon.com

module dstress.run.t.throw_07_B;

int status;

class XException : Exception{
	this(char[] msg){
		super(msg);
	}
}

class Tester{
	this(void function() dg_){
		if(status++ != 0){
			assert(0);
		}
		dg = dg_;
	}
	
	void function() dg;
	
	void test() {
		if(status++ != 1){
			assert(0);
		}
		dg();

		assert(0);
	}
}

void foo(){
	try{
		if(status++ != 2){
			assert(0);
		}
		throw new XException("test2");

		assert(0);
	}catch(XException e){
		if(status++ != 3){
			assert(0);
		}
		throw e;
		assert(0);
	}finally{
		if(status++ != 4){
			assert(0);
		}
	}
	assert(0);
}

int main(){
	
	Tester t = new Tester(&foo);

	try{
		if(status++ != 5){
			assert(0);
		}
		t.test();
		assert(0);
	}catch(XException e){
		if(status++ != 6){
			assert(0);
		}
	}finally{
		if(status++ != 7){
			assert(0);
		}
	}

	if(status != 8){
		assert(0);
	}
	return 0;
}