「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@620) [中] [未処理]
@620■ (#1958) ハッシュ@「キー」で条件分岐しようとした時にエラーとなる - とけい (2012-03-11 19:05) /中 未処理
【症状】
 ハッシュ@「キー」で条件分岐 しようとした時にエラーとなる
【再現方法】
 //サンプルソース
 (A@「テスト」)で条件分岐 //存在しないキーで条件分岐させる
  0ならば、0を表示

エラーメッセージ
 [エラー] com.nadesi.exe.nakopad.temp.nako6.bak(1): モジュール 'dnako.dll' の
 アドレス 00F9A28E でアドレス 00000000 に対する読み込み違反がおきました。(条件分岐)

【バージョン】1.5331

(#1959) 条件分岐の「ならば」でも同様のようです - うぇいく (2012-03-12 16:37) /中 未処理
ざっと見てみたところ、「ならば」の方に指定する値でも同じようにエラーとなるようです。
(以下、何も無いことを、nilと表現しています)

特定の型として参照する構文においては、ケアがされているようです。
・「もし」等の真偽値(Bool値)として評価する構文では、nilは、偽として扱う。
・「ループ回数」等の整数値(int)として評価する構文では、nilは、0として扱う。
・「言う」等の文字列として評価する構文では、nilは、「」(長さ0の文字列)として扱う。
ところが、任意の型を受け付ける「条件分岐」とその「ならば」ではnilに対するケアがおこなれていないようです。
修正が行なわれる場合に備えて、どう動作するのが望ましい(ユーザが思っている動作に近い)かの情報が有ると良さそうです。以下、私は考えです。

「条件分岐」がnilの場合
  整数値の0として扱う。結果として、偽や0や「」(長さ0の文字列)とも一致する。

「ならば」がnilの場合
  整数値の0として扱う。結果として、偽や0や「」とも一致する。

(システム的には、「いずれとも一致しない」(「違えば」があれば、それを実行する)のが実装は楽そう)
開発者向け情報。修正は、hima_parser.pasのTSyntaxSwitch.getValue(7356辺り)の
      vKekka := hi_var_calc_Eq(vJouken, vCase);
の手前辺りでケアすると良さそう。

(#1958)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能