lua: method: implmented parameter support (except object)

Dieser Commit ist enthalten in:
Reinder Feenstra 2022-03-23 00:21:12 +01:00
Ursprung 94699b8a50
Commit bd22141c85

Datei anzeigen

@ -23,6 +23,7 @@
#include "method.hpp" #include "method.hpp"
#include "push.hpp" #include "push.hpp"
#include "error.hpp" #include "error.hpp"
#include "to.hpp"
#include "../core/abstractmethod.hpp" #include "../core/abstractmethod.hpp"
#include "../core/object.hpp" #include "../core/object.hpp"
@ -94,8 +95,50 @@ int Method::__call(lua_State* L)
Arguments args; Arguments args;
args.reserve(argc); args.reserve(argc);
if(argc > 0)
{
int index = 2;
assert(argc == 0); for(const auto& info : method.argumentTypeInfo())
{
switch(info.type)
{
case ValueType::Boolean:
args.emplace_back(to<bool>(L, index));
break;
case ValueType::Enum:
args.emplace_back(static_cast<int64_t>(checkEnum(L, index, info.enumName.data())));
break;
case ValueType::Integer:
args.emplace_back(to<int64_t>(L, index));
break;
case ValueType::Float:
args.emplace_back(to<double>(L, index));
break;
case ValueType::String:
args.emplace_back(to<std::string>(L, index));
break;
case ValueType::Object:
errorInternal(L); // not yet implemented
case ValueType::Set:
args.emplace_back(static_cast<int64_t>(checkSet(L, index, info.setName.data())));
break;
case ValueType::Invalid:
assert(false);
errorInternal(L);
}
index++;
}
}
assert(args.size() == static_cast<Arguments::size_type>(argc));
try try
{ {