diff options
author | Tristan Gingold <tgingold@free.fr> | 2023-01-11 20:07:00 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2023-01-12 05:54:21 +0100 |
commit | 5bb4f4273d1d111f079e613945e08850bfb22dfa (patch) | |
tree | 47f566769f33da4f48d37b715ece036ffd000109 /src/synth | |
parent | ae9a0e6c531fd0eeceb8e416360312beb25c6a2c (diff) | |
download | ghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.tar.gz ghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.tar.bz2 ghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.zip |
synth: handle operator as conversion function
Diffstat (limited to 'src/synth')
-rw-r--r-- | src/synth/synth-vhdl_stmts.adb | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/synth/synth-vhdl_stmts.adb b/src/synth/synth-vhdl_stmts.adb index 969a70227..3ae37e2e9 100644 --- a/src/synth/synth-vhdl_stmts.adb +++ b/src/synth/synth-vhdl_stmts.adb @@ -52,6 +52,7 @@ with Synth.Errors; use Synth.Errors; with Synth.Vhdl_Decls; use Synth.Vhdl_Decls; with Synth.Vhdl_Expr; use Synth.Vhdl_Expr; with Synth.Vhdl_Insts; use Synth.Vhdl_Insts; +with Synth.Vhdl_Eval; with Synth.Source; with Synth.Vhdl_Static_Proc; with Synth.Flags; @@ -2285,7 +2286,18 @@ package body Synth.Vhdl_Stmts is begin case Get_Kind (Func) is when Iir_Kind_Function_Call => - Res := Exec_Resolution_Call (Inst, Get_Implementation (Func), Val); + declare + Imp : constant Node := Get_Implementation (Func); + Mt : Memtyp; + begin + if Get_Implicit_Definition (Imp) = Iir_Predefined_None then + Res := Exec_Resolution_Call (Inst, Imp, Val); + else + Mt := Synth.Vhdl_Eval.Eval_Static_Predefined_Function_Call + (Inst, Get_Memtyp (Val), Null_Memtyp, Res_Typ, Func); + Res := Create_Value_Memtyp (Mt); + end if; + end; when Iir_Kind_Type_Conversion => declare Conv_Typ : constant Type_Acc := |