Для тестов:
https://dropmefiles.com/N8Ao0
[+] Introduced high-level loops in ERM via new receivers: !!re, !!br, !!co.
!!re$loop-counter-var/#counter-start-value = $loop-counter-var/#counter-stop-value = $loop-counter-var/#step = 1, if stop value is set, 0 otherwise.
...
!!en:;
Repeats block of code. Only the first argument is obligatory.
At first loop counter variable is initialized to either its own value or #counter-start-value.
#counter-stop-value and #step are remembered for the whole loop and won't be evaluated on each iteration.
#step determines, what value must be added to counter variable after each iteration. It also determines type of iteration termination condition.
Positive step check if counter > stop value. Negative step checks if counter < stop value.
#counter-stop-value determines, when iterations must be stopped.
On !!re it's checked, if counter reached stop-value or exceeds it. If true, execution is passed to corresponding !!en block.
On !!en counter is increased by step and if termination condition is not met, next receiver after closest !!re will be executed.
!!br (BREAK) with optional condition immediately jumps after loop !!en receiver.
!!co (CONTINUE) with optional condition immediately jumps to loop !!en receiver, which will be executed as usual.
Examples:
[*] Maximum 16 nested IF/RE blocks are allowed.
[-] Fixed crash due to invalid RD:M second parameter handling.
[-] Fixed 'for' snippet in ERM editor.