aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2023-01-11 20:07:00 +0100
committerTristan Gingold <tgingold@free.fr>2023-01-12 05:54:21 +0100
commit5bb4f4273d1d111f079e613945e08850bfb22dfa (patch)
tree47f566769f33da4f48d37b715ece036ffd000109 /src
parentae9a0e6c531fd0eeceb8e416360312beb25c6a2c (diff)
downloadghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.tar.gz
ghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.tar.bz2
ghdl-5bb4f4273d1d111f079e613945e08850bfb22dfa.zip
synth: handle operator as conversion function
Diffstat (limited to 'src')
-rw-r--r--src/synth/synth-vhdl_stmts.adb14
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 :=