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

なでしこv1のバグや要望を書き込む掲示板

@646■ (#2041) 「戻る」が戻りすぎる - うぇいく (2012-08-29 21:45) /低 未処理
【症状】グループ内関数(Method)をの呼び出しに「→」を使用して、その関数が「戻る」で終わらせた場合、関数呼び出しを1段多く戻る。
【再現方法】
以下を実行すると、「う」が表示されません。あ→いの中の戻るにて関数うからも抜けてしまいます。
■あ
 ・い~
  「い」と表示
  戻る

えとはあ

●う
 え→い
 「う」と表示



【要望】普通に。
【バージョン】1.53352
【その他】
上記再現ソースのうち、「 え→い」を、「 え→い()」にすると回避可能。→ではなく「えのい」と普通に呼び出すても正常。構文から関数と判断できないケースでうまく行かない模様。
himaparser.pasの4988あたりを、以下のようにすると治るものの、他への影響が心配(現在は、MethodのメンバーのNodeそのものが返る。この変更を行うと、Methodを引数なしで指定して「メソッドの参照」のようなことができなくなる。)
      svLinkGroup:
        begin
          group := Result;
          //if group = nil then Break;//敢えてエラーを出した方がシンプル
          FGroupScope := hi_group(group);
          Result := hi_group(group).FindMember(pe.groupMember);
          //--- 関数の場合がある
          if Result.VType = varFunc then
          begin
            Result := HiSystem.RunGroupMethod(group, Result, pe.Stack);
          end else
          begin
            if pe.Stack <> nil then raise HException.Create('『'+hi_id2tango(pe.groupMember)+'』は関数ではないのに引数があります。');
          end;
          //---
          pe := pe.NextElement;
        end;
「戻る」が戻りすぎる / うぇいく (2012-08-29 21:45) (#2041)/ 低 未処理
  追加補足(Setter/Geteer) / うぇいく (2012-09-01 16:17) (#2042)/ 低 未処理

(#2041)へ返信する:

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

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

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