HSP HSPで例外(マクロ)

このエントリーをはてなブックマークに追加このエントリのはてなブックマーク数このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをつぶやく

マクロで実装。
その特性上、関数やサブルーチン内から外に向けたthrowは行えません。(内部で例外ブロックを使用することは可能。)
また、finallyの実装が完全ではありません。
finallyの実行はcatchの後となり、またtryやcatch内でgotoやbreak、returnなどを実行した場合にはfinallyは実行されません。

#define global try %tException %i=0:%i=0:if'%i'
#define global finally %tException if 1
#define global ctype catch(%1) %tException *%o:%1=%o:if %o
#define global throw(%1) %tException %p1=%1:%p2=1:goto*%p0

	mes "--------------------"

	try {
		mes "--try1"
		throw 1234567
		// throw "Test"
	} catch(e) {
		mes "--catch1 " + e
	} finally {
		mes "--finally1"
	}

	mes "--------------------"

	try {
		mes "--try2"
		// throw 1234567
		throw "Test"
	} catch(e) {
		mes "--catch2 " + e
	} finally {
		mes "--finally2"
	}

	mes "--------------------"

	try {
		mes "--try3"
		// throw 1234567
		// throw "Test"
	} catch(e) {
		mes "--catch3 " + e
	} finally {
		mes "--finally3"
	}

	mes "--------------------"

	try {
		mes "--try4"
		throw 1.234567
	} catch(e) {
		mes "--catch4 " + e
	}

	mes "--------------------"

	try {
		mes "--try5"
	} catch(e) {
		mes "--catch5 " + e
	}

	mes "--------------------"

	stop

Posted by at 2015/6/21 0:24

よく投稿されているコード

タグ

最近投稿されたコード