[PATCH vkd3d v6 3/8] vkd3d-shader/hlsl: Concatenate nested initializers.
Francisco Casas
fcasas at codeweavers.com
Mon Mar 14 13:52:38 CDT 2022
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
v6:
- Declaration of "unsigned int i" moved out of the 'for' initialization clause.
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
---
libs/vkd3d-shader/hlsl.y | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
index aca246f6..c40957c2 100644
--- a/libs/vkd3d-shader/hlsl.y
+++ b/libs/vkd3d-shader/hlsl.y
@@ -2411,6 +2411,7 @@ static bool add_method_call(struct hlsl_ctx *ctx, struct list *instrs, struct hl
%type <function> func_prototype
%type <initializer> complex_initializer
+%type <initializer> complex_initializer_list
%type <initializer> func_arguments
%type <initializer> initializer_expr_list
@@ -3218,15 +3219,36 @@ complex_initializer:
$$.args[0] = node_from_list($1);
$$.instrs = $1;
}
- | '{' initializer_expr_list '}'
+ | '{' complex_initializer_list '}'
{
$$ = $2;
}
- | '{' initializer_expr_list ',' '}'
+ | '{' complex_initializer_list ',' '}'
{
$$ = $2;
}
+complex_initializer_list:
+ complex_initializer
+ | complex_initializer_list ',' complex_initializer
+ {
+ struct hlsl_ir_node **new_args;
+ unsigned int i;
+
+ $$ = $1;
+ if (!(new_args = hlsl_realloc(ctx, $$.args, ($$.args_count + $3.args_count) * sizeof(*$$.args))))
+ {
+ free_parse_initializer(&$$);
+ free_parse_initializer(&$3);
+ YYABORT;
+ }
+ $$.args = new_args;
+ for (i = 0; i < $3.args_count; i++)
+ $$.args[$$.args_count++] = $3.args[i];
+ list_move_tail($$.instrs, $3.instrs);
+ free_parse_initializer(&$3);
+ }
+
initializer_expr:
assignment_expr
--
2.25.1
More information about the wine-devel
mailing list