Size: a a a

2019 November 16

S

Snusmumriken in pro.lua
Можно
источник

DF

Dollar Føølish in pro.lua
Но если я правильно понимаю все это просто проеб С апи
источник

DF

Dollar Føølish in pro.lua
Вся ета история
источник

S

Snusmumriken in pro.lua
Да нет, это нормальная ситуация. Надо куда-то сохранить луёвую функцию чтобы потом её вызвать.
источник

S

Snusmumriken in pro.lua
Можно сохранить ссылку на функцию в сишной структуре (или в мапе), но это не интересно.
источник

DF

Dollar Føølish in pro.lua
Сишную уже функцию т.е.?
источник

S

Snusmumriken in pro.lua
Нет, луёвую.
источник

DF

Dollar Føølish in pro.lua
Аа
источник

I

Igor725 in pro.lua
А как вообще lua-функция в машине представляется? В код сейчас просто залезть не могу и посмотреть
источник

S

Snusmumriken in pro.lua
Dollar Føølish
Сишную уже функцию т.е.?
Потом вытряхнешь её из луёвого регистра через
lua_rawgeti(L, LUA_REGISTRYINDEX, pointer_to_lua_func);
И вот она в стеке, можно вызывать.
источник

DF

Dollar Føølish in pro.lua
Понятно, спасибо
источник

S

Snusmumriken in pro.lua
Igor725
А как вообще lua-функция в машине представляется? В код сейчас просто залезть не могу и посмотреть
Как байткод и указатель на него. Помнится, что-то типа той же сишной структуры или чего-то такого, но я могу ошибаться.
источник

DF

Dollar Føølish in pro.lua
Ну структура может быть и из двух полей так то
источник

I

Igor725 in pro.lua
Надо будет как-нибудь выкроить времени кучку и залезть поглубже в lua машину, посмотреть, как там да что
источник

S

Snusmumriken in pro.lua
А. Самая полезная функция при работе с C-api:
void luax_printstack(lua_State * L) {
 std::cout << "Stack start: " << std::endl;
 for (int i = 1; i <= lua_gettop(L); i++) {
   std::cout << "  " << i << " - " << luaL_typename(L, i);
   int t = lua_type(L, i);

   switch (t) {
   case LUA_TSTRING:
     std::cout << " " << std::string(lua_tostring(L, i)).substr(0, 30);
   case LUA_TBOOLEAN:
     std::cout << " " << (lua_toboolean(L, i) ? "true" : "false");
   case LUA_TNUMBER:
     std::cout << " " << lua_tonumber(L, i);
   }
   std::cout << std::endl;
 }
}

Просто вывод содержимого стека. Если это числа/строки — вывод и их.

Для плюсов, но легко адаптируется.
источник

I

Igor725 in pro.lua
Ага. У меня уже есть подобная
источник

S

Snusmumriken in pro.lua
Намана
источник

DF

Dollar Føølish in pro.lua
Есть же сол
источник

DF

Dollar Føølish in pro.lua
Если плюсы
источник

S

Snusmumriken in pro.lua
Сол — это отдельное костылестроение ))
Лично я не люблю эту фигню тем, что надо изучать её полностью, чтобы более-менее понимать что происходит. Но кому-то нравится. Ещё есть tolua, с тем же результатом.
источник