なまじっかrepeat〜loop構造が破綻していても普通に流れてしまうので、余り使いたくは
ない方法ですね。普通にgoto型でも成立しますし。
後、バグありました。
#define DEF
#ifdef DEF
#undef repeat
#undef foreach
#undef loop
#undef continue
#undef break
#undef cnt
#define global repeat(%1=-1,%2=0) %tlpmod%i0%tlpcontinue%i0%tlpbreak%i0%tlpcnt%i=%2:%tlpcontinue*%p:if(%tlpcnt%p-%2 > ((%1)-1)&&(%1)>=0){goto %tlpbreak*%p}
#define global foreach(%1) %tlpmod%i0%tlpmodvar%i=vartype(%1):%tlpvar%i=length(%1):%tlpcontinue%i0%tlpbreak%i0%tlpcnt%i=0:%tlpcontinue*%p:if(%tlpcnt%p > ((%tlpvar%o)-1)){goto %tlpbreak*%p}if(%tlpmodvar%o=5){if(varuse(%1.%tlpcnt%p)=0){goto %tlpmod*%p}}
#define global foreach2(%1) %tlpmod%i0%tlpvar%i=length2(%1):%tlpcontinue%i0%tlpbreak%i0%tlpcnt%i=0:%tlpcontinue*%p:if(%tlpcnt%p > ((%tlpvar%o)-1)){goto %tlpbreak*%p}
#define global foreach3(%1) %tlpmod%i0%tlpvar%i=length3(%1):%tlpcontinue%i0%tlpbreak%i0%tlpcnt%i=0:%tlpcontinue*%p:if(%tlpcnt%p > ((%tlpvar%o)-1)){goto %tlpbreak*%p}
#define global foreach4(%1) %tlpmod%i0%tlpvar%i=length4(%1):%tlpcontinue%i0%tlpbreak%i0%tlpcnt%i=0:%tlpcontinue*%p:if(%tlpcnt%p > ((%tlpvar%o)-1)){goto %tlpbreak*%p}
#define global loop %tlpmod*%o:%tlpcnt%o++%tlpcontinue:goto *%o:%tlpbreak*%o
#define global continue %tlpcontinue:goto *%p
#define global break %tlpbreak:goto *%p
#define global cnt %tlpcnt%p
#endif
repeat 20
await 20
mes "A"+cnt
if cnt=10 : goto *a
continue
*a
mes "B"
continue
loop
初行の#define DEFをコメントにするとHSP本来のrepeat〜loop形式に戻ります。
新型continue命令がcntを増やしてくれないみたいです。