Other function type support
This commit is contained in:
parent
a921efb007
commit
b461a6ab3c
@ -943,10 +943,11 @@ namespace game
|
||||
};
|
||||
|
||||
struct HashTable;
|
||||
struct cclosure;
|
||||
|
||||
union HksValue
|
||||
{
|
||||
void* cClosure;
|
||||
cclosure* cClosure;
|
||||
void* closure;
|
||||
UserData* userData;
|
||||
HashTable* table;
|
||||
@ -1114,5 +1115,15 @@ namespace game
|
||||
unsigned int m_arraySize;
|
||||
Node* m_freeNode;
|
||||
};
|
||||
|
||||
struct cclosure : ChunkHeader
|
||||
{
|
||||
lua_function m_function;
|
||||
HashTable* m_env;
|
||||
__int16 m_numUpvalues;
|
||||
__int16 m_flags;
|
||||
InternString* m_name;
|
||||
HksObject m_upvalues[1];
|
||||
};
|
||||
}
|
||||
}
|
@ -85,8 +85,9 @@ namespace ui_scripting
|
||||
* Function
|
||||
**************************************************************/
|
||||
|
||||
function::function(void* ptr_)
|
||||
function::function(game::hks::cclosure* ptr_, game::hks::HksObjectType type_)
|
||||
: ptr(ptr_)
|
||||
, type(type_)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -41,10 +41,11 @@ namespace ui_scripting
|
||||
class function
|
||||
{
|
||||
public:
|
||||
function(void*);
|
||||
function(game::hks::cclosure*, game::hks::HksObjectType);
|
||||
|
||||
arguments call(const arguments& arguments) const;
|
||||
|
||||
void* ptr;
|
||||
game::hks::cclosure* ptr;
|
||||
game::hks::HksObjectType type;
|
||||
};
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ namespace ui_scripting
|
||||
|
||||
value::value(const function& value)
|
||||
{
|
||||
this->value_.t = game::hks::TIFUNCTION;
|
||||
this->value_.t = value.type;
|
||||
this->value_.v.ptr = value.ptr;
|
||||
}
|
||||
|
||||
@ -259,13 +259,14 @@ namespace ui_scripting
|
||||
template <>
|
||||
bool value::is<function>() const
|
||||
{
|
||||
return this->get_raw().t == game::hks::TIFUNCTION;
|
||||
return this->get_raw().t == game::hks::TIFUNCTION
|
||||
|| this->get_raw().t == game::hks::TCFUNCTION;
|
||||
}
|
||||
|
||||
template <>
|
||||
function value::get() const
|
||||
{
|
||||
return this->get_raw().v.ptr;
|
||||
return {this->get_raw().v.cClosure, this->get_raw().t};
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user