This fixes problems with degenerate cases such as: local button assert(coroutine.resume(coroutine.create(function() button = Button(10, 10, 20, 20) end))) button:action(function() print("hi") end)
27 lines
451 B
C++
27 lines
451 B
C++
#pragma once
|
|
|
|
#include "LuaCompat.h"
|
|
|
|
class LuaSmartRef
|
|
{
|
|
int ref;
|
|
lua_State *rootl;
|
|
|
|
public:
|
|
LuaSmartRef(lua_State *l);
|
|
~LuaSmartRef();
|
|
void Assign(lua_State *l, int index); // Copies the value before getting reference, stack unchanged.
|
|
void Clear();
|
|
int Push(lua_State *l); // Always pushes exactly one value, possibly nil.
|
|
|
|
inline operator int() const
|
|
{
|
|
return ref;
|
|
}
|
|
|
|
inline operator bool() const
|
|
{
|
|
return ref != LUA_REFNIL;
|
|
}
|
|
};
|