Skip to content

Commit

Permalink
[lua] added lua::state::stack_push_xyz
Browse files Browse the repository at this point in the history
  • Loading branch information
harrand committed Aug 28, 2023
1 parent 30b3c48 commit 57cf464
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 2 deletions.
6 changes: 6 additions & 0 deletions src/tz/lua/api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,18 @@ namespace tz::lua
return 0;
LUA_END

LUA_BEGIN(stack_dump)
tz::dbgui::add_to_lua_log(state.collect_stack());
return 0;
LUA_END

void api_initialise(state& s)
{
s.assign_emptytable("tz");
s.assign_func("tz.assert", LUA_FN_NAME(assert));
s.assign_func("tz.error", LUA_FN_NAME(error));
LUA_REGISTER_ONE(print, s);
LUA_REGISTER_ONE(stack_dump, s);
s.assign_emptytable("tz.version");
s.assign_emptytable("thread");

Expand Down
34 changes: 33 additions & 1 deletion src/tz/lua/state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,39 @@ namespace tz::lua
}
}

void state::stack_push_bool(bool b) const
{
auto* s = static_cast<lua_State*>(this->lstate);
lua_pushboolean(s, b);
}

void state::stack_push_double(double d) const
{
auto* s = static_cast<lua_State*>(this->lstate);
lua_pushnumber(s, d);
}

void state::stack_push_float(float f) const
{
this->stack_push_double(f);
}

void state::stack_push_int(std::int64_t i) const
{
this->stack_push_double(static_cast<double>(i));
}

void state::stack_push_uint(std::uint64_t u) const
{
this->stack_push_double(static_cast<double>(u));
}

void state::stack_push_string(std::string_view sv) const
{
auto* s = static_cast<lua_State*>(this->lstate);
lua_pushlstring(s, sv.data(), sv.size());
}

std::string state::collect_stack() const
{
if(!this->impl_check_stack(3))
Expand Down Expand Up @@ -356,7 +389,6 @@ namespace tz::lua
void for_all_states(state_applicator fn)
{
// for each worker, execute a new job to register the function with the necessary affinity.
// this is incredibly slow, as it causes massive job queue contention.
std::vector<tz::job_handle> handles = {};
for(tz::worker_id_t wid : tz::job_system().get_worker_ids())
{
Expand Down
12 changes: 11 additions & 1 deletion src/tz/lua/state.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ namespace tz::lua
*/
bool execute(const char* lua_src, bool assert_on_failure = true) const;

// assigning variables
bool assign_nil(const char* varname) const;
bool assign_emptytable(const char* varname) const;
bool assign_bool(const char* varname, bool b) const;
Expand All @@ -57,20 +58,29 @@ namespace tz::lua
}
bool assign_func(const char* varname, void* func_ptr) const;
bool assign_string(const char* varname, std::string str) const;

// retrieving variable values
std::optional<bool> get_bool(const char* varname) const;
std::optional<float> get_float(const char* varname) const;
std::optional<double> get_double(const char* varname) const;
std::optional<std::int64_t> get_int(const char* varname) const;
std::optional<std::uint64_t> get_uint(const char* varname) const;
// stack operations
std::size_t stack_size() const;
void stack_pop(std::size_t count = 1);
// read a value off of the stack
bool stack_get_bool(std::size_t idx, bool type_check = true) const;
double stack_get_double(std::size_t idx, bool type_check = true) const;
float stack_get_float(std::size_t idx, bool type_check = true) const;
std::int64_t stack_get_int(std::size_t idx, bool type_check = true) const;
std::uint64_t stack_get_uint(std::size_t idx, bool type_check = true) const;
std::string stack_get_string(std::size_t idx, bool type_check = true) const;
// push a new value onto the stack
void stack_push_bool(bool b) const;
void stack_push_double(double d) const;
void stack_push_float(float f) const;
void stack_push_int(std::int64_t i) const;
void stack_push_uint(std::uint64_t u) const;
void stack_push_string(std::string_view sv) const;
std::string collect_stack() const;
const std::string& get_last_error() const;
std::thread::id get_owner_thread_id() const;
Expand Down

0 comments on commit 57cf464

Please sign in to comment.