diff options
Diffstat (limited to 'src/synth/synth-values.adb')
-rw-r--r-- | src/synth/synth-values.adb | 107 |
1 files changed, 77 insertions, 30 deletions
diff --git a/src/synth/synth-values.adb b/src/synth/synth-values.adb index 2fbdd0d6a..45986eed1 100644 --- a/src/synth/synth-values.adb +++ b/src/synth/synth-values.adb @@ -61,10 +61,6 @@ package body Synth.Values is return Is_Static (Val.A_Obj); when Value_Const => return True; - when Value_Instance - | Value_Subtype => - -- Not really a value. - raise Internal_Error; end case; end Is_Static; @@ -91,10 +87,6 @@ package body Synth.Values is return True; when Value_Alias => return Is_Static_Val (Val.A_Obj); - when Value_Instance - | Value_Subtype => - -- Not really a value. - raise Internal_Error; end case; end Is_Static_Val; @@ -138,6 +130,11 @@ package body Synth.Values is end loop; end Strip_Alias_Const; + function Strip_Alias_Const (V : Valtyp) return Valtyp is + begin + return (V.Typ, Strip_Alias_Const (V.Val)); + end Strip_Alias_Const; + function Is_Equal (L, R : Value_Acc) return Boolean is L1 : constant Value_Acc := Strip_Alias_Const (L); @@ -525,6 +522,11 @@ package body Synth.Values is Typ => Wtype))); end Create_Value_Wire; + function Create_Value_Wire (W : Wire_Id; Wtype : Type_Acc) return Valtyp is + begin + return (Wtype, Create_Value_Wire (W, Wtype)); + end Create_Value_Wire; + function Create_Value_Net (N : Net; Ntype : Type_Acc) return Value_Acc is subtype Value_Type_Net is Value_Type (Value_Net); @@ -536,6 +538,11 @@ package body Synth.Values is Value_Type_Net'(Kind => Value_Net, N => N, Typ => Ntype))); end Create_Value_Net; + function Create_Value_Net (N : Net; Ntype : Type_Acc) return Valtyp is + begin + return (Ntype, Create_Value_Net (N, Ntype)); + end Create_Value_Net; + function Create_Value_Discrete (Val : Int64; Vtype : Type_Acc) return Value_Acc is @@ -548,6 +555,12 @@ package body Synth.Values is Typ => Vtype))); end Create_Value_Discrete; + function Create_Value_Discrete (Val : Int64; Vtype : Type_Acc) + return Valtyp is + begin + return (Vtype, Create_Value_Discrete (Val, Vtype)); + end Create_Value_Discrete; + function Create_Value_Float (Val : Fp64; Vtype : Type_Acc) return Value_Acc is subtype Value_Type_Float is Value_Type (Value_Float); @@ -560,6 +573,11 @@ package body Synth.Values is Fp => Val))); end Create_Value_Float; + function Create_Value_Float (Val : Fp64; Vtype : Type_Acc) return Valtyp is + begin + return (Vtype, Create_Value_Float (Val, Vtype)); + end Create_Value_Float; + function Create_Value_Access (Vtype : Type_Acc; Acc : Heap_Index) return Value_Acc is @@ -573,6 +591,12 @@ package body Synth.Values is Acc => Acc))); end Create_Value_Access; + function Create_Value_Access (Vtype : Type_Acc; Acc : Heap_Index) + return Valtyp is + begin + return (Vtype, Create_Value_Access (Vtype, Acc)); + end Create_Value_Access; + function Create_Value_File (Vtype : Type_Acc; File : File_Index) return Value_Acc is @@ -628,8 +652,14 @@ package body Synth.Values is return Res; end Create_Value_Array; + function Create_Value_Array (Bounds : Type_Acc; Arr : Value_Array_Acc) + return Valtyp is + begin + return (Bounds, Create_Value_Array (Bounds, Arr)); + end Create_Value_Array; + function Create_Value_Const_Array (Bounds : Type_Acc; Arr : Value_Array_Acc) - return Value_Acc + return Value_Acc is subtype Value_Type_Const_Array is Value_Type (Value_Const_Array); function Alloc is @@ -644,6 +674,12 @@ package body Synth.Values is return Res; end Create_Value_Const_Array; + function Create_Value_Const_Array (Bounds : Type_Acc; Arr : Value_Array_Acc) + return Valtyp is + begin + return (Bounds, Create_Value_Const_Array (Bounds, Arr)); + end Create_Value_Const_Array; + function Get_Array_Flat_Length (Typ : Type_Acc) return Width is begin case Typ.Kind is @@ -701,6 +737,12 @@ package body Synth.Values is Rec => Els))); end Create_Value_Record; + function Create_Value_Record (Typ : Type_Acc; Els : Value_Array_Acc) + return Valtyp is + begin + return (Typ, Create_Value_Record (Typ, Els)); + end Create_Value_Record; + function Create_Value_Const_Record (Typ : Type_Acc; Els : Value_Array_Acc) return Value_Acc is @@ -714,24 +756,11 @@ package body Synth.Values is Rec => Els))); end Create_Value_Const_Record; - function Create_Value_Instance (Inst : Instance_Id) return Value_Acc - is - subtype Value_Type_Instance is Value_Type (Value_Instance); - function Alloc is new Areapools.Alloc_On_Pool_Addr (Value_Type_Instance); - begin - return To_Value_Acc - (Alloc (Current_Pool, - (Kind => Value_Instance, Instance => Inst, Typ => null))); - end Create_Value_Instance; - - function Create_Value_Subtype (Typ : Type_Acc) return Value_Acc - is - subtype Value_Type_Subtype is Value_Type (Value_Subtype); - function Alloc is new Areapools.Alloc_On_Pool_Addr (Value_Type_Subtype); + function Create_Value_Const_Record (Typ : Type_Acc; Els : Value_Array_Acc) + return Valtyp is begin - return To_Value_Acc (Alloc (Current_Pool, - (Kind => Value_Subtype, Typ => Typ))); - end Create_Value_Subtype; + return (Typ, Create_Value_Const_Record (Typ, Els)); + end Create_Value_Const_Record; function Create_Value_Alias (Obj : Value_Acc; Off : Uns32; Typ : Type_Acc) return Value_Acc @@ -746,6 +775,12 @@ package body Synth.Values is Typ => Typ))); end Create_Value_Alias; + function Create_Value_Alias (Obj : Value_Acc; Off : Uns32; Typ : Type_Acc) + return Valtyp is + begin + return (Typ, Create_Value_Alias (Obj, Off, Typ)); + end Create_Value_Alias; + function Create_Value_Const (Val : Value_Acc; Loc : Syn_Src) return Value_Acc is @@ -761,6 +796,12 @@ package body Synth.Values is Typ => Val.Typ))); end Create_Value_Const; + function Create_Value_Const (Val : Valtyp; Loc : Syn_Src) + return Valtyp is + begin + return (Val.Typ, Create_Value_Const (Val.Val, Loc)); + end Create_Value_Const; + procedure Strip_Const (Val : in out Value_Acc) is begin if Val.Kind = Value_Const then @@ -777,6 +818,11 @@ package body Synth.Values is end if; end Strip_Const; + procedure Strip_Const (Vt : in out Valtyp) is + begin + Vt.Val := Strip_Const (Vt.Val); + end Strip_Const; + function Copy (Src : Value_Acc) return Value_Acc; function Copy_Array (Arr : Value_Array_Acc) return Value_Array_Acc @@ -804,8 +850,6 @@ package body Synth.Values is Res := Create_Value_Discrete (Src.Scal, Src.Typ); when Value_Float => Res := Create_Value_Float (Src.Fp, Src.Typ); - when Value_Subtype => - Res := Create_Value_Subtype (Src.Typ); when Value_Array => Arr := Copy_Array (Src.Arr); Res := Create_Value_Array (Src.Typ, Arr); @@ -822,8 +866,6 @@ package body Synth.Values is Res := Create_Value_Access (Src.Typ, Src.Acc); when Value_File => Res := Create_Value_File (Src.Typ, Src.File); - when Value_Instance => - raise Internal_Error; when Value_Const => raise Internal_Error; when Value_Alias => @@ -959,6 +1001,11 @@ package body Synth.Values is end case; end Create_Value_Default; + function Create_Value_Default (Typ : Type_Acc) return Valtyp is + begin + return (Typ, Create_Value_Default (Typ)); + end Create_Value_Default; + function Value_To_String (Val : Value_Acc) return String is Str : String (1 .. Natural (Val.Arr.Len)); |