История изменений
Исправление wandrien, (текущая версия) :
Если использовать метки блоков, вот так будет выглядеть алгоритм с вручную развёрнутым циклом.
Но пока метки блоков я не реализовал.
attribute(hot)
word FindInNamespace(char @Name; word pNamespace)
when pNamespace >= nDict:
StopInternal(__FILE__, __LINE__);
word hash = str_hash(@Name);
word P = Dict[pNamespace].pFirst;
label outer:
forever loop
label inner:
forever loop
when P >= nDICT:
exit outer;
when Dict[P].Name.Hash == hash:
exit inner;
P = Dict[P].pNext;
when P >= nDICT:
exit outer;
when Dict[P].Name.Hash == hash:
exit inner;
P = Dict[P].pNext;
end:inner
if str_eq(@DictGetName(P), @Name) then
return DictResolveAlias(P);
end
P = Dict[P].pNext;
end:outer
return nDICT;
end
Исходная версия wandrien, :
Если использовать метки блоков, вот так будет выглядеть алгоритм с развёрнутым циклом.
Но пока метки блоков я не реализовал.
attribute(hot)
word FindInNamespace(char @Name; word pNamespace)
when pNamespace >= nDict:
StopInternal(__FILE__, __LINE__);
word hash = str_hash(@Name);
word P = Dict[pNamespace].pFirst;
label outer:
forever loop
label inner:
forever loop
when P >= nDICT:
exit outer;
when Dict[P].Name.Hash == hash:
exit inner;
P = Dict[P].pNext;
when P >= nDICT:
exit outer;
when Dict[P].Name.Hash == hash:
exit inner;
P = Dict[P].pNext;
end:inner
if str_eq(@DictGetName(P), @Name) then
return DictResolveAlias(P);
end
P = Dict[P].pNext;
end:outer
return nDICT;
end