### Godot version

4.0.3

### System information

Windows10

### Issue description

sky shader accepts uniform vec3, vec4, vec3 array, but not vec4 array

### Steps to reproduce

simply pass Vector4 to uniform vec4[] from gdscript

### Minimal reproduction project

gdscript

sky_material.set_shader_parameter("v3",Vector3(1,0.8,0.5)) - v
sky_material.set_shader_parameter("v4",Vector4(1,0.8,0.5,0.2)) - v
sky_material.set_shader_parameter("v3a",[Vector3(1,0.8,0.5)]) - v
sky_material.set_shader_parameter("v4a",[Vector4(1,0.8,0.5,0.2)]) - x

sky gdshader

uniform vec3 v3;
uniform vec4 v4;
uniform vec3 v3a[1];
uniform vec4 v4a[1];

void sky(){
    COLOR.r = v4a[0].w
}
n = static_cast<const MemberNode *>(n)->owner;
										}
										if (n->type != Node::NODE_TYPE_VARIABLE && n->type != Node::NODE_TYPE_ARRAY) {
											_set_error(vformat(RTR("Argument %d of function '%s' is not a variable, array, or member."), arg_idx + 1, String(name)));
											return false;
										}
										if (n->type == Node::NODE_TYPE_VARIABLE) {
											var_name = static_cast<const VariableNode *>(n)->name;
										} else { 
											var_name = static_cast<const ArrayNode *>(n)->name;
										}
									} else { 
										var_name = static_cast<const VariableNode *>(p_func->arguments[arg_idx + 1])->name;
									}
									const BlockNode *b = p_block;
									bool valid = false;
									while (b) {
										if (b->variables.has(var_name) || p_function_info.built_ins.has(var_name)) {
											valid = true;
											break;
										}
										if (b->parent_function) {
											for (int i = 0; i < b->parent_function->arguments.size(); i++) {
												if (b->parent_function->arguments[i].name == var_name) {
													valid = true;
													break;
												}
											}
										}
										b = b->parent_block;