Size: a a a

2020 February 12

S

Snusmumriken in pro.lua
Но оно там длинное и не очень понятное, надо разбирать
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Собственно, примерно та же фигня, только я таки печатаю стеки в процессе каждого шага.
Если мало элементов запушил то не печатаю.
источник

S

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

S

Snusmumriken in pro.lua
Ну, я как раз про колбеки, когда ты такой:

for (int i = 0; i < сcallback; i++){
 struct foo * = callback[i];
 lua_getglobal(L, foo->funcname);
 lua_pushstring(L, foo->a);
 lua_pushstring(L, foo->b);
 lua_call(L, 2, 1);
 if(lua_isboolean(L, -1))  do_something();
}

Если тут ещё и количество аргументов разное, а при некоторых условиях мы заполняем стек аргументами но не вызываем функцию (например, её не существует, или при каких-то обстоятельствах нужно подставить вместо неё другую функцию с чуть другими аргументами) — ваще треш, со стеком начинает твориться куча странного.
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
А при стрёмной обработке может произойти что-то страшное.
Например, ты такой вызываешь луёвые функции пакетом, с разными аргументами. Часть аргументов может недоочищаться, и стек оказывается под угрозой переполнения.
У меня еще нет необходимости вызывать кучу функций, но стекдамп в коде есть https://github.com/iZarif/q2pro/blob/master/src/q2lua/q2lua.c#L30
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Ну, я как раз про колбеки, когда ты такой:

for (int i = 0; i < сcallback; i++){
 struct foo * = callback[i];
 lua_getglobal(L, foo->funcname);
 lua_pushstring(L, foo->a);
 lua_pushstring(L, foo->b);
 lua_call(L, 2, 1);
 if(lua_isboolean(L, -1))  do_something();
}

Если тут ещё и количество аргументов разное, а при некоторых условиях мы заполняем стек аргументами но не вызываем функцию (например, её не существует, или при каких-то обстоятельствах нужно подставить вместо неё другую функцию с чуть другими аргументами) — ваще треш, со стеком начинает твориться куча странного.
>например, её не существует
Проверять надо перед вызовом.
источник

S

Snusmumriken in pro.lua
Тут бывают очень, очень разные ситуации : )
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Ну, я как раз про колбеки, когда ты такой:

for (int i = 0; i < сcallback; i++){
 struct foo * = callback[i];
 lua_getglobal(L, foo->funcname);
 lua_pushstring(L, foo->a);
 lua_pushstring(L, foo->b);
 lua_call(L, 2, 1);
 if(lua_isboolean(L, -1))  do_something();
}

Если тут ещё и количество аргументов разное, а при некоторых условиях мы заполняем стек аргументами но не вызываем функцию (например, её не существует, или при каких-то обстоятельствах нужно подставить вместо неё другую функцию с чуть другими аргументами) — ваще треш, со стеком начинает твориться куча странного.
А если надо например коллбэки с разными аргументами звать - я наделаю кучу отдельных функций, у меня луашный стейт не торчит наружу, код кваки стараюсь не менять лишний раз :)
источник

S

Snusmumriken in pro.lua
Ну, с такими условиями норм.
источник

S

Snusmumriken in pro.lua
В моём случае, например, бывает вот такая фигня.
источник

S

Stunni in pro.lua
Знаешь в чем отличие группы по питону в телеге и этой?
источник

S

Stunni in pro.lua
В комьюнити*
источник

S

Snusmumriken in pro.lua
this->CallCallback — вызывает конкретный пользовательский колбек, именно для данного вызова
Friend:getAvatar('large', callback_func). И он проверяет, если эта функция вернула true — оставляет её на будущее. Но этого колбека может не быть.
this->CallUserFunction — вызов общеиспользуемого "глобального" колбека типа
steam.callback.avatarImageLoaded(friend, something)
Тут уже не надо ничего проверять, и в целом вызов другой.

И вот эти функции перетасовывают стек довольно активно.
источник

S

Snusmumriken in pro.lua
Ну например?
источник

S

Stunni in pro.lua
Здесь душевно что-ли
источник

S

Snusmumriken in pro.lua
Всё правильно, тут есть снус, который бьёт всех злых пока те не станут добрыми ))
источник

S

Stunni in pro.lua
Там шаг влево шаг вправо и варн
источник

S

Snusmumriken in pro.lua
В англо-международном чате по lua было примерно то же самое, пока на днях, местного главадмина не затыкали палками за самоуправство и узколобие (кикнул крутого чела за обсуждение луажыта, потому что "луажыт — не луа", и за косвенное обвинение в узкомыслии).
источник

S

Stunni in pro.lua
Ты затыкал?😂
источник

S

Snusmumriken in pro.lua
Не без этого
источник