diff options
Diffstat (limited to 'src/vhdl/translate/trans.adb')
-rw-r--r-- | src/vhdl/translate/trans.adb | 45 |
1 files changed, 6 insertions, 39 deletions
diff --git a/src/vhdl/translate/trans.adb b/src/vhdl/translate/trans.adb index 82e34ae87..a2f0a89a8 100644 --- a/src/vhdl/translate/trans.adb +++ b/src/vhdl/translate/trans.adb @@ -1083,25 +1083,22 @@ package body Trans is begin case M.M1.State is when Mstate_E => - if M.M1.Is_Composite then + if Is_Composite (M.M1.T) then -- Create a pointer variable. D := Create_Temp_Init (M.M1.Ptype, M.M1.E); return Mnode'(M1 => (State => Mstate_Dp, - Is_Composite => True, K => K, T => M.M1.T, Dp => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); else -- Create a scalar variable. D := Create_Temp_Init (M.M1.Vtype, M.M1.E); return Mnode'(M1 => (State => Mstate_Dv, - Is_Composite => False, K => K, T => M.M1.T, Dv => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); end if; when Mstate_Lp => D := Create_Temp_Init (M.M1.Ptype, New_Value (M.M1.Lp)); return Mnode'(M1 => (State => Mstate_Dp, - Is_Composite => M.M1.Is_Composite, K => K, T => M.M1.T, Dp => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); when Mstate_Lv => @@ -1111,14 +1108,12 @@ package body Trans is end if; D := Create_Temp_Init (M.M1.Vtype, New_Value (M.M1.Lv)); return Mnode'(M1 => (State => Mstate_Dv, - Is_Composite => M.M1.Is_Composite, K => K, T => M.M1.T, Dv => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); else D := Create_Temp_Ptr (M.M1.Ptype, M.M1.Lv); return Mnode'(M1 => (State => Mstate_Dp, - Is_Composite => M.M1.Is_Composite, K => K, T => M.M1.T, Dp => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); end if; @@ -1142,9 +1137,7 @@ package body Trans is E : O_Enode; begin -- M must be scalar or access. - if M.M1.Is_Composite then - raise Internal_Error; - end if; + pragma Assert (not Is_Composite (M.M1.T)); case M.M1.State is when Mstate_E => E := M.M1.E; @@ -1162,7 +1155,6 @@ package body Trans is D := Create_Temp_Init (M.M1.Vtype, E); return Mnode'(M1 => (State => Mstate_Dv, - Is_Composite => M.M1.Is_Composite, K => M.M1.K, T => M.M1.T, Dv => D, Vtype => M.M1.Vtype, Ptype => M.M1.Ptype)); end Stabilize_Value; @@ -1378,7 +1370,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_E, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, E => E, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1388,7 +1379,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Lv, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Lv => L, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1397,13 +1387,11 @@ package body Trans is function Lv2M (L : O_Lnode; T : Type_Info_Acc; Kind : Object_Kind_Type; - Comp : Boolean; Vtype : O_Tnode; Ptype : O_Tnode) return Mnode is begin return Mnode'(M1 => (State => Mstate_Lv, - Is_Composite => Comp, K => Kind, T => T, Lv => L, Vtype => Vtype, Ptype => Ptype)); end Lv2M; @@ -1412,7 +1400,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Lp, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Lp => L, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1426,31 +1413,16 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Lp, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Lp => L, Vtype => Vtype, Ptype => Ptype)); end Lp2M; - function Lv2M (L : O_Lnode; - T : Type_Info_Acc; - Kind : Object_Kind_Type; - Vtype : O_Tnode; - Ptype : O_Tnode) - return Mnode is - begin - return Mnode'(M1 => (State => Mstate_Lv, - Is_Composite => T.Type_Mode in Type_Mode_Fat, - K => Kind, T => T, Lv => L, - Vtype => Vtype, Ptype => Ptype)); - end Lv2M; - function Dv2M (D : O_Dnode; T : Type_Info_Acc; Kind : Object_Kind_Type) return Mnode is begin return Mnode'(M1 => (State => Mstate_Dv, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Dv => D, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1464,7 +1436,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Dv, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Dv => D, Vtype => Vtype, Ptype => Ptype)); @@ -1478,7 +1449,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Dp, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Dp => D, Vtype => Vtype, Ptype => Ptype)); end Dp2M; @@ -1489,7 +1459,6 @@ package body Trans is return Mnode is begin return Mnode'(M1 => (State => Mstate_Dp, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Dp => D, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1578,7 +1547,6 @@ package body Trans is begin T := Get_Info (Atype); return Mnode'(M1 => (State => Mstate_Null, - Is_Composite => T.Type_Mode in Type_Mode_Fat, K => Kind, T => T, Vtype => T.Ortho_Type (Kind), Ptype => T.Ortho_Ptr_Type (Kind))); @@ -1643,11 +1611,10 @@ package body Trans is when Mstate_Dv => return New_Address (New_Obj (M.M1.Dv), M.M1.Ptype); when Mstate_E => - if M.M1.Is_Composite then - return M.M1.E; - else - raise Internal_Error; - end if; + -- For scalar, M contains the value so there is no lvalue from + -- which the address can be taken. + pragma Assert (Is_Composite (M.M1.T)); + return M.M1.E; when Mstate_Bad | Mstate_Null => raise Internal_Error; |