fix stack indexes

This commit is contained in:
Grzegorz Kowalski 2023-02-04 00:20:09 +01:00
parent 0d667035d3
commit 5f138b362b
5 changed files with 17 additions and 17 deletions

View File

@ -1,7 +1,7 @@
#include "object.h"
void *lut_getobj(lua_State *L, int n)
void *lut_getobj(lua_State *L, int idx)
{
LUT_LOG(TRACE, "Extracting object from userdata");
return *(void**)lua_touserdata(L, n);
return *(void**)lua_touserdata(L, idx);
}

View File

@ -4,6 +4,6 @@
#include <core/lua.h>
#include <core/logging/log.h>
void *lut_getobj(lua_State *L, int n);
void *lut_getobj(lua_State *L, int idx);
#endif /* __LUT_OBJECT_H__ */

View File

@ -166,7 +166,7 @@ int lut_DeviceProxy_newindex(lua_State* L)
udata->type_map[attr_name].format = attr.get_data_format();
}
Tango::DeviceAttribute v = pack_attr_data(L, udata->type_map[attr_name], attr_name);
Tango::DeviceAttribute v = pack_attr_data(L, 3, udata->type_map[attr_name], attr_name);
udata->dev->write_attribute(v);
return 0;

View File

@ -243,7 +243,7 @@ void push_attr_string(lua_State* L, Tango::DeviceAttribute attr)
}
}
Tango::DeviceAttribute pack_attr_data(lua_State* L, AttrTypeDescription d, const char* attr_name)
Tango::DeviceAttribute pack_attr_data(lua_State* L, int idx, AttrTypeDescription d, const char* attr_name)
{
switch(d.type)
{
@ -253,49 +253,49 @@ Tango::DeviceAttribute pack_attr_data(lua_State* L, AttrTypeDescription d, const
case 1: // bool
// Lua 5.1 is missing the luaL_checkboolean function
return pack_attr_value(attr_name, (bool)lua_toboolean(L, 3));
return pack_attr_value(attr_name, (bool)lua_toboolean(L, idx));
break;
case 2: // short
return pack_attr_value(attr_name, pop_number<short>(L, 3));
return pack_attr_value(attr_name, pop_number<short>(L, idx));
break;
case 3: // long
return pack_attr_value(attr_name, pop_number<long>(L, 3));
return pack_attr_value(attr_name, pop_number<long>(L, idx));
break;
case 4: // float
return pack_attr_value(attr_name, pop_number<float>(L, 3));
return pack_attr_value(attr_name, pop_number<float>(L, idx));
break;
case 5: // double
return pack_attr_value(attr_name, pop_number<double>(L, 3));
return pack_attr_value(attr_name, pop_number<double>(L, idx));
break;
case 6: // ushort
return pack_attr_value(attr_name, pop_number<unsigned short>(L, 3));
return pack_attr_value(attr_name, pop_number<unsigned short>(L, idx));
break;
case 7: // ulong
return pack_attr_value(attr_name, pop_number<unsigned long>(L, 3));
return pack_attr_value(attr_name, pop_number<unsigned long>(L, idx));
break;
case 8: // string
case 9: // char[]
case 20: // const string
return pack_attr_value(attr_name, luaL_checkstring(L, 3));
return pack_attr_value(attr_name, luaL_checkstring(L, idx));
break;
case 23: // long64
return pack_attr_value(attr_name, pop_number<int64_t>(L, 3));
return pack_attr_value(attr_name, pop_number<int64_t>(L, idx));
break;
case 24: // ulong64
return pack_attr_value(attr_name, pop_number<uint64_t>(L, 3));
return pack_attr_value(attr_name, pop_number<uint64_t>(L, idx));
break;
case 27: // int
return pack_attr_value(attr_name, pop_number<int>(L, 3));
return pack_attr_value(attr_name, pop_number<int>(L, idx));
break;
case 10: // short[]

View File

@ -28,7 +28,7 @@ void push_attr_bool(lua_State* L, Tango::DeviceAttribute attr);
void push_attr_string(lua_State* L, Tango::DeviceAttribute attr);
// WRITE ATTRIBUTE ------------------------------------------------------------
Tango::DeviceAttribute pack_attr_data(lua_State* L, AttrTypeDescription d, const char* attr_name);
Tango::DeviceAttribute pack_attr_data(lua_State* L, int idx, AttrTypeDescription d, const char* attr_name);
template<class T>
Tango::DeviceAttribute pack_attr_value(const char* name, T value);