【症状】グループ内関数(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;