mirror of
https://github.com/godotengine/godot.git
synced 2024-11-28 23:22:38 +00:00
Merge pull request #73796 from vonagam/fix-enum-in-range-call
GDScript: Fix usage of enum value as range argument
This commit is contained in:
commit
486b0b690d
@ -1861,24 +1861,20 @@ void GDScriptAnalyzer::resolve_for(GDScriptParser::ForNode *p_for) {
|
||||
Vector<Variant> args;
|
||||
args.resize(call->arguments.size());
|
||||
for (int i = 0; i < call->arguments.size(); i++) {
|
||||
reduce_expression(call->arguments[i]);
|
||||
GDScriptParser::ExpressionNode *argument = call->arguments[i];
|
||||
reduce_expression(argument);
|
||||
|
||||
if (!call->arguments[i]->is_constant) {
|
||||
if (!argument->is_constant) {
|
||||
all_is_constant = false;
|
||||
} else if (all_is_constant) {
|
||||
args.write[i] = call->arguments[i]->reduced_value;
|
||||
break;
|
||||
}
|
||||
if (argument->reduced_value.get_type() != Variant::INT && argument->reduced_value.get_type() != Variant::FLOAT) {
|
||||
push_error(vformat(R"*(Invalid argument for "range()" call. Argument %d should be int or float but "%s" was given.)*", i + 1, Variant::get_type_name(argument->reduced_value.get_type())), argument);
|
||||
all_is_constant = false;
|
||||
break;
|
||||
}
|
||||
|
||||
GDScriptParser::DataType arg_type = call->arguments[i]->get_datatype();
|
||||
if (!arg_type.is_variant()) {
|
||||
if (arg_type.kind != GDScriptParser::DataType::BUILTIN) {
|
||||
all_is_constant = false;
|
||||
push_error(vformat(R"*(Invalid argument for "range()" call. Argument %d should be int or float but "%s" was given.)*", i + 1, arg_type.to_string()), call->arguments[i]);
|
||||
} else if (arg_type.builtin_type != Variant::INT && arg_type.builtin_type != Variant::FLOAT) {
|
||||
all_is_constant = false;
|
||||
push_error(vformat(R"*(Invalid argument for "range()" call. Argument %d should be int or float but "%s" was given.)*", i + 1, arg_type.to_string()), call->arguments[i]);
|
||||
}
|
||||
}
|
||||
args.write[i] = argument->reduced_value;
|
||||
}
|
||||
|
||||
Variant reduced;
|
||||
|
@ -0,0 +1,9 @@
|
||||
enum E { E0 = 0, E3 = 3 }
|
||||
|
||||
func test():
|
||||
var total := 0
|
||||
for value in range(E.E0, E.E3):
|
||||
var inferable := value
|
||||
total += inferable
|
||||
assert(total == 0 + 1 + 2)
|
||||
print('ok')
|
@ -0,0 +1,2 @@
|
||||
GDTEST_OK
|
||||
ok
|
Loading…
Reference in New Issue
Block a user