Вот и мои 5 копеек
Всё же добил "кольцевание" и можно теперь при обнаружении замыкания на методе, вставлять альтернативный код а не лицезреть вылет среды.
Как это можно реализовать в С# я без понятия, но в purebasic вроде процедурами
Как работает:
Объявляем глобальную переменную (test) в hiSys.hws
Создаём массив в hiSys.hws с раннее объявленной переменной.
У элемента в каждом методе, необходимо прописать 2 переменные:
CP = 0
id = this.codename + '001' //001 порядковый номер функции.
В случае если id найден, прерываем цикл, присваиваем переменной CP число 1 и потом пишем альтернативный код, который будет печататься в случае кольцевания на этом методе:
for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание") // альтернативный код
end
end
В случае если в массиве id не найден, отрабатываем 2 код:
if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания") //основной код
event('onMessage')
test.remove(idx)
end
В итоге, вот эта конструкция из CNET:
Add(EntryPoint,2953706,21,105)
{
link(onCreate,8005088:doWork2,[])
}
Add(Message,1517918,77,105)
{
link(onMessage,14233384:doRandom,[])
}
Add(Random,14233384,126,105)
{
link(onRandom,8005088:doWork1,[(170,111)(170,102)(67,102)])
}
Add(HubEx,8005088,63,105)
{
link(onEvent,1517918:doMessage,[])
}
Коды
hiSys.hws
//----------------------- SYSTEM ----------------------------------
func create(entry)
gvar(blk_vars, blk_procedure, blk_body, blk_event_gadget, blk, test)
test = new array()
...
hiMessage.hws
func doMessage(data)
CP = 0
id = this.codename + '001'
for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание (doMessage)")
end
end
if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания (doMessage)")
event('onMessage')
test.remove(idx)
end
end
func doMessage2(data)
CP = 0
id = this.codename + '002'
for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание (doMessage2)")
end
end
if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания (doMessage2)")
event('onMessage')
test.remove(idx)
end
end
Сейчас вот думаю, как это всё оптимизировать а также о возможных проблемах в будущем