diff options
Diffstat (limited to 'src/vhdl/vhdl-nodes_meta.ads.in')
-rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads.in | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-nodes_meta.ads.in b/src/vhdl/vhdl-nodes_meta.ads.in new file mode 100644 index 000000000..fe345df78 --- /dev/null +++ b/src/vhdl/vhdl-nodes_meta.ads.in @@ -0,0 +1,73 @@ +-- Meta description of nodes. +-- Copyright (C) 2014 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GHDL; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. + +with Types; use Types; +with Vhdl.Nodes; use Vhdl.Nodes; +with Vhdl.Tokens; use Vhdl.Tokens; + +package Vhdl.Nodes_Meta is + -- The enumeration of all possible types in the nodes. + type Types_Enum is + ( + -- TYPES + ); + + -- The enumeration of all fields defined in iirs. + type Fields_Enum is + ( + -- FIELDS + ); + pragma Discard_Names (Fields_Enum); + + -- Return the type of field F. + function Get_Field_Type (F : Fields_Enum) return Types_Enum; + + -- Get the name of a field. + function Get_Field_Image (F : Fields_Enum) return String; + + -- Get the name of a kind. + function Get_Iir_Image (K : Iir_Kind) return String; + + -- Possible attributes of a field. + type Field_Attribute is + ( + -- ATTRS + ); + + -- Get the attribute of a field. + function Get_Field_Attribute (F : Fields_Enum) return Field_Attribute; + + type Fields_Index_Extended is new Int32; + subtype Fields_Index is Fields_Index_Extended + range 0 .. Fields_Index_Extended'Last; + + type Fields_Array is array (Fields_Index range <>) of Fields_Enum; + + -- Return the list of fields for node K. The fields are sorted: first + -- the non nodes/list of nodes, then the nodes/lists that aren't reference, + -- and then the reference. + function Get_Fields (K : Iir_Kind) return Fields_Array; + + -- Likewise, but without using arrays (for interfacing with C). + function Get_Fields_First (K : Iir_Kind) return Fields_Index; + function Get_Fields_Last (K : Iir_Kind) return Fields_Index; + function Get_Field_By_Index (Idx : Fields_Index) return Fields_Enum; + + -- Get/Set a field. + -- FUNCS +end Vhdl.Nodes_Meta; |