Есть две проблемы. lua_istable(inOutState, index)
неверно, поскольку index
не является значением ключа, полученного с помощью next
. Этот индекс всегда является таблицей, по которой вы перебираете. Таким образом, вы будете бесконечно рекурсировать по одной и той же таблице, когда вы будете вызывать setData
с этим индексом.
Фактически, передача index
в setData
сама по себе почти наверняка неправильна. Или, по крайней мере, это, вероятно, не правильно. Здесь вы хотите использовать относительные индексы, но вызов next
помещает дополнительное значение в стек.
То, что вы, вероятно, хотите сделать, - это setData
предположить, что таблица для перебора имеет индекс -1 (ie: вершина стека). Таким образом, вы просто звоните lua_next(state, -2)
(это -2, потому что ключ для получения следующего находится сверху). И когда вы рекурсивно вызываете setData
для табличного значения, вам не нужно указывать индекс, потому что табличное значение уже находится на вершине стека.
Вторая проблема заключается в том, что вы никогда не пишете пары ключ / значение. Вы также никогда не проверяете, является ли значение чем-то, что может быть преобразовано в строку. Это могут быть Lua userdata.