3.1 - Стек
В Lua используется виртуальный стек для обмена данными с С-кодом. Каждый
элемент этого стека представлен в Lua значением (nil,
число, строка и т.п.).
Когда из Lua вызывается C -код, вызываемая функция получает
новый стек, независимый от предыдущих стеков и стека С-функций. Изначально стек
содержит все аргументы для С-функции, вызывающая программа получает результат
вызова также из стека (смотрите lua_CFunction).
Для простоты, большинство вызовов API не придерживаются строгого алгоритма работы со стеком
(последний вошел – первый вышел). Напротив, любой элемент стека доступен по индексу:
положительное значение индекса обозначает абсолютную позицию в стеке
(начинающуюся с 1); отрицательное значение – смещение относительно вершины
стека. То есть, если в стеке n элементов, то индекс равный 1 означает
первый элемент (тот, который попал в стек первым), а индекс равный n – последний. Индекс -1 также указывает на последний элемент
стека, а индекс –n- первый.
Индекс является допустимым, если удовлетворяет условию: 1 ? abs(index) ? top.
|