>ちょっとメルマガをやってみようかと意気込んでみました。
hatterさん、メルマガを見させてもらいました。
なかなかいい感じだと思います。
登録するかどうかは、もう少し考えてみようと思います。
>エラー処理、例外処理、到達できないコードなどを希望します。
gmさん、例外処理なら「HSP 例外」でググればありましたよ。
HSPには例外処理機構が無いので、マクロで実装していました。
↓以下参考URL
http://ja.doukaku.org/comment/8783/
稚拙なスクリプトですが、確認用にスクリプトを作成したので
載せておきます。
(ほんとは、Java準拠の形式にしたかったのですが、
余計なもの[try_end]が付いちゃいました^^;)
おそらくもっと上手く作れるのだと思います。
よろしければご教授お願いいたしますm(__)mペコリ
//====================================================================================================
// ファイル名:SampleHsp000.hsp
// 内 容:HSP用例外処理機構
// 作 成 者:テック
// 更 新 者:テック
// 作 成 日:2010/05/01
// 更 新 日:2010/05/01
// 履 歴:2010/05/01 新規作成
// メ モ:特殊マクロについて
// 詳しくは、HSP Document Libraryの#defineのページにて
// マクロ:機能
// %t :タグ名を設定する
// %n :ユニークなラベル名を生成する
// %i :ユニークなラベル名を生成し、スタックに積む
// %o :スタックに積まれた文字列を取り出す
// %p :スタックに積まれた文字列を取り出す(スタック維持)
// %s :引数パラメータをスタックに積む
// %c :改行を行う
//====================================================================================================
// コンパイル時の設定を行う
#cmpopt ppout 1 // プリプロセッサファイルを出力する
//==================== マクロの宣言 ====================//
// try文(ユニークなラベル名を生成し、スタックに積む。
// かつ 必ず通るif文を定義する)
// スタック0(%p0):throw文のパラメータ保持
// スタック1(%p1):ユニークなラベル名
#define global try %tExceptionHandle %i0 %i0 if(1)
// try_end文(スタックを維持しながら、ラベルを生成する)
#define global try_end %tExceptionHandle *%p1 %c
// finally文(スタックから展開せず取り出し、必ず通るif文を定義する)
#define global finally %tExceptionHandle %o0 %o0 if(1)
// catch文(throwされた型が同じ場合に通るif文を定義する)
#define global ctype catch(%1, %2) %tExceptionHandle \
%2 = %p0 %c \
if (vartype(%p0) == vartype("%1"))
// throw文(スタック0に引数を設定し、ラベルにジャンプする)
#define global throw(%1) %tExceptionHandle \
%p0 = %1 %c \
goto *%p1 %c
// HSPのエントリーポイント
// 引数
// なし
// 戻り値
// なし
try {
mes "try1"
throw 2147256
}
try_end
catch(int, nException) {
mes "int : " + nException
}
catch(str, strException) {
mes "str : " + strException
}
finally {
mes "finally1"
}
try {
mes "try2"
// throw 2147256
throw "Test"
}
try_end
catch(int, nException) {
mes "int : " + nException
}
catch(str, strException) {
mes "str : " + strException
}
finally {
mes "finally2"
}
stop