aboutsummaryrefslogtreecommitdiffstats
path: root/sem_expr.adb
diff options
context:
space:
mode:
Diffstat (limited to 'sem_expr.adb')
-rw-r--r--sem_expr.adb20
1 files changed, 20 insertions, 0 deletions
diff --git a/sem_expr.adb b/sem_expr.adb
index 47764bf12..c77170a14 100644
--- a/sem_expr.adb
+++ b/sem_expr.adb
@@ -294,6 +294,8 @@ package body Sem_Expr is
when Iir_Kind_Allocator_By_Expression
| Iir_Kind_Allocator_By_Subtype =>
return Is_Allocator_Type (A_Type, Expr);
+ when Iir_Kind_Parenthesis_Expression =>
+ return Is_Expr_Compatible (A_Type, Get_Expression (Expr));
when others =>
-- Error while EXPR was typed. FIXME: should create an ERROR
-- node?
@@ -355,6 +357,7 @@ package body Sem_Expr is
| Iir_Kind_Implicit_Dereference
| Iir_Kinds_Expression_Attribute
| Iir_Kind_Attribute_Value
+ | Iir_Kind_Parenthesis_Expression
| Iir_Kind_Type_Conversion
| Iir_Kind_Function_Call =>
return Expr;
@@ -3576,6 +3579,8 @@ package body Sem_Expr is
| Iir_Kinds_Dyadic_Operator
| Iir_Kind_Function_Call =>
return;
+ when Iir_Kind_Parenthesis_Expression =>
+ Obj := Get_Expression (Obj);
when Iir_Kind_Qualified_Expression =>
return;
when Iir_Kind_Type_Conversion
@@ -3829,6 +3834,21 @@ package body Sem_Expr is
return Sem_Aggregate (Expr, A_Type);
end if;
+ when Iir_Kind_Parenthesis_Expression =>
+ declare
+ Sub_Expr : Iir;
+ begin
+ Sub_Expr := Get_Expression (Expr);
+ Sub_Expr := Sem_Expression_Ov (Sub_Expr, A_Type1);
+ if Sub_Expr = Null_Iir then
+ return Null_Iir;
+ end if;
+ Set_Expression (Expr, Sub_Expr);
+ Set_Type (Expr, Get_Type (Sub_Expr));
+ Set_Expr_Staticness (Expr, Get_Expr_Staticness (Sub_Expr));
+ return Expr;
+ end;
+
when Iir_Kind_Qualified_Expression =>
declare
N_Type: Iir;