Хотелки

 

awarm

разработчик l2j-сервера
★★★
Возможность создания отдельного стека в рамках определения слова
оператор NDROP - drop n элементов с верхушки стека
оператор NOVER - копия N-ного элемента на верх стек
оператор NPOP@ - перемещение N-ного элемента на верх стека
оператор ALLDROP - полное очищение стека
 
+
-
edit
 

Balancer

администратор
★★★★★
>Возможность создания отдельного стека в рамках определения слова

Ага, я подумаю. Хотя, подсказка, обычно внутри слова используют стек возвратов :) Главное его привести к исходному виду до выхода из слова. Ну и с DO .. LOOP нужно быть осторожным - они кладут/снимают два параметра на стек возвратов.

>оператор NDROP - drop n элементов с верхушки стека

Понял. Сделано.

>оператор NOVER - копия N-ного элемента на верх стек

Стандартное слово PEEK.
0 PEEK - то же самое, что DUP
1 PEEK = OVER
Упс. Пардон. Во внутренних операциях над стеком было реализовано, но Форт-слова - не было. Добавил.

>оператор NPOP@ - перемещение N-ного элемента на верх стека

Стандартное слово ROLL (0 ROLL = NOP; 1 ROLL = SWAP; 2 ROLL = ROT), но у меня ещё не реализовано. Цикл крутить накладно, а как сдвинуть массив по другому пока не думал :)

>оператор ALLDROP - полное очищение стека

Было какое-то полустандартное слово. SP0!, что ли. Надо порыться, чтобы не размножать сущностей :)

Два вышеуказанных изменения только что внёс, но не тестировал.
 

awarm

разработчик l2j-сервера
★★★
нет. хочется именно отдельный стек.
переодически появляются непонятные значения в стеке.
К примеру после загрузки файла на стеке остается 1 8 1 8
а когда в цикле работаешь... вчера 2 раза сервак навернул :(
хотя локално тестировал - все ок.
именно поэтому хочется знать, что ты вызвал слово, оно отработало, без разницы, сколько раз оно внутри себя другие слова вызвало и что те оставили внутри себя на стеке, на выход пришел стек в том виде, в котором должен.

сделать можно допустим так
Оператор создания нового стека, далее все работает только с этим стеком для доступа к родительскому стеку оператор с префиксом. по окончании работы оператором переносим допустим N значений на родительский стек и очищаем/удаляем временный стек. указатель на дочерний стек можно хранить в самом родительском стеке.
Честно говоря я наверно еще и разленился, после себя подчищать стек тоже нужно, но вот только не всегда уверен в том, что там останется только то, что должно.
 
+
-
edit
 

Balancer

администратор
★★★★★
Хм. Если в стеке что-то непонятное остаётся - нужно искать ошибку. А не прикрывать её :D

А про альтернативный стек - подумаю :)
 
AD Реклама Google — средство выживания форумов :)

awarm

разработчик l2j-сервера
★★★
Оно-то так, но мне очень не хочется еще в чужих файлах копаться и разбираться в логике.
А так - сделал все что надо и почистил за собой. упрощается разработка на порядок
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru