diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/synth/synth-expr.adb | 2 | ||||
-rw-r--r-- | src/synth/synth-oper.adb | 12 | ||||
-rw-r--r-- | src/synth/synth-oper.ads | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb index 545f6ba62..aa743c5e3 100644 --- a/src/synth/synth-expr.adb +++ b/src/synth/synth-expr.adb @@ -1557,7 +1557,7 @@ package body Synth.Expr is or else Def in Iir_Predefined_IEEE_Explicit then return Synth_Monadic_Operation - (Syn_Inst, Def, Get_Operand (Expr), Expr); + (Syn_Inst, Imp, Get_Operand (Expr), Expr); else Error_Unknown_Operator (Imp, Expr); raise Internal_Error; diff --git a/src/synth/synth-oper.adb b/src/synth/synth-oper.adb index 92508f36d..acb637918 100644 --- a/src/synth/synth-oper.adb +++ b/src/synth/synth-oper.adb @@ -751,10 +751,16 @@ package body Synth.Oper is end Synth_Dyadic_Operation; function Synth_Monadic_Operation (Syn_Inst : Synth_Instance_Acc; - Def : Iir_Predefined_Functions; + Imp : Node; Operand_Expr : Node; Loc : Node) return Value_Acc is + Def : constant Iir_Predefined_Functions := + Get_Implicit_Definition (Imp); + Inter_Chain : constant Node := + Get_Interface_Declaration_Chain (Imp); + Oper_Type : constant Node := Get_Type (Inter_Chain); + Oper_Typ : constant Type_Acc := Get_Value_Type (Syn_Inst, Oper_Type); Operand : Value_Acc; function Synth_Bit_Monadic (Id : Monadic_Module_Id) return Value_Acc @@ -787,7 +793,9 @@ package body Synth.Oper is return Create_Value_Net (N, Operand.Typ.Vec_El); end Synth_Vec_Reduce_Monadic; begin - Operand := Synth_Expression (Syn_Inst, Operand_Expr); + Operand := Synth_Expression_With_Type (Syn_Inst, Operand_Expr, Oper_Typ); + Operand := Synth_Subtype_Conversion (Operand, Oper_Typ, False, Loc); + case Def is when Iir_Predefined_Error => return null; diff --git a/src/synth/synth-oper.ads b/src/synth/synth-oper.ads index 69fbb232d..3f8e09bee 100644 --- a/src/synth/synth-oper.ads +++ b/src/synth/synth-oper.ads @@ -33,7 +33,7 @@ package Synth.Oper is Expr : Node) return Value_Acc; function Synth_Monadic_Operation (Syn_Inst : Synth_Instance_Acc; - Def : Iir_Predefined_Functions; + Imp : Node; Operand_Expr : Node; Loc : Node) return Value_Acc; end Synth.Oper; |