mirror of
https://github.com/lune-org/lune.git
synced 2024-12-12 13:00:37 +00:00
Pass arguments to coroutine in coroutine.resume
(#86)
This commit is contained in:
parent
c86190def1
commit
72adb2172f
2 changed files with 13 additions and 3 deletions
|
@ -117,7 +117,7 @@ fn coroutine_status<'a>(
|
||||||
|
|
||||||
fn coroutine_resume<'lua>(
|
fn coroutine_resume<'lua>(
|
||||||
lua: &'lua Lua,
|
lua: &'lua Lua,
|
||||||
value: LuaThreadOrTaskReference,
|
(value, arguments): (LuaThreadOrTaskReference, LuaMultiValue<'lua>),
|
||||||
) -> LuaResult<(bool, LuaMultiValue<'lua>)> {
|
) -> LuaResult<(bool, LuaMultiValue<'lua>)> {
|
||||||
let sched = lua.app_data_ref::<&TaskScheduler>().unwrap();
|
let sched = lua.app_data_ref::<&TaskScheduler>().unwrap();
|
||||||
if sched.current_task().is_none() {
|
if sched.current_task().is_none() {
|
||||||
|
@ -128,10 +128,10 @@ fn coroutine_resume<'lua>(
|
||||||
let current = sched.current_task().unwrap();
|
let current = sched.current_task().unwrap();
|
||||||
let result = match value {
|
let result = match value {
|
||||||
LuaThreadOrTaskReference::Thread(t) => {
|
LuaThreadOrTaskReference::Thread(t) => {
|
||||||
let task = sched.create_task(TaskKind::Instant, t, None, true)?;
|
let task = sched.create_task(TaskKind::Instant, t, Some(arguments), true)?;
|
||||||
sched.resume_task(task, None)
|
sched.resume_task(task, None)
|
||||||
}
|
}
|
||||||
LuaThreadOrTaskReference::TaskReference(t) => sched.resume_task(t, None),
|
LuaThreadOrTaskReference::TaskReference(t) => sched.resume_task(t, Some(Ok(arguments))),
|
||||||
};
|
};
|
||||||
sched.force_set_current_task(Some(current));
|
sched.force_set_current_task(Some(current));
|
||||||
match result {
|
match result {
|
||||||
|
|
|
@ -74,3 +74,13 @@ end)()
|
||||||
assert(not flag2, "Wait failed while inside wrap (1)")
|
assert(not flag2, "Wait failed while inside wrap (1)")
|
||||||
task.wait(0.2)
|
task.wait(0.2)
|
||||||
assert(flag2, "Wait failed while inside wrap (2)")
|
assert(flag2, "Wait failed while inside wrap (2)")
|
||||||
|
|
||||||
|
-- Coroutines should be passed arguments on initial resume
|
||||||
|
|
||||||
|
local co = coroutine.create(function(a, b, c)
|
||||||
|
assert(a == 1)
|
||||||
|
assert(b == "Hello, world!")
|
||||||
|
assert(c == true)
|
||||||
|
end)
|
||||||
|
|
||||||
|
coroutine.resume(co, 1, "Hello, world!", true)
|
||||||
|
|
Loading…
Reference in a new issue