Вверх ↑
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2014-06-30 19:28:09 ЛС | профиль | цитата
Galkov писал(а):
Трогал. Я тебе привел свой код для CmdDiv, с условной компиляцией.
А ты ее убрал.
Не надо было убирать.

Хм, и правда, прошу прощения, почему-то в голове отложилось, что код писался методом копипасты, значит и правок условной компиляции не было.
Galkov писал(а):
Все я заметил. Два раза.
И сделал Вывод - Твой код ошибочный. Смотри внимательней.

Не понимаю, что не так. Тестовые формулы проходит верно (например -1 * func(1, 2, 3)). Сам уже в который раз провожу построчную отладку - все правильно работает. Для примера возьмем cnt = 3, stack (пусть растет вправо) = 3 2 1.
1. В начальный момент FSP указывает на 1. Поэтому когда мы загоняем значение FSP^ в TData, мы считываем единицу.
2. Уменьшаем cnt на 1, т.к. один аргумент мы уже считали.
3. Потом начинается цикл. FSP по-прежнему указывает на первый аргумент (единицу).
4. Чтобы считать следующий аргумент, уменьшаем FSP, переходя к числу 2 (второй аргумент).
5. Загоняем аргумент в TData.
6. Уменьшаем cnt на 1. cnt = 1.
7. cnt > 0 = True, продолжаем цикл, уменьшаем FSP, теперь FSP^ = 3 (третий аргумент).
8. Считываем его и загоняем в TData.
9. Уменьшаем cnt, cnt = 0
10. Цикл кончился, FSP остался на третьем аргументе (тройка).
11. Происходит считывание данных с внешней точки (не затрагивает стек).
12. Пишем FSP^ := <результат запроса>.
13. Имеем на стеке только одно число - результат запроса с внешней точки.

Вопрос: что не так?
карма: 10
0