diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-05-15 18:39:50 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-05-15 18:39:50 +0200 |
commit | 7791faea231292a261acfaf8e5a6c4f256744df3 (patch) | |
tree | 60dc2b00629caafc287bdfe044922ca786d782ff /src/edif/edif-nodes_meta.adb | |
parent | 3d528d7ce6dc1848286c951dc7851f4361170a5b (diff) | |
download | ghdl-7791faea231292a261acfaf8e5a6c4f256744df3.tar.gz ghdl-7791faea231292a261acfaf8e5a6c4f256744df3.tar.bz2 ghdl-7791faea231292a261acfaf8e5a6c4f256744df3.zip |
Add edif parser.
Diffstat (limited to 'src/edif/edif-nodes_meta.adb')
-rw-r--r-- | src/edif/edif-nodes_meta.adb | 1062 |
1 files changed, 1062 insertions, 0 deletions
diff --git a/src/edif/edif-nodes_meta.adb b/src/edif/edif-nodes_meta.adb new file mode 100644 index 000000000..2b3368d31 --- /dev/null +++ b/src/edif/edif-nodes_meta.adb @@ -0,0 +1,1062 @@ +-- 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. + +package body Edif.Nodes_Meta is + Fields_Type : constant array (Fields_Enum) of Types_Enum := + ( + Field_CAR => Type_Node, + Field_CDR => Type_Node, + Field_Symbol => Type_Name_Id, + Field_Keyword => Type_Name_Id, + Field_Number => Type_Int32, + Field_String_Id => Type_String8_Id, + Field_String_Len => Type_Uns32, + Field_Name => Type_Node, + Field_Edif_Level => Type_Int32, + Field_Edif_Version => Type_Int32, + Field_Keyword_Map => Type_Node, + Field_Status => Type_Node, + Field_Chain => Type_Node, + Field_External_Chain => Type_Node, + Field_Library_Chain => Type_Node, + Field_Cells_Chain => Type_Node, + Field_Ports_Chain => Type_Node, + Field_Contents_Chain => Type_Node, + Field_Properties_Chain => Type_Node, + Field_Port_Instances_Chain => Type_Node, + Field_Joined_Chain => Type_Node, + Field_Design => Type_Node, + Field_Designator => Type_Node, + Field_Technology => Type_Node, + Field_Cell_Type => Type_Name_Id, + Field_View_Type => Type_Name_Id, + Field_Interface => Type_Node, + Field_View_Ref => Type_Name_Id, + Field_Cell_Ref => Type_Node, + Field_Library_Ref => Type_Node, + Field_View => Type_Node, + Field_Direction => Type_Direction_Type, + Field_Boolean => Type_Boolean, + Field_Value => Type_Node, + Field_Owner => Type_Node, + Field_Instance_Ref => Type_Node, + Field_Port => Type_Node, + Field_Index => Type_Int32, + Field_Array_Length => Type_Int32, + Field_Unit => Type_Name_Id, + Field_String => Type_Node + ); + + function Get_Field_Type (F : Fields_Enum) return Types_Enum is + begin + return Fields_Type (F); + end Get_Field_Type; + + function Get_Field_Image (F : Fields_Enum) return String is + begin + case F is + when Field_CAR => + return "car"; + when Field_CDR => + return "cdr"; + when Field_Symbol => + return "symbol"; + when Field_Keyword => + return "keyword"; + when Field_Number => + return "number"; + when Field_String_Id => + return "string_id"; + when Field_String_Len => + return "string_len"; + when Field_Name => + return "name"; + when Field_Edif_Level => + return "edif_level"; + when Field_Edif_Version => + return "edif_version"; + when Field_Keyword_Map => + return "keyword_map"; + when Field_Status => + return "status"; + when Field_Chain => + return "chain"; + when Field_External_Chain => + return "external_chain"; + when Field_Library_Chain => + return "library_chain"; + when Field_Cells_Chain => + return "cells_chain"; + when Field_Ports_Chain => + return "ports_chain"; + when Field_Contents_Chain => + return "contents_chain"; + when Field_Properties_Chain => + return "properties_chain"; + when Field_Port_Instances_Chain => + return "port_instances_chain"; + when Field_Joined_Chain => + return "joined_chain"; + when Field_Design => + return "design"; + when Field_Designator => + return "designator"; + when Field_Technology => + return "technology"; + when Field_Cell_Type => + return "cell_type"; + when Field_View_Type => + return "view_type"; + when Field_Interface => + return "interface"; + when Field_View_Ref => + return "view_ref"; + when Field_Cell_Ref => + return "cell_ref"; + when Field_Library_Ref => + return "library_ref"; + when Field_View => + return "view"; + when Field_Direction => + return "direction"; + when Field_Boolean => + return "boolean"; + when Field_Value => + return "value"; + when Field_Owner => + return "owner"; + when Field_Instance_Ref => + return "instance_ref"; + when Field_Port => + return "port"; + when Field_Index => + return "index"; + when Field_Array_Length => + return "array_length"; + when Field_Unit => + return "unit"; + when Field_String => + return "string"; + end case; + end Get_Field_Image; + + function Get_Nkind_Image (K : Nkind) return String is + begin + case K is + when N_Error => + return "error"; + when N_Keyword => + return "keyword"; + when N_Symbol => + return "symbol"; + when N_Number => + return "number"; + when N_String => + return "string"; + when N_Chain => + return "chain"; + when N_Edif => + return "edif"; + when N_External => + return "external"; + when N_Cell => + return "cell"; + when N_View => + return "view"; + when N_Port => + return "port"; + when N_Library => + return "library"; + when N_Interface => + return "interface"; + when N_Instance => + return "instance"; + when N_Net => + return "net"; + when N_Design => + return "design"; + when N_Port_Ref => + return "port_ref"; + when N_Cell_Ref => + return "cell_ref"; + when N_View_Ref => + return "view_ref"; + when N_Member => + return "member"; + when N_Property => + return "property"; + when N_Userdata => + return "userdata"; + when N_Port_Instance => + return "port_instance"; + when N_Array => + return "array"; + when N_Rename => + return "rename"; + when N_Boolean => + return "boolean"; + end case; + end Get_Nkind_Image; + + function Get_Field_Attribute (F : Fields_Enum) return Field_Attribute is + begin + case F is + when Field_CAR => + return Attr_None; + when Field_CDR => + return Attr_None; + when Field_Symbol => + return Attr_None; + when Field_Keyword => + return Attr_None; + when Field_Number => + return Attr_None; + when Field_String_Id => + return Attr_None; + when Field_String_Len => + return Attr_None; + when Field_Name => + return Attr_None; + when Field_Edif_Level => + return Attr_None; + when Field_Edif_Version => + return Attr_None; + when Field_Keyword_Map => + return Attr_None; + when Field_Status => + return Attr_None; + when Field_Chain => + return Attr_Chain_Next; + when Field_External_Chain => + return Attr_Chain; + when Field_Library_Chain => + return Attr_Chain; + when Field_Cells_Chain => + return Attr_Chain; + when Field_Ports_Chain => + return Attr_Chain; + when Field_Contents_Chain => + return Attr_Chain; + when Field_Properties_Chain => + return Attr_Chain; + when Field_Port_Instances_Chain => + return Attr_Chain; + when Field_Joined_Chain => + return Attr_Chain; + when Field_Design => + return Attr_None; + when Field_Designator => + return Attr_None; + when Field_Technology => + return Attr_None; + when Field_Cell_Type => + return Attr_None; + when Field_View_Type => + return Attr_None; + when Field_Interface => + return Attr_None; + when Field_View_Ref => + return Attr_None; + when Field_Cell_Ref => + return Attr_None; + when Field_Library_Ref => + return Attr_None; + when Field_View => + return Attr_None; + when Field_Direction => + return Attr_None; + when Field_Boolean => + return Attr_None; + when Field_Value => + return Attr_None; + when Field_Owner => + return Attr_None; + when Field_Instance_Ref => + return Attr_None; + when Field_Port => + return Attr_None; + when Field_Index => + return Attr_None; + when Field_Array_Length => + return Attr_None; + when Field_Unit => + return Attr_None; + when Field_String => + return Attr_None; + end case; + end Get_Field_Attribute; + + Fields_Of_Iir : constant Fields_Array := + ( + -- N_Error + -- N_Keyword + Field_Keyword, + Field_CDR, + -- N_Symbol + Field_Symbol, + -- N_Number + Field_Number, + -- N_String + Field_String_Id, + Field_String_Len, + -- N_Chain + Field_CAR, + Field_CDR, + -- N_Edif + Field_Name, + Field_Edif_Version, + Field_Edif_Level, + Field_Keyword_Map, + Field_Status, + Field_External_Chain, + Field_Library_Chain, + Field_Design, + -- N_External + Field_Name, + Field_Edif_Level, + Field_Technology, + Field_Cells_Chain, + Field_Chain, + -- N_Cell + Field_Name, + Field_Cell_Type, + Field_Properties_Chain, + Field_View, + Field_Chain, + -- N_View + Field_Name, + Field_View_Type, + Field_Interface, + Field_Properties_Chain, + Field_Contents_Chain, + Field_Chain, + -- N_Port + Field_Name, + Field_Direction, + Field_Properties_Chain, + Field_Designator, + Field_Chain, + -- N_Library + Field_Name, + Field_Edif_Level, + Field_Technology, + Field_Cells_Chain, + Field_Chain, + -- N_Interface + Field_Ports_Chain, + Field_Properties_Chain, + Field_Designator, + -- N_Instance + Field_Name, + Field_Instance_Ref, + Field_Port_Instances_Chain, + Field_Properties_Chain, + Field_Chain, + -- N_Net + Field_Name, + Field_Joined_Chain, + Field_Properties_Chain, + Field_Chain, + -- N_Design + Field_Name, + Field_Cell_Ref, + Field_Properties_Chain, + -- N_Port_Ref + Field_Port, + Field_Instance_Ref, + Field_Chain, + -- N_Cell_Ref + Field_Name, + Field_Library_Ref, + -- N_View_Ref + Field_Name, + Field_Cell_Ref, + -- N_Member + Field_Name, + Field_Index, + -- N_Property + Field_Name, + Field_Value, + Field_Owner, + Field_Unit, + Field_Chain, + -- N_Userdata + Field_Name, + Field_CDR, + Field_Chain, + -- N_Port_Instance + Field_Name, + Field_Properties_Chain, + Field_Chain, + -- N_Array + Field_Name, + Field_Array_Length, + -- N_Rename + Field_Name, + Field_String, + -- N_Boolean + Field_Boolean + ); + + Fields_Of_Iir_Last : constant array (Nkind) of Integer := + ( + N_Error => -1, + N_Keyword => 1, + N_Symbol => 2, + N_Number => 3, + N_String => 5, + N_Chain => 7, + N_Edif => 15, + N_External => 20, + N_Cell => 25, + N_View => 31, + N_Port => 36, + N_Library => 41, + N_Interface => 44, + N_Instance => 49, + N_Net => 53, + N_Design => 56, + N_Port_Ref => 59, + N_Cell_Ref => 61, + N_View_Ref => 63, + N_Member => 65, + N_Property => 70, + N_Userdata => 73, + N_Port_Instance => 76, + N_Array => 78, + N_Rename => 80, + N_Boolean => 81 + ); + + function Get_Fields (K : Nkind) return Fields_Array + is + First : Natural; + Last : Integer; + begin + if K = Nkind'First then + First := Fields_Of_Iir'First; + else + First := Fields_Of_Iir_Last (Nkind'Pred (K)) + 1; + end if; + Last := Fields_Of_Iir_Last (K); + return Fields_Of_Iir (First .. Last); + end Get_Fields; + + function Get_Boolean + (N : Node; F : Fields_Enum) return Boolean is + begin + pragma Assert (Fields_Type (F) = Type_Boolean); + case F is + when Field_Boolean => + return Get_Boolean (N); + when others => + raise Internal_Error; + end case; + end Get_Boolean; + + procedure Set_Boolean + (N : Node; F : Fields_Enum; V: Boolean) is + begin + pragma Assert (Fields_Type (F) = Type_Boolean); + case F is + when Field_Boolean => + Set_Boolean (N, V); + when others => + raise Internal_Error; + end case; + end Set_Boolean; + + function Get_Direction_Type + (N : Node; F : Fields_Enum) return Direction_Type is + begin + pragma Assert (Fields_Type (F) = Type_Direction_Type); + case F is + when Field_Direction => + return Get_Direction (N); + when others => + raise Internal_Error; + end case; + end Get_Direction_Type; + + procedure Set_Direction_Type + (N : Node; F : Fields_Enum; V: Direction_Type) is + begin + pragma Assert (Fields_Type (F) = Type_Direction_Type); + case F is + when Field_Direction => + Set_Direction (N, V); + when others => + raise Internal_Error; + end case; + end Set_Direction_Type; + + function Get_Int32 + (N : Node; F : Fields_Enum) return Int32 is + begin + pragma Assert (Fields_Type (F) = Type_Int32); + case F is + when Field_Number => + return Get_Number (N); + when Field_Edif_Level => + return Get_Edif_Level (N); + when Field_Edif_Version => + return Get_Edif_Version (N); + when Field_Index => + return Get_Index (N); + when Field_Array_Length => + return Get_Array_Length (N); + when others => + raise Internal_Error; + end case; + end Get_Int32; + + procedure Set_Int32 + (N : Node; F : Fields_Enum; V: Int32) is + begin + pragma Assert (Fields_Type (F) = Type_Int32); + case F is + when Field_Number => + Set_Number (N, V); + when Field_Edif_Level => + Set_Edif_Level (N, V); + when Field_Edif_Version => + Set_Edif_Version (N, V); + when Field_Index => + Set_Index (N, V); + when Field_Array_Length => + Set_Array_Length (N, V); + when others => + raise Internal_Error; + end case; + end Set_Int32; + + function Get_Name_Id + (N : Node; F : Fields_Enum) return Name_Id is + begin + pragma Assert (Fields_Type (F) = Type_Name_Id); + case F is + when Field_Symbol => + return Get_Symbol (N); + when Field_Keyword => + return Get_Keyword (N); + when Field_Cell_Type => + return Get_Cell_Type (N); + when Field_View_Type => + return Get_View_Type (N); + when Field_View_Ref => + return Get_View_Ref (N); + when Field_Unit => + return Get_Unit (N); + when others => + raise Internal_Error; + end case; + end Get_Name_Id; + + procedure Set_Name_Id + (N : Node; F : Fields_Enum; V: Name_Id) is + begin + pragma Assert (Fields_Type (F) = Type_Name_Id); + case F is + when Field_Symbol => + Set_Symbol (N, V); + when Field_Keyword => + Set_Keyword (N, V); + when Field_Cell_Type => + Set_Cell_Type (N, V); + when Field_View_Type => + Set_View_Type (N, V); + when Field_View_Ref => + Set_View_Ref (N, V); + when Field_Unit => + Set_Unit (N, V); + when others => + raise Internal_Error; + end case; + end Set_Name_Id; + + function Get_Node + (N : Node; F : Fields_Enum) return Node is + begin + pragma Assert (Fields_Type (F) = Type_Node); + case F is + when Field_CAR => + return Get_CAR (N); + when Field_CDR => + return Get_CDR (N); + when Field_Name => + return Get_Name (N); + when Field_Keyword_Map => + return Get_Keyword_Map (N); + when Field_Status => + return Get_Status (N); + when Field_Chain => + return Get_Chain (N); + when Field_External_Chain => + return Get_External_Chain (N); + when Field_Library_Chain => + return Get_Library_Chain (N); + when Field_Cells_Chain => + return Get_Cells_Chain (N); + when Field_Ports_Chain => + return Get_Ports_Chain (N); + when Field_Contents_Chain => + return Get_Contents_Chain (N); + when Field_Properties_Chain => + return Get_Properties_Chain (N); + when Field_Port_Instances_Chain => + return Get_Port_Instances_Chain (N); + when Field_Joined_Chain => + return Get_Joined_Chain (N); + when Field_Design => + return Get_Design (N); + when Field_Designator => + return Get_Designator (N); + when Field_Technology => + return Get_Technology (N); + when Field_Interface => + return Get_Interface (N); + when Field_Cell_Ref => + return Get_Cell_Ref (N); + when Field_Library_Ref => + return Get_Library_Ref (N); + when Field_View => + return Get_View (N); + when Field_Value => + return Get_Value (N); + when Field_Owner => + return Get_Owner (N); + when Field_Instance_Ref => + return Get_Instance_Ref (N); + when Field_Port => + return Get_Port (N); + when Field_String => + return Get_String (N); + when others => + raise Internal_Error; + end case; + end Get_Node; + + procedure Set_Node + (N : Node; F : Fields_Enum; V: Node) is + begin + pragma Assert (Fields_Type (F) = Type_Node); + case F is + when Field_CAR => + Set_CAR (N, V); + when Field_CDR => + Set_CDR (N, V); + when Field_Name => + Set_Name (N, V); + when Field_Keyword_Map => + Set_Keyword_Map (N, V); + when Field_Status => + Set_Status (N, V); + when Field_Chain => + Set_Chain (N, V); + when Field_External_Chain => + Set_External_Chain (N, V); + when Field_Library_Chain => + Set_Library_Chain (N, V); + when Field_Cells_Chain => + Set_Cells_Chain (N, V); + when Field_Ports_Chain => + Set_Ports_Chain (N, V); + when Field_Contents_Chain => + Set_Contents_Chain (N, V); + when Field_Properties_Chain => + Set_Properties_Chain (N, V); + when Field_Port_Instances_Chain => + Set_Port_Instances_Chain (N, V); + when Field_Joined_Chain => + Set_Joined_Chain (N, V); + when Field_Design => + Set_Design (N, V); + when Field_Designator => + Set_Designator (N, V); + when Field_Technology => + Set_Technology (N, V); + when Field_Interface => + Set_Interface (N, V); + when Field_Cell_Ref => + Set_Cell_Ref (N, V); + when Field_Library_Ref => + Set_Library_Ref (N, V); + when Field_View => + Set_View (N, V); + when Field_Value => + Set_Value (N, V); + when Field_Owner => + Set_Owner (N, V); + when Field_Instance_Ref => + Set_Instance_Ref (N, V); + when Field_Port => + Set_Port (N, V); + when Field_String => + Set_String (N, V); + when others => + raise Internal_Error; + end case; + end Set_Node; + + function Get_String8_Id + (N : Node; F : Fields_Enum) return String8_Id is + begin + pragma Assert (Fields_Type (F) = Type_String8_Id); + case F is + when Field_String_Id => + return Get_String_Id (N); + when others => + raise Internal_Error; + end case; + end Get_String8_Id; + + procedure Set_String8_Id + (N : Node; F : Fields_Enum; V: String8_Id) is + begin + pragma Assert (Fields_Type (F) = Type_String8_Id); + case F is + when Field_String_Id => + Set_String_Id (N, V); + when others => + raise Internal_Error; + end case; + end Set_String8_Id; + + function Get_Uns32 + (N : Node; F : Fields_Enum) return Uns32 is + begin + pragma Assert (Fields_Type (F) = Type_Uns32); + case F is + when Field_String_Len => + return Get_String_Len (N); + when others => + raise Internal_Error; + end case; + end Get_Uns32; + + procedure Set_Uns32 + (N : Node; F : Fields_Enum; V: Uns32) is + begin + pragma Assert (Fields_Type (F) = Type_Uns32); + case F is + when Field_String_Len => + Set_String_Len (N, V); + when others => + raise Internal_Error; + end case; + end Set_Uns32; + + function Has_CAR (K : Nkind) return Boolean is + begin + return K = N_Chain; + end Has_CAR; + + function Has_CDR (K : Nkind) return Boolean is + begin + case K is + when N_Keyword + | N_Chain + | N_Userdata => + return True; + when others => + return False; + end case; + end Has_CDR; + + function Has_Symbol (K : Nkind) return Boolean is + begin + return K = N_Symbol; + end Has_Symbol; + + function Has_Keyword (K : Nkind) return Boolean is + begin + return K = N_Keyword; + end Has_Keyword; + + function Has_Number (K : Nkind) return Boolean is + begin + return K = N_Number; + end Has_Number; + + function Has_String_Id (K : Nkind) return Boolean is + begin + return K = N_String; + end Has_String_Id; + + function Has_String_Len (K : Nkind) return Boolean is + begin + return K = N_String; + end Has_String_Len; + + function Has_Name (K : Nkind) return Boolean is + begin + case K is + when N_Edif + | N_External + | N_Cell + | N_View + | N_Port + | N_Library + | N_Instance + | N_Net + | N_Design + | N_Cell_Ref + | N_View_Ref + | N_Member + | N_Property + | N_Userdata + | N_Port_Instance + | N_Array + | N_Rename => + return True; + when others => + return False; + end case; + end Has_Name; + + function Has_Edif_Level (K : Nkind) return Boolean is + begin + case K is + when N_Edif + | N_External + | N_Library => + return True; + when others => + return False; + end case; + end Has_Edif_Level; + + function Has_Edif_Version (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_Edif_Version; + + function Has_Keyword_Map (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_Keyword_Map; + + function Has_Status (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_Status; + + function Has_Chain (K : Nkind) return Boolean is + begin + case K is + when N_External + | N_Cell + | N_View + | N_Port + | N_Library + | N_Instance + | N_Net + | N_Port_Ref + | N_Property + | N_Userdata + | N_Port_Instance => + return True; + when others => + return False; + end case; + end Has_Chain; + + function Has_External_Chain (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_External_Chain; + + function Has_Library_Chain (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_Library_Chain; + + function Has_Cells_Chain (K : Nkind) return Boolean is + begin + case K is + when N_External + | N_Library => + return True; + when others => + return False; + end case; + end Has_Cells_Chain; + + function Has_Ports_Chain (K : Nkind) return Boolean is + begin + return K = N_Interface; + end Has_Ports_Chain; + + function Has_Contents_Chain (K : Nkind) return Boolean is + begin + return K = N_View; + end Has_Contents_Chain; + + function Has_Properties_Chain (K : Nkind) return Boolean is + begin + case K is + when N_Cell + | N_View + | N_Port + | N_Interface + | N_Instance + | N_Net + | N_Design + | N_Port_Instance => + return True; + when others => + return False; + end case; + end Has_Properties_Chain; + + function Has_Port_Instances_Chain (K : Nkind) return Boolean is + begin + return K = N_Instance; + end Has_Port_Instances_Chain; + + function Has_Joined_Chain (K : Nkind) return Boolean is + begin + return K = N_Net; + end Has_Joined_Chain; + + function Has_Design (K : Nkind) return Boolean is + begin + return K = N_Edif; + end Has_Design; + + function Has_Designator (K : Nkind) return Boolean is + begin + case K is + when N_Port + | N_Interface => + return True; + when others => + return False; + end case; + end Has_Designator; + + function Has_Technology (K : Nkind) return Boolean is + begin + case K is + when N_External + | N_Library => + return True; + when others => + return False; + end case; + end Has_Technology; + + function Has_Cell_Type (K : Nkind) return Boolean is + begin + return K = N_Cell; + end Has_Cell_Type; + + function Has_View_Type (K : Nkind) return Boolean is + begin + return K = N_View; + end Has_View_Type; + + function Has_Interface (K : Nkind) return Boolean is + begin + return K = N_View; + end Has_Interface; + + function Has_View_Ref (K : Nkind) return Boolean is + pragma Unreferenced (K); + begin + return False; + end Has_View_Ref; + + function Has_Cell_Ref (K : Nkind) return Boolean is + begin + case K is + when N_Design + | N_View_Ref => + return True; + when others => + return False; + end case; + end Has_Cell_Ref; + + function Has_Library_Ref (K : Nkind) return Boolean is + begin + return K = N_Cell_Ref; + end Has_Library_Ref; + + function Has_View (K : Nkind) return Boolean is + begin + return K = N_Cell; + end Has_View; + + function Has_Direction (K : Nkind) return Boolean is + begin + return K = N_Port; + end Has_Direction; + + function Has_Boolean (K : Nkind) return Boolean is + begin + return K = N_Boolean; + end Has_Boolean; + + function Has_Value (K : Nkind) return Boolean is + begin + return K = N_Property; + end Has_Value; + + function Has_Owner (K : Nkind) return Boolean is + begin + return K = N_Property; + end Has_Owner; + + function Has_Instance_Ref (K : Nkind) return Boolean is + begin + case K is + when N_Instance + | N_Port_Ref => + return True; + when others => + return False; + end case; + end Has_Instance_Ref; + + function Has_Port (K : Nkind) return Boolean is + begin + return K = N_Port_Ref; + end Has_Port; + + function Has_Index (K : Nkind) return Boolean is + begin + return K = N_Member; + end Has_Index; + + function Has_Array_Length (K : Nkind) return Boolean is + begin + return K = N_Array; + end Has_Array_Length; + + function Has_Unit (K : Nkind) return Boolean is + begin + return K = N_Property; + end Has_Unit; + + function Has_String (K : Nkind) return Boolean is + begin + return K = N_Rename; + end Has_String; + +end Edif.Nodes_Meta; |