Merge branch 'main' into release-0.25
This commit is contained in:
commit
52a8880c4b
@ -1,6 +1,6 @@
|
|||||||
local base_entities = {}
|
local util = {}
|
||||||
|
|
||||||
function base_entities.drop(ppos, itemid, count, pickup_delay)
|
function util.drop(ppos, itemid, count, pickup_delay)
|
||||||
if itemid == 0 or not itemid then
|
if itemid == 0 or not itemid then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -11,4 +11,4 @@ function base_entities.drop(ppos, itemid, count, pickup_delay)
|
|||||||
}})
|
}})
|
||||||
end
|
end
|
||||||
|
|
||||||
return base_entities
|
return util
|
||||||
|
|||||||
@ -9,7 +9,7 @@ static int l_get(lua::State* L) {
|
|||||||
std::string url(lua::require_lstring(L, 1));
|
std::string url(lua::require_lstring(L, 1));
|
||||||
|
|
||||||
lua::pushvalue(L, 2);
|
lua::pushvalue(L, 2);
|
||||||
auto onResponse = lua::create_lambda(L);
|
auto onResponse = lua::create_lambda_nothrow(L);
|
||||||
|
|
||||||
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
||||||
engine->postRunnable([=]() {
|
engine->postRunnable([=]() {
|
||||||
@ -23,7 +23,7 @@ static int l_get_binary(lua::State* L) {
|
|||||||
std::string url(lua::require_lstring(L, 1));
|
std::string url(lua::require_lstring(L, 1));
|
||||||
|
|
||||||
lua::pushvalue(L, 2);
|
lua::pushvalue(L, 2);
|
||||||
auto onResponse = lua::create_lambda(L);
|
auto onResponse = lua::create_lambda_nothrow(L);
|
||||||
|
|
||||||
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
||||||
auto buffer = std::make_shared<util::Buffer<ubyte>>(
|
auto buffer = std::make_shared<util::Buffer<ubyte>>(
|
||||||
@ -40,7 +40,7 @@ static int l_connect(lua::State* L) {
|
|||||||
std::string address = lua::require_string(L, 1);
|
std::string address = lua::require_string(L, 1);
|
||||||
int port = lua::tointeger(L, 2);
|
int port = lua::tointeger(L, 2);
|
||||||
lua::pushvalue(L, 3);
|
lua::pushvalue(L, 3);
|
||||||
auto callback = lua::create_lambda(L);
|
auto callback = lua::create_lambda_nothrow(L);
|
||||||
u64id_t id = engine->getNetwork().connect(address, port, [callback](u64id_t id) {
|
u64id_t id = engine->getNetwork().connect(address, port, [callback](u64id_t id) {
|
||||||
engine->postRunnable([=]() {
|
engine->postRunnable([=]() {
|
||||||
callback({id});
|
callback({id});
|
||||||
@ -122,7 +122,7 @@ static int l_recv(lua::State* L) {
|
|||||||
static int l_open(lua::State* L) {
|
static int l_open(lua::State* L) {
|
||||||
int port = lua::tointeger(L, 1);
|
int port = lua::tointeger(L, 1);
|
||||||
lua::pushvalue(L, 2);
|
lua::pushvalue(L, 2);
|
||||||
auto callback = lua::create_lambda(L);
|
auto callback = lua::create_lambda_nothrow(L);
|
||||||
u64id_t id = engine->getNetwork().openServer(port, [callback](u64id_t id) {
|
u64id_t id = engine->getNetwork().openServer(port, [callback](u64id_t id) {
|
||||||
engine->postRunnable([=]() {
|
engine->postRunnable([=]() {
|
||||||
callback({id});
|
callback({id});
|
||||||
|
|||||||
@ -175,7 +175,7 @@ int lua::call_nothrow(State* L, int argc, int nresults) {
|
|||||||
int handler_pos = gettop(L) - argc;
|
int handler_pos = gettop(L) - argc;
|
||||||
pushcfunction(L, l_error_handler);
|
pushcfunction(L, l_error_handler);
|
||||||
insert(L, handler_pos);
|
insert(L, handler_pos);
|
||||||
if (lua_pcall(L, argc, LUA_MULTRET, handler_pos)) {
|
if (lua_pcall(L, argc, -1, handler_pos)) {
|
||||||
auto errorstr = tostring(L, -1);
|
auto errorstr = tostring(L, -1);
|
||||||
if (errorstr) {
|
if (errorstr) {
|
||||||
log_error(errorstr);
|
log_error(errorstr);
|
||||||
@ -187,7 +187,7 @@ int lua::call_nothrow(State* L, int argc, int nresults) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
remove(L, handler_pos);
|
remove(L, handler_pos);
|
||||||
return nresults == -1 ? 1 : nresults;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua::dump_stack(State* L) {
|
void lua::dump_stack(State* L) {
|
||||||
@ -263,6 +263,23 @@ scripting::common_func lua::create_lambda(State* L) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scripting::common_func lua::create_lambda_nothrow(State* L) {
|
||||||
|
auto funcptr = create_lambda_handler(L);
|
||||||
|
return [=](const std::vector<dv::value>& args) -> dv::value {
|
||||||
|
getglobal(L, LAMBDAS_TABLE);
|
||||||
|
getfield(L, *funcptr);
|
||||||
|
for (const auto& arg : args) {
|
||||||
|
pushvalue(L, arg);
|
||||||
|
}
|
||||||
|
if (call_nothrow(L, args.size(), 1)) {
|
||||||
|
auto result = tovalue(L, -1);
|
||||||
|
pop(L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
int lua::create_environment(State* L, int parent) {
|
int lua::create_environment(State* L, int parent) {
|
||||||
int id = nextEnvironment++;
|
int id = nextEnvironment++;
|
||||||
|
|
||||||
|
|||||||
@ -574,6 +574,7 @@ namespace lua {
|
|||||||
|
|
||||||
runnable create_runnable(lua::State*);
|
runnable create_runnable(lua::State*);
|
||||||
scripting::common_func create_lambda(lua::State*);
|
scripting::common_func create_lambda(lua::State*);
|
||||||
|
scripting::common_func create_lambda_nothrow(lua::State*);
|
||||||
|
|
||||||
inline int pushenv(lua::State* L, int env) {
|
inline int pushenv(lua::State* L, int env) {
|
||||||
if (getglobal(L, env_name(env))) {
|
if (getglobal(L, env_name(env))) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user