Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- Again, a few minor comments you might want to address later.
Il 15/02/22 21:17, Francisco Casas ha scritto:
@@ -1633,69 +1647,36 @@ static struct list *declare_vars(struct hlsl_ctx *ctx, struct hlsl_type *basic_t
if (v->initializer.args_count) {
unsigned int size = initializer_size(&v->initializer);if (type->type <= HLSL_CLASS_LAST_NUMERIC && v->initializer.args_count != 1&& type->dimx * type->dimy != size){hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,"Expected %u components in numeric initializer, but got %u.",type->dimx * type->dimy, v->initializer.args_count);free_parse_initializer(&v->initializer);vkd3d_free(v);continue;}if ((type->type == HLSL_CLASS_STRUCT || type->type == HLSL_CLASS_ARRAY)&& hlsl_type_component_count(type) != size){hlsl_error(ctx, &v->loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,"Expected %u components in initializer, but got %u.", hlsl_type_component_count(type), size);free_parse_initializer(&v->initializer);vkd3d_free(v);continue;}if (type->type == HLSL_CLASS_STRUCT){struct_var_initializer(ctx, var, &v->initializer);list_move_tail(statements_list, v->initializer.instrs);free_parse_initializer(&v->initializer);vkd3d_free(v);continue;}if (type->type > HLSL_CLASS_LAST_NUMERIC){FIXME("Initializers for non scalar/struct variables not supported yet.\n");free_parse_initializer(&v->initializer);if (v->arrays.count)vkd3d_free(v->arrays.sizes);vkd3d_free(v);continue;}if (v->arrays.count){hlsl_fixme(ctx, &v->loc, "Array initializer.");free_parse_initializer(&v->initializer);vkd3d_free(v->arrays.sizes);vkd3d_free(v);continue;}if (v->initializer.args_count > 1) {
The flow structure here is a bit funny: instead of
if (count != 0) { if (count > 1) ... else ... }
I'd find more logical
if (count == 1) ... else if (count > 1) ...
(main point here is not introducing a useless embedding level, not really the case order)
initialize_numeric_var(ctx, var, &v->initializer, 0, type, &initializer_offset);
if (type->type <= HLSL_CLASS_LAST_NUMERIC){flatten_parse_initializer(ctx, &v->initializer);if (v->initializer.args_count != size){hlsl_fixme(ctx, &v->loc, "Could not flatten initializer.");free_parse_initializer(&v->initializer);if (v->arrays.count)vkd3d_free(v->arrays.sizes);
Here there is a missing indentation.
BTW, this gadget "if (count) free(sizes)" appears frequently. But I guess that if count is zero, then you can assume that sizes is NULL. If so, you don't need to guard the call to free(): free(NULL) is a no-op.
Thanks, Giovanni.