View Issue Details

Category
整備班:YAYA
SeveritycrashReproducibilityalways 
Status assigned 
Summary0000665: 辞書内に存在しない関数を呼び出すコードがある場合、引数が指定されていると起動時にエラーとなり起動に失敗する。
DescriptionWindows 11 24H2
SSP/2.6.91
YAYA/Tc571-11

ISFUNC() を使用し関数の存在チェックを行ってから当該関数を呼び出すような辞書で、
対象の関数呼び出しに引数が指定されている場合、起動時に辞書エラーとなり起動に失敗します。
引数指定が無い場合は正常に起動できました。

tamaで確認したところ、「 E0071 : 存在しない関数を実行しようとしています.」が出力されていました。

サンプルコードを添付します。
適当なYAYAゴーストに投げ込んでください。
17行目のコメントアウトを外すと起動時にエラーとなります。
TagsNo tags attached.
Attach Tags
Attached Files
yaya_testcode.dic (1,280 bytes)   
//******************************************************************************
// 存在しない関数呼び出しに引数指定があると起動時エラーとなる再現用コード。
// 本ファイルを適当なYAYAゴーストに投げ込んでください。
// 17行目のコメントアウトを外すと起動時にエラーとなります。
//******************************************************************************
TestFunc
{
	//関数実行確認用
	res.MainFunc	= 'MainFuncは実行されませんでした。\n'
	res.SubFunc		= 'SubFuncは実行されませんでした。'

	//存在しない関数名を探す
	if ISFUNC('MainFunc'){
		//関数が存在しないのでここは実行されない。
		MainFunc()				//実行されないので実行時エラーは起きない。

		//MainFunc('Arg0')		//引数指定がある場合、起動時エラーとなる。
								//(コメントアウトを外すと再現できます)
	}
	else{
		//ここは実行される
		SubFunc()
	}

	SAVEVAR()

	res.MainFunc
	--
	res.SubFunc
}


//MainFuncなんてなかった
//MainFunc
//{
//	res.MainFunc = 'MainFuncが実行されました。\n'
//}


SubFunc
{
	res.SubFunc = 'SubFuncが実行されました。'
}
yaya_testcode.dic (1,280 bytes)   

Activities

guest

2025-01-19 02:37

reporter   ~0001535

追加情報です。
問題の部分全体を括って、EVAL() 関数に入れることでとりあえず問題は発生しなくなりました。

なぜ、存在しない関数を呼ぶコードが必要なのかは、配布ファイルに含めないデバッグ用コードや、
製作しているゴースト毎の固有部分のファイル分離に使用しています。

ponapalt

2025-01-20 17:02

administrator   ~0001536

これ、確かEVALで包むやりかたが正当で、引数がついた関数呼び出しが「読み込み時に」エラーになる仕様が正しかったはずです。

引数のない関数がエラーにならないのは、AYA4時代の互換機能かなにかだったと思います。

どちらもエラーが出るようにするのが、誤りの事前チェックとして望ましいと思います。

guest

2025-01-20 21:13

reporter   ~0001537

情報ありがとうございます。
過去の互換となると変更は難しそうですね。
引数有り無しどちらもエラーが出るなら気にしなかったのですが、引数付きだけエラーが出るので気になって調べてみたのですが有用な情報が得られず報告した次第です。
言われて見れば、確かに読込時点でのエラーチェックの方が安全だと思いますし、EVALすれば対応できるので仕様という事であればそのままでいいのかもしれません。

Add Note

View Status
Note
Upload Files
Maximum size: 1,953 KiB

Attach files by dragging & dropping, selecting or pasting them.

送信ボタンを押す前に / Before pushing "Send" button

  • スパム避けのためにパスワードが必要です。送信ボタンを押すとユーザー名とパスワードを聞かれますので、それぞれ "bts" と入力してください。
  • To send report, please input "bts" into username and password box in popup dialog.

Issue History

Date Modified Username Field Change
2025-01-17 01:11 guest New Issue
2025-01-17 01:11 guest File Added: yaya_testcode.dic
2025-01-19 02:37 guest Note Added: 0001535
2025-01-20 16:58 ponapalt Assigned To => ponapalt
2025-01-20 16:58 ponapalt Status new => assigned
2025-01-20 17:02 ponapalt Note Added: 0001536
2025-01-20 21:13 guest Note Added: 0001537