diff options
Diffstat (limited to 'src/ghdldrv/ghdlxml.adb')
-rw-r--r-- | src/ghdldrv/ghdlxml.adb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/ghdldrv/ghdlxml.adb b/src/ghdldrv/ghdlxml.adb index 5ce64b299..cc7a5c9f4 100644 --- a/src/ghdldrv/ghdlxml.adb +++ b/src/ghdldrv/ghdlxml.adb @@ -197,6 +197,17 @@ package body Ghdlxml is Put_Empty_Stag_End; end Disp_Iir_List_Ref; + procedure Disp_Iir_Flist_Ref (Id : String; L : Iir_Flist) is + begin + if L = Null_Iir_Flist then + return; + end if; + + Put_Stag (Id); + Put_Attribute ("flist-ref", Strip (Iir_Flist'Image (L))); + Put_Empty_Stag_End; + end Disp_Iir_Flist_Ref; + procedure Disp_Iir_Chain_Elements (Chain : Iir) is El : Iir; @@ -256,6 +267,41 @@ package body Ghdlxml is Put_Etag (Id); end Disp_Iir_List; + procedure Disp_Iir_Flist (Id : String; L : Iir_Flist; Ref : Boolean) + is + El : Iir; + begin + if L = Null_Iir_Flist then + return; + end if; + + Put_Stag (Id); + case L is + when Iir_Flist_All => + Put_Attribute ("flist-id", "all"); + Put_Empty_Stag_End; + return; + when Iir_Flist_Others => + Put_Attribute ("flist-id", "others"); + Put_Empty_Stag_End; + return; + when others => + Put_Attribute ("flist-id", Strip (Iir_Flist'Image (L))); + Put_Stag_End; + end case; + + for I in Flist_First .. Flist_Last (L) loop + El := Get_Nth_Element (L, I); + if Ref then + Disp_Iir_Ref ("el", El); + else + Disp_Iir ("el", El); + end if; + end loop; + + Put_Etag (Id); + end Disp_Iir_Flist; + procedure Disp_Iir (Id : String; N : Iir) is begin if N = Null_Iir then @@ -293,6 +339,8 @@ package body Ghdlxml is null; when Type_Iir_List => null; + when Type_Iir_Flist => + null; when Type_String8_Id => null; when Type_PSL_NFA => @@ -415,6 +463,24 @@ package body Ghdlxml is raise Internal_Error; end case; end; + when Type_Iir_Flist => + declare + L : constant Iir_Flist := Get_Iir_Flist (N, F); + Img : constant String := Get_Field_Image (F); + begin + case Get_Field_Attribute (F) is + when Attr_None => + Disp_Iir_Flist (Img, L, False); + when Attr_Of_Ref => + Disp_Iir_Flist (Img, L, True); + when Attr_Of_Maybe_Ref => + Disp_Iir_Flist (Img, L, Get_Is_Ref (N)); + when Attr_Ref => + Disp_Iir_Flist_Ref (Img, L); + when others => + raise Internal_Error; + end case; + end; when Type_String8_Id => -- Special handling for strings declare |