diff options
| author | Tristan Gingold <tgingold@free.fr> | 2019-11-12 20:22:30 +0100 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2019-11-12 20:36:04 +0100 | 
| commit | c2b6fd2775bdfb183a4de81d64f745e282ffd9fb (patch) | |
| tree | 8be0ab894d88eb7f771da67276a9337e7d07ece0 /src | |
| parent | a4a587d729314a8741b72284f624f167fa675062 (diff) | |
| download | ghdl-c2b6fd2775bdfb183a4de81d64f745e282ffd9fb.tar.gz ghdl-c2b6fd2775bdfb183a4de81d64f745e282ffd9fb.tar.bz2 ghdl-c2b6fd2775bdfb183a4de81d64f745e282ffd9fb.zip  | |
synth-stmts: return sub arrays/records for
Diffstat (limited to 'src')
| -rw-r--r-- | src/synth/synth-stmts.adb | 20 | ||||
| -rw-r--r-- | src/synth/synth-values.adb | 2 | ||||
| -rw-r--r-- | src/synth/synth-values.ads | 4 | 
3 files changed, 16 insertions, 10 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb index 6eb81a32d..eb2a67133 100644 --- a/src/synth/synth-stmts.adb +++ b/src/synth/synth-stmts.adb @@ -151,6 +151,7 @@ package body Synth.Stmts is                 Dest_Type := Targ.Typ;                 if Targ.Kind = Value_Alias then +                  --  Replace alias by the aliased name.                    Dest_Obj := Targ.A_Obj;                    Dest_Off := Targ.A_Off;                 else @@ -194,7 +195,7 @@ package body Synth.Stmts is                       Dest_Off := Dest_Off + Off;                       Strip_Const (Dest_Obj); -                     if Dest_Obj.Kind = Value_Const_Array then +                     if Dest_Obj.Kind in Value_Array .. Value_Const_Array then                          Dest_Obj := Dest_Obj.Arr.V                            (Iir_Index32 ((Dest_W - Dest_Off) / W));                          Dest_Off := 0; @@ -275,7 +276,7 @@ package body Synth.Stmts is                       end if;                       Dest_Off := Sl_Off;                    else -                     if Dest_Obj.Kind = Value_Const_Array then +                     if Dest_Obj.Kind in Value_Array .. Value_Const_Array then                          declare                             Arr : Value_Array_Acc;                             Off : Iir_Index32; @@ -286,15 +287,20 @@ package body Synth.Stmts is                             case Pfx_Bnd.Dir is                                when Iir_To =>                                   Off := Iir_Index32 -                                   (Pfx_Bnd.Right - Res_Bnd.Right); +                                   (Res_Bnd.Left - Pfx_Bnd.Left);                                when Iir_Downto =>                                   Off := Iir_Index32 -                                   (Res_Bnd.Right - Pfx_Bnd.Right); +                                   (Pfx_Bnd.Left - Res_Bnd.Left);                             end case;                             Arr.V := Dest_Obj.Arr.V -                             (Off .. Off + Iir_Index32 (Res_Bnd.Len) - 1); -                           Dest_Obj := Create_Value_Const_Array -                             (Dest_Type, Arr); +                             (Off + 1 .. Off + Iir_Index32 (Res_Bnd.Len)); +                           if Dest_Obj.Kind = Value_Array then +                              Dest_Obj := Create_Value_Array +                                (Dest_Type, Arr); +                           else +                              Dest_Obj := Create_Value_Const_Array +                                (Dest_Type, Arr); +                           end if;                          end;                       else                          --  Slice of a vector. diff --git a/src/synth/synth-values.adb b/src/synth/synth-values.adb index a27056ee5..657cd457f 100644 --- a/src/synth/synth-values.adb +++ b/src/synth/synth-values.adb @@ -803,7 +803,7 @@ package body Synth.Values is              raise Internal_Error;           when Type_Array =>              declare -               El_Typ : constant Type_Acc := Typ.Vec_El; +               El_Typ : constant Type_Acc := Get_Array_Element (Typ);                 Arr : Value_Array_Acc;              begin                 Arr := Create_Value_Array diff --git a/src/synth/synth-values.ads b/src/synth/synth-values.ads index bdf7aca84..4712eb2b7 100644 --- a/src/synth/synth-values.ads +++ b/src/synth/synth-values.ads @@ -214,8 +214,6 @@ package Synth.Values is              Scal : Int64;           when Value_Float =>              Fp : Fp64; -         when Value_Subtype => -            null;           when Value_Array             | Value_Const_Array =>              Arr : Value_Array_Acc; @@ -228,6 +226,8 @@ package Synth.Values is              File : File_Index;           when Value_Instance =>              Instance : Instance_Id; +         when Value_Subtype => +            null;           when Value_Const =>              C_Val : Value_Acc;              C_Loc : Syn_Src;  | 
