GDScript: Properly return value with await on non-coroutine

If the keyword `await` is used without a coroutine, it should still
return the value synchronally.
This commit is contained in:
George Marques 2021-10-14 19:58:10 -03:00
parent d36213bab8
commit 056a54db7b
No known key found for this signature in database
GPG key ID: 046BD46A3201E43D
3 changed files with 17 additions and 1 deletions

View file

@ -2098,8 +2098,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
}
if (result.get_type() != Variant::SIGNAL) {
// Not async, return immediately using the target from OPCODE_AWAIT_RESUME.
GET_VARIANT_PTR(target, 3);
*target = result;
ip += 4; // Skip OPCODE_AWAIT_RESUME and its data.
// The stack pointer should be the same, so we don't need to set a return value.
is_signal = false;
} else {
sig = result;

View file

@ -0,0 +1,8 @@
# https://github.com/godotengine/godot/issues/50894
func test():
print(await not_coroutine())
func not_coroutine():
return "awaited"

View file

@ -0,0 +1,6 @@
GDTEST_OK
>> WARNING
>> Line: 4
>> REDUNDANT_AWAIT
>> "await" keyword not needed in this case, because the expression isn't a coroutine nor a signal.
awaited