Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- Though notice that technically, like for C, unary plus promotes bool to int. This might become significant one day, when we have function call overloading. OTOH, I really hope we never find shaders depending on that, and many fine and not so fine points of type handling are not implemented correctly yet any way.
Il 23/09/21 23:47, Zebediah Figura ha scritto:
Signed-off-by: Zebediah Figura zfigura@codeweavers.com
libs/vkd3d-shader/hlsl.y | 51 +++++++++++----------------------------- 1 file changed, 14 insertions(+), 37 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index b8d147a01..42a6768cc 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -80,14 +80,6 @@ struct parse_if_body struct list *else_instrs; };
-enum parse_unary_op -{
- UNARY_OP_PLUS,
- UNARY_OP_MINUS,
- UNARY_OP_LOGICNOT,
- UNARY_OP_BITNOT,
-};
- enum parse_assign_op { ASSIGN_OP_ASSIGN,
@@ -1798,7 +1790,6 @@ static struct list *add_constructor(struct hlsl_ctx *ctx, struct hlsl_type *type struct parse_array_sizes arrays; struct parse_variable_def *variable_def; struct parse_if_body if_body;
- enum parse_unary_op unary_op; enum parse_assign_op assign_op; struct hlsl_reg_reservation reg_reservation; struct parse_colon_attribute colon_attribute;
@@ -1987,8 +1978,6 @@ static struct list *add_constructor(struct hlsl_ctx *ctx, struct hlsl_type *type %type <type> type %type <type> typedef_type
-%type <unary_op> unary_op
- %type <variable_def> type_spec %type <variable_def> variable_def
@@ -3037,16 +3026,22 @@ unary_expr: } $$ = $2; }
- | unary_op unary_expr
- | '+' unary_expr {
static const enum hlsl_ir_expr_op ops[] = {0, HLSL_OP1_NEG, HLSL_OP1_LOGIC_NOT, HLSL_OP1_BIT_NOT};
if ($1 == UNARY_OP_PLUS)
$$ = $2;
else
$$ = add_unary_expr(ctx, $2, ops[$1], @1);
$$ = $2;
}
- | '-' unary_expr
{
$$ = add_unary_expr(ctx, $2, HLSL_OP1_NEG, @1);
}
- | '~' unary_expr
{
$$ = add_unary_expr(ctx, $2, HLSL_OP1_BIT_NOT, @1);
}
- | '!' unary_expr
{
$$ = add_unary_expr(ctx, $2, HLSL_OP1_LOGIC_NOT, @1); }
/* var_modifiers is necessary to avoid shift/reduce conflicts. */ | '(' var_modifiers type arrays ')' unary_expr {
@@ -3082,24 +3077,6 @@ unary_expr: $$ = append_unop($6, &hlsl_new_cast(ctx, node_from_list($6), dst_type, &@3)->node); }
-unary_op:
'+'
{
$$ = UNARY_OP_PLUS;
}
- | '-'
{
$$ = UNARY_OP_MINUS;
}
- | '!'
{
$$ = UNARY_OP_LOGICNOT;
}
- | '~'
{
$$ = UNARY_OP_BITNOT;
}
- mul_expr: unary_expr | mul_expr '*' unary_expr