diff options
| author | Tristan Gingold <tgingold@free.fr> | 2014-10-31 06:02:24 +0100 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2014-10-31 06:02:24 +0100 | 
| commit | 9e22ebad3dbc1065e13ccc56dfbb3418839b1002 (patch) | |
| tree | 19e03131fbbf6bf10f76fd85fc094e1528a11d98 | |
| parent | 2681711a47f7ada17aae9da74ecfc5af53262b6b (diff) | |
| download | ghdl-9e22ebad3dbc1065e13ccc56dfbb3418839b1002.tar.gz ghdl-9e22ebad3dbc1065e13ccc56dfbb3418839b1002.tar.bz2 ghdl-9e22ebad3dbc1065e13ccc56dfbb3418839b1002.zip | |
Add display of interface package.
| -rw-r--r-- | disp_vhdl.adb | 75 | ||||
| -rw-r--r-- | iirs.ads | 11 | 
2 files changed, 64 insertions, 22 deletions
| diff --git a/disp_vhdl.adb b/disp_vhdl.adb index eb7a44b16..73a8e420f 100644 --- a/disp_vhdl.adb +++ b/disp_vhdl.adb @@ -1081,15 +1081,39 @@ package body Disp_Vhdl is        loop           Next_Inter := Get_Chain (Inter);           Set_Col (Start); -         Disp_Interface_Class (Inter); -         Disp_Name_Of (Inter); -         while (Get_Lexical_Layout (Inter) and Iir_Lexical_Has_Type) = 0 loop -            Put (", "); -            Inter := Next_Inter; -            Next_Inter := Get_Chain (Inter); -            Disp_Name_Of (Inter); -         end loop; -         Disp_Interface_Mode_And_Type (Inter); + +         case Get_Kind (Inter) is +            when Iir_Kinds_Interface_Object_Declaration => +               Disp_Interface_Class (Inter); +               Disp_Name_Of (Inter); +               while (Get_Lexical_Layout (Inter) and Iir_Lexical_Has_Type) = 0 +               loop +                  Put (", "); +                  Inter := Next_Inter; +                  Next_Inter := Get_Chain (Inter); +                  Disp_Name_Of (Inter); +               end loop; +               Disp_Interface_Mode_And_Type (Inter); +            when Iir_Kind_Interface_Package_Declaration => +               Put ("package "); +               Disp_Identifier (Inter); +               Put (" is new "); +               Disp_Name (Get_Uninstantiated_Package_Name (Inter)); +               Put (" generic map "); +               declare +                  Assoc_Chain : constant Iir := +                    Get_Generic_Map_Aspect_Chain (Inter); +               begin +                  if Assoc_Chain = Null_Iir then +                     Put ("(<>)"); +                  else +                     Disp_Association_Chain (Assoc_Chain); +                  end if; +               end; +            when others => +               Error_Kind ("disp_interface_chain", Inter); +         end case; +           if Next_Inter /= Null_Iir then              Put (";");              if Comment_Col /= 0 then @@ -1102,6 +1126,7 @@ package body Disp_Vhdl is              Put (End_Str);              exit;           end if; +           Inter := Next_Inter;           Next_Inter := Get_Chain (Inter);        end loop; @@ -2183,6 +2208,8 @@ package body Disp_Vhdl is              if Need_Comma then                 Put (", ");              end if; + +            --  Formal part.              if Get_Kind (El) = Iir_Kind_Association_Element_By_Expression then                 Conv := Get_Out_Conversion (El);                 if Conv /= Null_Iir then @@ -2200,19 +2227,23 @@ package body Disp_Vhdl is                 end if;                 Put (" => ");              end if; -            if Get_Kind (El) = Iir_Kind_Association_Element_Open then -               Put ("open"); -            else -               Conv := Get_In_Conversion (El); -               if Conv /= Null_Iir then -                  Disp_Conversion (Conv); -                  Put (" ("); -               end if; -               Disp_Expression (Get_Actual (El)); -               if Conv /= Null_Iir then -                  Put (")"); -               end if; -            end if; + +            case Get_Kind (El) is +               when Iir_Kind_Association_Element_Open => +                  Put ("open"); +               when Iir_Kind_Association_Element_Package => +                  Disp_Name (Get_Actual (El)); +               when others => +                  Conv := Get_In_Conversion (El); +                  if Conv /= Null_Iir then +                     Disp_Conversion (Conv); +                     Put (" ("); +                  end if; +                  Disp_Expression (Get_Actual (El)); +                  if Conv /= Null_Iir then +                     Put (")"); +                  end if; +            end case;              Need_Comma := True;           end if;           El := Get_Chain (El); @@ -1133,6 +1133,17 @@ package Iirs is     -- Iir_Kind_Interface_Package_Declaration (Medium)     -- +   --  LRM08 6.5.5 Interface package declarations +   -- +   --  interface_package_declaration ::= +   --     PACKAGE identifier IS NEW /uninstantiated_package/_name +   --        interface_package_generic_map_aspect +   -- +   --  interface_package_generic_map_aspect ::= +   --       generic_map_aspect +   --     | GENERIC MAP ( <> )                  --  Represented by Null_Iir +   --     | GENERIC MAP ( DEFAULT )             --  Not yet implemented +   --     --   Get/Set_Parent (Field0)     --     --   Get/Set_Declaration_Chain (Field1) | 
