onitama/OpenHSP

#define の特殊展開マクロのバグ

Closed this issue · 1 comments

どうやら、repeat loop間で呼び出されたスタックの呼び出し命令が無視されています。

コード例

#define ctype add(%1) %tstack %s1 mes "add " + %1
#define opt %tstack mes "opt " + %o

	add("1")
	add("2")
	add("3")
	add("4")
	add("5")

	repeat 5
		opt
	loop

エラーメッセージ

#HSP script preprocessor ver3.6beta3 / onion software 1997-2020(c)
#Use file [hspdef.as]
#Use file [dish_enhance.as]
#1 unresolved macro(s).[ss.hsp]
        stack
#Fatal error reported.

#defineで定義される特殊展開マクロは、プリプロセッサ命令ですので実行時ではなくソーススクリプトのコンパイル時に解釈されます。提示された例で言えば、addと同じ数だけoptが書かれていなければなりません。
どのような処理を想定しているかにもよりますが、実行時にスタックしたり取り出したりする用途には使用できません。