diff options
-rw-r--r-- | Makefile.in | 5 | ||||
-rw-r--r-- | src/grt/grt-lib.ads | 4 | ||||
-rw-r--r-- | src/grt/grt-processes.adb | 10 | ||||
-rw-r--r-- | src/std_names.adb | 144 | ||||
-rw-r--r-- | src/vhdl/Makefile (renamed from src/xtools/Makefile) | 30 | ||||
-rw-r--r-- | src/vhdl/errorout.adb | 2 | ||||
-rw-r--r-- | src/vhdl/iirs.ads | 498 | ||||
-rw-r--r-- | src/vhdl/simulate/annotations.adb | 6 | ||||
-rw-r--r-- | src/vhdl/simulate/annotations.ads | 2 | ||||
-rw-r--r-- | src/vhdl/translate/translation.adb | 2 | ||||
-rwxr-xr-x | src/xtools/pnodes.py | 65 |
11 files changed, 476 insertions, 292 deletions
diff --git a/Makefile.in b/Makefile.in index 1d3080b..16c549d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -194,7 +194,7 @@ libs.vhdl.llvmjit: $(MAKE) GHDL=ghdl_llvm_jit vhdl.libs.all libs.vhdl.llvm: - $(MAKE) GHDL=ghdl_llvm vhdl.libs.all + $(MAKE) GHDL=ghdl_llvm ANALYZE_OPTS="--GHDL1=ghdl1-llvm" vhdl.libs.all $(MAKE) GHDL1=./ghdl1-llvm libs.vhdl.standard ghdl_llvm: force @@ -240,7 +240,8 @@ LIBSRC_DIR:=$(srcdir)/libraries LIBDST_DIR:=$(libdirsuffix) GHDL=ghdl_$(backend) -ANALYZE:=$(libdirreverse)/../../$(GHDL) -a $(LIB_CFLAGS) +ANALYZE_OPTS:= +ANALYZE:=$(libdirreverse)/../../$(GHDL) -a $(ANALYZE_OPTS) $(LIB_CFLAGS) ANALYZE_DEP:=$(GHDL) include $(srcdir)/libraries/Makefile.inc diff --git a/src/grt/grt-lib.ads b/src/grt/grt-lib.ads index 4dac2c8..50be6a7 100644 --- a/src/grt/grt-lib.ads +++ b/src/grt/grt-lib.ads @@ -121,7 +121,7 @@ private "__ghdl_std_ulogic_to_boolean_array"); pragma Export (C, Ghdl_Get_Resolution_Limit, - "__ghdl_get_resolution_limit"); + "std__env__get_resolution_limit"); pragma Export (Ada, Ghdl_Control_Simulation, - "__ghdl_control_simulation"); + "std__env__control_simulation"); end Grt.Lib; diff --git a/src/grt/grt-processes.adb b/src/grt/grt-processes.adb index 0a905d8..4a124e6 100644 --- a/src/grt/grt-processes.adb +++ b/src/grt/grt-processes.adb @@ -564,14 +564,20 @@ package body Grt.Processes is is Lock : constant Object_Lock_Acc := To_Lock_Acc_Acc (Obj).all; begin - if Lock.Process = null then - if Lock.Count /= 0 then + if Lock.Count = 0 then + -- Protected object not locked. + if Lock.Process /= null then + -- Sanity check failed: count must be 0. Internal_Error ("protected_enter"); end if; + + -- Note: during elaboration, there is no current process. Lock.Process := Get_Current_Process; Lock.Count := 1; else + -- Protected object already locked. if Lock.Process /= Get_Current_Process then + -- Should be locked by the current process. Internal_Error ("protected_enter(2)"); end if; Lock.Count := Lock.Count + 1; diff --git a/src/std_names.adb b/src/std_names.adb index 98b4f06..3fa1b9d 100644 --- a/src/std_names.adb +++ b/src/std_names.adb @@ -16,7 +16,6 @@ -- Software Foundation, 59 Temple Place - Suite 330, Boston, MA -- 02111-1307, USA. with Name_Table; -with Tokens; use Tokens; with Ada.Exceptions; package body Std_Names is @@ -31,12 +30,143 @@ package body Std_Names is begin Name_Table.Initialize; - -- Create reserved words. - for I in Tok_Mod .. Tok_Tolerance loop - Def (Image (I), - Name_First_Keyword + - Token_Type'Pos (I) - Token_Type'Pos (Tok_First_Keyword)); - end loop; + Def ("mod", Name_Mod); + Def ("rem", Name_Rem); + + Def ("and", Name_And); + Def ("or", Name_Or); + Def ("xor", Name_Xor); + Def ("nand", Name_Nand); + Def ("nor", Name_Nor); + + Def ("abs", Name_Abs); + Def ("not", Name_Not); + + Def ("access", Name_Access); + Def ("after", Name_After); + Def ("alias", Name_Alias); + Def ("all", Name_All); + Def ("architecture", Name_Architecture); + Def ("array", Name_Array); + Def ("assert", Name_Assert); + Def ("attribute", Name_Attribute); + + Def ("begin", Name_Begin); + Def ("block", Name_Block); + Def ("body", Name_Body); + Def ("buffer", Name_Buffer); + Def ("bus", Name_Bus); + + Def ("case", Name_Case); + Def ("component", Name_Component); + Def ("configuration", Name_Configuration); + Def ("constant", Name_Constant); + + Def ("disconnect", Name_Disconnect); + Def ("downto", Name_Downto); + + Def ("else", Name_Else); + Def ("elsif", Name_Elsif); + Def ("end", Name_End); + Def ("entity", Name_Entity); + Def ("exit", Name_Exit); + + Def ("file", Name_File); + Def ("for", Name_For); + Def ("function", Name_Function); + + Def ("generate", Name_Generate); + Def ("generic", Name_Generic); + Def ("guarded", Name_Guarded); + + Def ("if", Name_If); + Def ("in", Name_In); + Def ("inout", Name_Inout); + Def ("is", Name_Is); + + Def ("label", Name_Label); + Def ("library", Name_Library); + Def ("linkage", Name_Linkage); + Def ("loop", Name_Loop); + + Def ("map", Name_Map); + + Def ("new", Name_New); + Def ("next", Name_Next); + Def ("null", Name_Null); + + Def ("of", Name_Of); + Def ("on", Name_On); + Def ("open", Name_Open); + Def ("others", Name_Others); + Def ("out", Name_Out); + + Def ("package", Name_Package); + Def ("port", Name_Port); + Def ("procedure", Name_Procedure); + Def ("process", Name_Process); + + Def ("range", Name_Range); + Def ("record", Name_Record); + Def ("register", Name_Register); + Def ("report", Name_Report); + Def ("return", Name_Return); + + Def ("select", Name_Select); + Def ("severity", Name_Severity); + Def ("signal", Name_Signal); + Def ("subtype", Name_Subtype); + + Def ("then", Name_Then); + Def ("to", Name_To); + Def ("transport", Name_Transport); + Def ("type", Name_Type); + + Def ("units", Name_Units); + Def ("until", Name_Until); + Def ("use", Name_Use); + + Def ("variable", Name_Variable); + + Def ("wait", Name_Wait); + Def ("when", Name_When); + Def ("while", Name_While); + Def ("with", Name_With); + + -- VHDL93 reserved words. + Def ("xnor", Name_Xnor); + Def ("group", Name_Group); + Def ("impure", Name_Impure); + Def ("inertial", Name_Inertial); + Def ("literal", Name_Literal); + Def ("postponed", Name_Postponed); + Def ("pure", Name_Pure); + Def ("reject", Name_Reject); + Def ("shared", Name_Shared); + Def ("unaffected", Name_Unaffected); + + Def ("sll", Name_Sll); + Def ("sla", Name_Sla); + Def ("sra", Name_Sra); + Def ("srl", Name_Srl); + Def ("rol", Name_Rol); + Def ("ror", Name_Ror); + + Def ("protected", Name_Protected); + + Def ("across", Name_Across); + Def ("break", Name_Break); + Def ("limit", Name_Limit); + Def ("nature", Name_Nature); + Def ("noise", Name_Noise); + Def ("procedural", Name_Procedural); + Def ("quantity", Name_Quantity); + Def ("reference", Name_Reference); + Def ("spectrum", Name_Spectrum); + Def ("subnature", Name_Subnature); + Def ("terminal", Name_Terminal); + Def ("through", Name_Through); + Def ("tolerance", Name_Tolerance); -- Create operators. Def ("=", Name_Op_Equality); diff --git a/src/xtools/Makefile b/src/vhdl/Makefile index a136dd7..e479f5c 100644 --- a/src/xtools/Makefile +++ b/src/vhdl/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold +# Copyright (C) 2002 - 2015 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 @@ -15,21 +15,33 @@ # Software Foundation, 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. -DEPS=../vhdl/iirs.ads ../vhdl/nodes.ads ./pnodes.py +# Some files are automatically generated using pnodes.py +# This Makefile can be used to regenerate these files. Generated files must +# be committed and distribued with the sources, so that users don't need to +# regenerate them (and don't need to have python installed). -all: ../vhdl/iirs.adb ../vhdl/nodes_meta.ads ../vhdl/nodes_meta.adb +PNODES=../xtools/pnodes.py -../vhdl/iirs.adb: ../vhdl/iirs.adb.in $(DEPS) +DEPS=iirs.ads nodes.ads $(PNODES) + +GEN_FILES=iirs.adb nodes_meta.ads nodes_meta.adb + +all: $(GEN_FILES) + +iirs.adb: iirs.adb.in $(DEPS) $(RM) $@ - ./pnodes.py body > $@ + $(PNODES) body > $@ chmod -w $@ -../vhdl/nodes_meta.ads: ../vhdl/nodes_meta.ads.in $(DEPS) +nodes_meta.ads: nodes_meta.ads.in $(DEPS) $(RM) $@ - ./pnodes.py meta_specs > $@ + $(PNODES) meta_specs > $@ chmod -w $@ -../vhdl/nodes_meta.adb: ../vhdl/nodes_meta.adb.in $(DEPS) +nodes_meta.adb: nodes_meta.adb.in $(DEPS) $(RM) $@ - ./pnodes.py meta_body > $@ + $(PNODES) meta_body > $@ chmod -w $@ + +clean: + $(RM) -f $(GEN_FILES) diff --git a/src/vhdl/errorout.adb b/src/vhdl/errorout.adb index 0923c59..877fea2 100644 --- a/src/vhdl/errorout.adb +++ b/src/vhdl/errorout.adb @@ -53,7 +53,7 @@ package body Errorout is is Str: constant String := Natural'Image (Val); begin - Put (Str(Str'First + 1 .. Str'Last)); + Put (Str (Str'First + 1 .. Str'Last)); end Disp_Natural; procedure Error_Msg (Msg: String) is diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads index 90e8045..db3826f 100644 --- a/src/vhdl/iirs.ads +++ b/src/vhdl/iirs.ads @@ -3408,281 +3408,281 @@ package Iirs is type Iir_Kind is - ( - Iir_Kind_Unused, - Iir_Kind_Error, + ( + Iir_Kind_Unused, + Iir_Kind_Error, - Iir_Kind_Design_File, - Iir_Kind_Design_Unit, - Iir_Kind_Library_Clause, - Iir_Kind_Use_Clause, + Iir_Kind_Design_File, + Iir_Kind_Design_Unit, + Iir_Kind_Library_Clause, + Iir_Kind_Use_Clause, -- Literals. - Iir_Kind_Integer_Literal, - Iir_Kind_Floating_Point_Literal, - Iir_Kind_Null_Literal, - Iir_Kind_String_Literal8, - Iir_Kind_Physical_Int_Literal, - Iir_Kind_Physical_Fp_Literal, - Iir_Kind_Simple_Aggregate, - Iir_Kind_Overflow_Literal, + Iir_Kind_Integer_Literal, + Iir_Kind_Floating_Point_Literal, + Iir_Kind_Null_Literal, + Iir_Kind_String_Literal8, + Iir_Kind_Physical_Int_Literal, + Iir_Kind_Physical_Fp_Literal, + Iir_Kind_Simple_Aggregate, + Iir_Kind_Overflow_Literal, -- Tuple, - Iir_Kind_Waveform_Element, - Iir_Kind_Conditional_Waveform, - Iir_Kind_Association_Element_By_Expression, - Iir_Kind_Association_Element_By_Individual, - Iir_Kind_Association_Element_Open, - Iir_Kind_Association_Element_Package, - Iir_Kind_Choice_By_Others, - Iir_Kind_Choice_By_Expression, - Iir_Kind_Choice_By_Range, - Iir_Kind_Choice_By_None, - Iir_Kind_Choice_By_Name, - Iir_Kind_Entity_Aspect_Entity, - Iir_Kind_Entity_Aspect_Configuration, - Iir_Kind_Entity_Aspect_Open, - Iir_Kind_Block_Configuration, - Iir_Kind_Block_Header, - Iir_Kind_Component_Configuration, - Iir_Kind_Binding_Indication, - Iir_Kind_Entity_Class, - Iir_Kind_Attribute_Value, - Iir_Kind_Signature, - Iir_Kind_Aggregate_Info, - Iir_Kind_Procedure_Call, - Iir_Kind_Record_Element_Constraint, - Iir_Kind_Array_Element_Resolution, - Iir_Kind_Record_Resolution, - Iir_Kind_Record_Element_Resolution, - - Iir_Kind_Attribute_Specification, - Iir_Kind_Disconnection_Specification, - Iir_Kind_Configuration_Specification, + Iir_Kind_Waveform_Element, + Iir_Kind_Conditional_Waveform, + Iir_Kind_Association_Element_By_Expression, + Iir_Kind_Association_Element_By_Individual, + Iir_Kind_Association_Element_Open, + Iir_Kind_Association_Element_Package, + Iir_Kind_Choice_By_Others, + Iir_Kind_Choice_By_Expression, + Iir_Kind_Choice_By_Range, + Iir_Kind_Choice_By_None, + Iir_Kind_Choice_By_Name, + Iir_Kind_Entity_Aspect_Entity, + Iir_Kind_Entity_Aspect_Configuration, + Iir_Kind_Entity_Aspect_Open, + Iir_Kind_Block_Configuration, + Iir_Kind_Block_Header, + Iir_Kind_Component_Configuration, + Iir_Kind_Binding_Indication, + Iir_Kind_Entity_Class, + Iir_Kind_Attribute_Value, + Iir_Kind_Signature, + Iir_Kind_Aggregate_Info, + Iir_Kind_Procedure_Call, + Iir_Kind_Record_Element_Constraint, + Iir_Kind_Array_Element_Resolution, + Iir_Kind_Record_Resolution, + Iir_Kind_Record_Element_Resolution, + + Iir_Kind_Attribute_Specification, + Iir_Kind_Disconnection_Specification, + Iir_Kind_Configuration_Specification, -- Type definitions. -- iir_kinds_type_and_subtype_definition -- kinds: disc: discrete, st: subtype. - Iir_Kind_Access_Type_Definition, - Iir_Kind_Incomplete_Type_Definition, - Iir_Kind_File_Type_Definition, - Iir_Kind_Protected_Type_Declaration, - Iir_Kind_Record_Type_Definition, -- composite - Iir_Kind_Array_Type_Definition, -- composite, array - Iir_Kind_Array_Subtype_Definition, -- composite, array, st - Iir_Kind_Record_Subtype_Definition, -- composite, st - Iir_Kind_Access_Subtype_Definition, -- st - Iir_Kind_Physical_Subtype_Definition, -- scalar, st, rng - Iir_Kind_Floating_Subtype_Definition, -- scalar, st, rng - Iir_Kind_Integer_Subtype_Definition, -- scalar, disc, st, rng - Iir_Kind_Enumeration_Subtype_Definition, -- scalar, disc, st, rng - Iir_Kind_Enumeration_Type_Definition, -- scalar, disc, rng - Iir_Kind_Integer_Type_Definition, -- scalar, disc - Iir_Kind_Floating_Type_Definition, -- scalar - Iir_Kind_Physical_Type_Definition, -- scalar - Iir_Kind_Range_Expression, - Iir_Kind_Protected_Type_Body, - Iir_Kind_Subtype_Definition, -- temporary (must not appear after sem). + Iir_Kind_Access_Type_Definition, + Iir_Kind_Incomplete_Type_Definition, + Iir_Kind_File_Type_Definition, + Iir_Kind_Protected_Type_Declaration, + Iir_Kind_Record_Type_Definition, -- composite + Iir_Kind_Array_Type_Definition, -- composite, array + Iir_Kind_Array_Subtype_Definition, -- composite, array, st + Iir_Kind_Record_Subtype_Definition, -- composite, st + Iir_Kind_Access_Subtype_Definition, -- st + Iir_Kind_Physical_Subtype_Definition, -- scalar, st, rng + Iir_Kind_Floating_Subtype_Definition, -- scalar, st, rng + Iir_Kind_Integer_Subtype_Definition, -- scalar, disc, st, rng + Iir_Kind_Enumeration_Subtype_Definition, -- scalar, disc, st, rng + Iir_Kind_Enumeration_Type_Definition, -- scalar, disc, rng + Iir_Kind_Integer_Type_Definition, -- scalar, disc + Iir_Kind_Floating_Type_Definition, -- scalar + Iir_Kind_Physical_Type_Definition, -- scalar + Iir_Kind_Range_Expression, + Iir_Kind_Protected_Type_Body, + Iir_Kind_Subtype_Definition, -- temporary (must not appear after sem). -- Nature definition - Iir_Kind_Scalar_Nature_Definition, + Iir_Kind_Scalar_Nature_Definition, -- Lists. - Iir_Kind_Overload_List, -- used internally by sem_expr. + Iir_Kind_Overload_List, -- used internally by sem_expr. -- Declarations. - Iir_Kind_Type_Declaration, - Iir_Kind_Anonymous_Type_Declaration, - Iir_Kind_Subtype_Declaration, - Iir_Kind_Nature_Declaration, - Iir_Kind_Subnature_Declaration, - Iir_Kind_Package_Declaration, - Iir_Kind_Package_Instantiation_Declaration, - Iir_Kind_Package_Body, - Iir_Kind_Configuration_Declaration, - Iir_Kind_Entity_Declaration, - Iir_Kind_Architecture_Body, - Iir_Kind_Package_Header, - Iir_Kind_Unit_Declaration, - Iir_Kind_Library_Declaration, - Iir_Kind_Component_Declaration, - Iir_Kind_Attribute_Declaration, - Iir_Kind_Group_Template_Declaration, - Iir_Kind_Group_Declaration, - Iir_Kind_Element_Declaration, - Iir_Kind_Non_Object_Alias_Declaration, - - Iir_Kind_Psl_Declaration, - Iir_Kind_Terminal_Declaration, - Iir_Kind_Free_Quantity_Declaration, - Iir_Kind_Across_Quantity_Declaration, - Iir_Kind_Through_Quantity_Declaration, - - Iir_Kind_Enumeration_Literal, - Iir_Kind_Function_Declaration, -- Subprg, Func - Iir_Kind_Procedure_Declaration, -- Subprg, Proc - Iir_Kind_Function_Body, - Iir_Kind_Procedure_Body, - - Iir_Kind_Object_Alias_Declaration, -- object - Iir_Kind_File_Declaration, -- object - Iir_Kind_Guard_Signal_Declaration, -- object - Iir_Kind_Signal_Declaration, -- object - Iir_Kind_Variable_Declaration, -- object - Iir_Kind_Constant_Declaration, -- object - Iir_Kind_Iterator_Declaration, -- object - Iir_Kind_Interface_Constant_Declaration, -- object, interface - Iir_Kind_Interface_Variable_Declaration, -- object, interface - Iir_Kind_Interface_Signal_Declaration, -- object, interface - Iir_Kind_Interface_File_Declaration, -- object, interface - Iir_Kind_Interface_Package_Declaration, + Iir_Kind_Type_Declaration, + Iir_Kind_Anonymous_Type_Declaration, + Iir_Kind_Subtype_Declaration, + Iir_Kind_Nature_Declaration, + Iir_Kind_Subnature_Declaration, + Iir_Kind_Package_Declaration, + Iir_Kind_Package_Instantiation_Declaration, + Iir_Kind_Package_Body, + Iir_Kind_Configuration_Declaration, + Iir_Kind_Entity_Declaration, + Iir_Kind_Architecture_Body, + Iir_Kind_Package_Header, + Iir_Kind_Unit_Declaration, + Iir_Kind_Library_Declaration, + Iir_Kind_Component_Declaration, + Iir_Kind_Attribute_Declaration, + Iir_Kind_Group_Template_Declaration, + Iir_Kind_Group_Declaration, + Iir_Kind_Element_Declaration, + Iir_Kind_Non_Object_Alias_Declaration, + + Iir_Kind_Psl_Declaration, + Iir_Kind_Terminal_Declaration, + Iir_Kind_Free_Quantity_Declaration, + Iir_Kind_Across_Quantity_Declaration, + Iir_Kind_Through_Quantity_Declaration, + + Iir_Kind_Enumeration_Literal, + Iir_Kind_Function_Declaration, -- Subprg, Func + Iir_Kind_Procedure_Declaration, -- Subprg, Proc + Iir_Kind_Function_Body, + Iir_Kind_Procedure_Body, + + Iir_Kind_Object_Alias_Declaration, -- object + Iir_Kind_File_Declaration, -- object + Iir_Kind_Guard_Signal_Declaration, -- object + Iir_Kind_Signal_Declaration, -- object + Iir_Kind_Variable_Declaration, -- object + Iir_Kind_Constant_Declaration, -- object + Iir_Kind_Iterator_Declaration, -- object + Iir_Kind_Interface_Constant_Declaration, -- object, interface + Iir_Kind_Interface_Variable_Declaration, -- object, interface + Iir_Kind_Interface_Signal_Declaration, -- object, interface + Iir_Kind_Interface_File_Declaration, -- object, interface + Iir_Kind_Interface_Package_Declaration, -- Expressions. - Iir_Kind_Identity_Operator, - Iir_Kind_Negation_Operator, - Iir_Kind_Absolute_Operator, - Iir_Kind_Not_Operator, - Iir_Kind_Condition_Operator, - Iir_Kind_Reduction_And_Operator, - Iir_Kind_Reduction_Or_Operator, - Iir_Kind_Reduction_Nand_Operator, - Iir_Kind_Reduction_Nor_Operator, - Iir_Kind_Reduction_Xor_Operator, - Iir_Kind_Reduction_Xnor_Operator, - Iir_Kind_And_Operator, - Iir_Kind_Or_Operator, - Iir_Kind_Nand_Operator, - Iir_Kind_Nor_Operator, - Iir_Kind_Xor_Operator, - Iir_Kind_Xnor_Operator, - Iir_Kind_Equality_Operator, - Iir_Kind_Inequality_Operator, - Iir_Kind_Less_Than_Operator, - Iir_Kind_Less_Than_Or_Equal_Operator, - Iir_Kind_Greater_Than_Operator, - Iir_Kind_Greater_Than_Or_Equal_Operator, - Iir_Kind_Match_Equality_Operator, - Iir_Kind_Match_Inequality_Operator, - Iir_Kind_Match_Less_Than_Operator, - Iir_Kind_Match_Less_Than_Or_Equal_Operator, - Iir_Kind_Match_Greater_Than_Operator, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator, - Iir_Kind_Sll_Operator, - Iir_Kind_Sla_Operator, - Iir_Kind_Srl_Operator, - Iir_Kind_Sra_Operator, - Iir_Kind_Rol_Operator, - Iir_Kind_Ror_Operator, - Iir_Kind_Addition_Operator, - Iir_Kind_Substraction_Operator, - Iir_Kind_Concatenation_Operator, - Iir_Kind_Multiplication_Operator, - Iir_Kind_Division_Operator, - Iir_Kind_Modulus_Operator, - Iir_Kind_Remainder_Operator, - Iir_Kind_Exponentiation_Operator, - Iir_Kind_Function_Call, - Iir_Kind_Aggregate, - Iir_Kind_Parenthesis_Expression, - Iir_Kind_Qualified_Expression, - Iir_Kind_Type_Conversion, - Iir_Kind_Allocator_By_Expression, - Iir_Kind_Allocator_By_Subtype, - Iir_Kind_Selected_Element, - Iir_Kind_Dereference, - Iir_Kind_Implicit_Dereference, - Iir_Kind_Slice_Name, - Iir_Kind_Indexed_Name, - Iir_Kind_Psl_Expression, + Iir_Kind_Identity_Operator, + Iir_Kind_Negation_Operator, + Iir_Kind_Absolute_Operator, + Iir_Kind_Not_Operator, + Iir_Kind_Condition_Operator, + Iir_Kind_Reduction_And_Operator, + Iir_Kind_Reduction_Or_Operator, + Iir_Kind_Reduction_Nand_Operator, + Iir_Kind_Reduction_Nor_Operator, + Iir_Kind_Reduction_Xor_Operator, + Iir_Kind_Reduction_Xnor_Operator, + Iir_Kind_And_Operator, + Iir_Kind_Or_Operator, + Iir_Kind_Nand_Operator, + Iir_Kind_Nor_Operator, + Iir_Kind_Xor_Operator, + Iir_Kind_Xnor_Operator, + Iir_Kind_Equality_Operator, + Iir_Kind_Inequality_Operator, + Iir_Kind_Less_Than_Operator, + Iir_Kind_Less_Than_Or_Equal_Operator, + Iir_Kind_Greater_Than_Operator, + Iir_Kind_Greater_Than_Or_Equal_Operator, + Iir_Kind_Match_Equality_Operator, + Iir_Kind_Match_Inequality_Operator, + Iir_Kind_Match_Less_Than_Operator, + Iir_Kind_Match_Less_Than_Or_Equal_Operator, + Iir_Kind_Match_Greater_Than_Operator, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator, + Iir_Kind_Sll_Operator, + Iir_Kind_Sla_Operator, + Iir_Kind_Srl_Operator, + Iir_Kind_Sra_Operator, + Iir_Kind_Rol_Operator, + Iir_Kind_Ror_Operator, + Iir_Kind_Addition_Operator, + Iir_Kind_Substraction_Operator, + Iir_Kind_Concatenation_Operator, + Iir_Kind_Multiplication_Operator, + Iir_Kind_Division_Operator, + Iir_Kind_Modulus_Operator, + Iir_Kind_Remainder_Operator, + Iir_Kind_Exponentiation_Operator, + Iir_Kind_Function_Call, + Iir_Kind_Aggregate, + Iir_Kind_Parenthesis_Expression, + Iir_Kind_Qualified_Expression, + Iir_Kind_Type_Conversion, + Iir_Kind_Allocator_By_Expression, + Iir_Kind_Allocator_By_Subtype, + Iir_Kind_Selected_Element, + Iir_Kind_Dereference, + Iir_Kind_Implicit_Dereference, + Iir_Kind_Slice_Name, + Iir_Kind_Indexed_Name, + Iir_Kind_Psl_Expression, -- Concurrent statements. - Iir_Kind_Sensitized_Process_Statement, - Iir_Kind_Process_Statement, - Iir_Kind_Concurrent_Conditional_Signal_Assignment, - Iir_Kind_Concurrent_Selected_Signal_Assignment, - Iir_Kind_Concurrent_Assertion_Statement, - Iir_Kind_Psl_Default_Clock, - Iir_Kind_Psl_Assert_Statement, - Iir_Kind_Psl_Cover_Statement, - Iir_Kind_Concurrent_Procedure_Call_Statement, - Iir_Kind_Block_Statement, - Iir_Kind_If_Generate_Statement, - Iir_Kind_For_Generate_Statement, - Iir_Kind_Component_Instantiation_Statement, - - Iir_Kind_Simple_Simultaneous_Statement, - - Iir_Kind_Generate_Statement_Body, - Iir_Kind_If_Generate_Else_Clause, + Iir_Kind_Sensitized_Process_Statement, + Iir_Kind_Process_Statement, + Iir_Kind_Concurrent_Conditional_Signal_Assignment, + Iir_Kind_Concurrent_Selected_Signal_Assignment, + Iir_Kind_Concurrent_Assertion_Statement, + Iir_Kind_Psl_Default_Clock, + Iir_Kind_Psl_Assert_Statement, + Iir_Kind_Psl_Cover_Statement, + Iir_Kind_Concurrent_Procedure_Call_Statement, + Iir_Kind_Block_Statement, + Iir_Kind_If_Generate_Statement, + Iir_Kind_For_Generate_Statement, + Iir_Kind_Component_Instantiation_Statement, + + Iir_Kind_Simple_Simultaneous_Statement, + + Iir_Kind_Generate_Statement_Body, + Iir_Kind_If_Generate_Else_Clause, -- Iir_Kind_Sequential_Statement - Iir_Kind_Signal_Assignment_Statement, - Iir_Kind_Null_Statement, - Iir_Kind_Assertion_Statement, - Iir_Kind_Report_Statement, - Iir_Kind_Wait_Statement, - Iir_Kind_Variable_Assignment_Statement, - Iir_Kind_Return_Statement, - Iir_Kind_For_Loop_Statement, - Iir_Kind_While_Loop_Statement, - Iir_Kind_Next_Statement, - Iir_Kind_Exit_Statement, - Iir_Kind_Case_Statement, - Iir_Kind_Procedure_Call_Statement, - Iir_Kind_If_Statement, - Iir_Kind_Elsif, + Iir_Kind_Signal_Assignment_Statement, + Iir_Kind_Null_Statement, + Iir_Kind_Assertion_Statement, + Iir_Kind_Report_Statement, + Iir_Kind_Wait_Statement, + Iir_Kind_Variable_Assignment_Statement, + Iir_Kind_Return_Statement, + Iir_Kind_For_Loop_Statement, + Iir_Kind_While_Loop_Statement, + Iir_Kind_Next_Statement, + Iir_Kind_Exit_Statement, + Iir_Kind_Case_Statement, + Iir_Kind_Procedure_Call_Statement, + Iir_Kind_If_Statement, + Iir_Kind_Elsif, -- Names - Iir_Kind_Character_Literal, -- denoting_name - Iir_Kind_Simple_Name, -- denoting_name - Iir_Kind_Selected_Name, -- denoting_name - Iir_Kind_Operator_Symbol, -- denoting_name + Iir_Kind_Character_Literal, -- denoting_name + Iir_Kind_Simple_Name, -- denoting_name + Iir_Kind_Selected_Name, -- denoting_name + Iir_Kind_Operator_Symbol, -- denoting_name - Iir_Kind_Selected_By_All_Name, - Iir_Kind_Parenthesis_Name, + Iir_Kind_Selected_By_All_Name, + Iir_Kind_Parenthesis_Name, -- Attributes - Iir_Kind_Base_Attribute, - Iir_Kind_Left_Type_Attribute, -- type_attribute - Iir_Kind_Right_Type_Attribute, -- type_attribute - Iir_Kind_High_Type_Attribute, -- type_attribute - Iir_Kind_Low_Type_Attribute, -- type_attribute - Iir_Kind_Ascending_Type_Attribute, -- type_attribute - Iir_Kind_Image_Attribute, - Iir_Kind_Value_Attribute, - Iir_Kind_Pos_Attribute, -- scalar_type_attribute - Iir_Kind_Val_Attribute, -- scalar_type_attribute - Iir_Kind_Succ_Attribute, -- scalar_type_attribute - Iir_Kind_Pred_Attribute, -- scalar_type_attribute - Iir_Kind_Leftof_Attribute, -- scalar_type_attribute - Iir_Kind_Rightof_Attribute, -- scalar_type_attribute - Iir_Kind_Delayed_Attribute, -- signal_attribute - Iir_Kind_Stable_Attribute, -- signal_attribute - Iir_Kind_Quiet_Attribute, -- signal_attribute - Iir_Kind_Transaction_Attribute, -- signal_attribute - Iir_Kind_Event_Attribute, -- signal_value_attribute - Iir_Kind_Active_Attribute, -- signal_value_attribute - Iir_Kind_Last_Event_Attribute, -- signal_value_attribute - Iir_Kind_Last_Active_Attribute, -- signal_value_attribute - Iir_Kind_Last_Value_Attribute, -- signal_value_attribute - Iir_Kind_Driving_Attribute, -- signal_value_attribute - Iir_Kind_Driving_Value_Attribute, -- signal_value_attribute - Iir_Kind_Behavior_Attribute, - Iir_Kind_Structure_Attribute, - Iir_Kind_Simple_Name_Attribute, - Iir_Kind_Instance_Name_Attribute, - Iir_Kind_Path_Name_Attribute, - Iir_Kind_Left_Array_Attribute, -- array_attribute - Iir_Kind_Right_Array_Attribute, -- array_attribute - Iir_Kind_High_Array_Attribute, -- array_attribute - Iir_Kind_Low_Array_Attribute, -- array_attribute - Iir_Kind_Length_Array_Attribute, -- array_attribute - Iir_Kind_Ascending_Array_Attribute, -- array_attribute - Iir_Kind_Range_Array_Attribute, -- array_attribute - Iir_Kind_Reverse_Range_Array_Attribute, -- array_attribute - - Iir_Kind_Attribute_Name - ); + Iir_Kind_Base_Attribute, + Iir_Kind_Left_Type_Attribute, -- type_attribute + Iir_Kind_Right_Type_Attribute, -- type_attribute + Iir_Kind_High_Type_Attribute, -- type_attribute + Iir_Kind_Low_Type_Attribute, -- type_attribute + Iir_Kind_Ascending_Type_Attribute, -- type_attribute + Iir_Kind_Image_Attribute, + Iir_Kind_Value_Attribute, + Iir_Kind_Pos_Attribute, -- scalar_type_attribute + Iir_Kind_Val_Attribute, -- scalar_type_attribute + Iir_Kind_Succ_Attribute, -- scalar_type_attribute + Iir_Kind_Pred_Attribute, -- scalar_type_attribute + Iir_Kind_Leftof_Attribute, -- scalar_type_attribute + Iir_Kind_Rightof_Attribute, -- scalar_type_attribute + Iir_Kind_Delayed_Attribute, -- signal_attribute + Iir_Kind_Stable_Attribute, -- signal_attribute + Iir_Kind_Quiet_Attribute, -- signal_attribute + Iir_Kind_Transaction_Attribute, -- signal_attribute + Iir_Kind_Event_Attribute, -- signal_value_attribute + Iir_Kind_Active_Attribute, -- signal_value_attribute + Iir_Kind_Last_Event_Attribute, -- signal_value_attribute + Iir_Kind_Last_Active_Attribute, -- signal_value_attribute + Iir_Kind_Last_Value_Attribute, -- signal_value_attribute + Iir_Kind_Driving_Attribute, -- signal_value_attribute + Iir_Kind_Driving_Value_Attribute, -- signal_value_attribute + Iir_Kind_Behavior_Attribute, + Iir_Kind_Structure_Attribute, + Iir_Kind_Simple_Name_Attribute, + Iir_Kind_Instance_Name_Attribute, + Iir_Kind_Path_Name_Attribute, + Iir_Kind_Left_Array_Attribute, -- array_attribute + Iir_Kind_Right_Array_Attribute, -- array_attribute + Iir_Kind_High_Array_Attribute, -- array_attribute + Iir_Kind_Low_Array_Attribute, -- array_attribute + Iir_Kind_Length_Array_Attribute, -- array_attribute + Iir_Kind_Ascending_Array_Attribute, -- array_attribute + Iir_Kind_Range_Array_Attribute, -- array_attribute + Iir_Kind_Reverse_Range_Array_Attribute, -- array_attribute + + Iir_Kind_Attribute_Name + ); type Iir_Signal_Kind is ( diff --git a/src/vhdl/simulate/annotations.adb b/src/vhdl/simulate/annotations.adb index 6548236..fb19399 100644 --- a/src/vhdl/simulate/annotations.adb +++ b/src/vhdl/simulate/annotations.adb @@ -240,7 +240,7 @@ package body Annotations is Prot_Info := new Sim_Info_Type'(Kind => Kind_Frame, - Inst_Slot => 0, + Inst_Slot => Invalid_Instance_Slot, Frame_Scope => Current_Scope, Nbr_Objects => 0, Nbr_Instances => 0); @@ -501,7 +501,7 @@ package body Annotations is Subprg_Info := new Sim_Info_Type'(Kind => Kind_Frame, - Inst_Slot => 0, + Inst_Slot => Invalid_Instance_Slot, Frame_Scope => Current_Scope, Nbr_Objects => 0, Nbr_Instances => 0); @@ -1010,7 +1010,7 @@ package body Annotations is Package_Info := new Sim_Info_Type' (Kind => Kind_Block, - Inst_Slot => Instance_Slot_Type (Nbr_Packages), + Inst_Slot => Invalid_Instance_Slot, Frame_Scope => Current_Scope, Nbr_Objects => 0, Nbr_Instances => 0); diff --git a/src/vhdl/simulate/annotations.ads b/src/vhdl/simulate/annotations.ads index cb0d94a..5d927b5 100644 --- a/src/vhdl/simulate/annotations.ads +++ b/src/vhdl/simulate/annotations.ads @@ -85,7 +85,7 @@ package Annotations is when Kind_Block | Kind_Frame | Kind_Process => - -- Slot number. + -- Slot number in the parent (for blocks). Inst_Slot : Instance_Slot_Type; -- scope level for this frame. diff --git a/src/vhdl/translate/translation.adb b/src/vhdl/translate/translation.adb index 38d8f97..9037f16 100644 --- a/src/vhdl/translate/translation.adb +++ b/src/vhdl/translate/translation.adb @@ -1786,7 +1786,7 @@ package body Translation is ("__ghdl_to_string_p64", Ghdl_To_String_P64, Ghdl_I64_Type, Rtis.Ghdl_Rti_Access, Wki_Rti); Create_To_String_Subprogram - ("__ghdl_timue_to_string_unit", Ghdl_Time_To_String_Unit, + ("__ghdl_time_to_string_unit", Ghdl_Time_To_String_Unit, Std_Time_Otype, Std_Time_Otype, Get_Identifier ("unit"), Rtis.Ghdl_Rti_Access, Wki_Rti); Create_To_String_Subprogram diff --git a/src/xtools/pnodes.py b/src/xtools/pnodes.py index adb85b7..9a80755 100755 --- a/src/xtools/pnodes.py +++ b/src/xtools/pnodes.py @@ -4,13 +4,14 @@ import re import sys import argparse -field_file = "../vhdl/nodes.ads" -spec_file = "../vhdl/iirs.ads" -template_file = "../vhdl/iirs.adb.in" -meta_base_file = "../vhdl/nodes_meta" +field_file = "nodes.ads" +spec_file = "iirs.ads" +template_file = "iirs.adb.in" +meta_base_file = "nodes_meta" prefix_name = "Iir_Kind_" prefix_range_name = "Iir_Kinds_" type_name = "Iir_Kind" +node_type = "Iir" conversions = ['uc', 'pos'] class FuncDesc: @@ -157,16 +158,16 @@ def read_kinds(filename): while lr.get() != ' type ' + type_name + ' is\n': pass # Skip '(' - if lr.get() != ' (\n': + if lr.get() != ' (\n': raise ParseError(lr, 'no open parenthesis after "type ' + type_name +'"') # Read literals - pat_node = re.compile(' ' + prefix_name + '(\w+),?( +-- .*)?\n') + pat_node = re.compile(' ' + prefix_name + '(\w+),?( +-- .*)?\n') pat_comment = re.compile('( +-- .*)?\n') while True: l = lr.get() - if l == ' );\n': + if l == ' );\n': break m = pat_node.match(l) if m: @@ -234,9 +235,10 @@ def read_kinds(filename): re.compile(' function Get_(\w+) \((\w+) : (\w+)\) return (\w+);\n') pat_proc = \ re.compile(' procedure Set_(\w+) \((\w+) : (\w+); (\w+) : (\w+)\);\n') + pat_end = re.compile('end [A-Za-z.]+;\n') while True: l = lr.get() - if l == 'end Iirs;\n': + if pat_end.match(l): break m = pat_field.match(l) if m: @@ -432,7 +434,7 @@ def gen_subprg_header(decl): print ' begin' def gen_assert(func): - print ' pragma Assert (' + func.pname + ' /= Null_Iir);' + print ' pragma Assert (' + func.pname + ' /= Null_' + node_type + ');' cond = '(Has_' + func.name + ' (Get_Kind (' + func.pname + ')),' msg = '"no field ' + func.name + '");' if len (cond) < 60: @@ -480,7 +482,7 @@ def funcs_of_node(n): return sorted([fv.name for fv in n.fields.values() if fv]) def gen_has_func_spec(name, suff): - spec=' function Has_' + f.name + ' (K : Iir_Kind)' + spec=' function Has_' + f.name + ' (K : ' + type_name + ')' ret=' return Boolean' + suff; if len(spec) < 60: print spec + ret @@ -495,8 +497,37 @@ parser.add_argument('action', choices=['disp-nodes', 'disp-kinds', 'get_format', 'body', 'meta_specs', 'meta_body'], default='disp-nodes') +parser.add_argument('--field-file', dest='field_file', + default='nodes.ads', + help='specify file which defines fields') +parser.add_argument('--spec-file', dest='spec_file', + default='iirs.ads', + help='specify file which defines nodes') +parser.add_argument('--template-file', dest='template_file', + default='iirs.adb.in', + help='specify template body file') +parser.add_argument('--meta-basename', dest='meta_basename', + default='nodes_meta', + help='specify base name of meta files') +parser.add_argument('--kind-type', dest='kind_type', + default='Iir_Kind', + help='name of kind type') +parser.add_argument('--kind-prefix', dest='kind_prefix', + default='Iir_Kind_', + help='prefix for kind literals') +parser.add_argument('--node-type', dest='node_type', + default='Iir', + help='name of the node type') args = parser.parse_args() +field_file=args.field_file +spec_file=args.spec_file +type_name=args.kind_type +prefix_name=args.kind_prefix +template_file=args.template_file +node_type=args.node_type +meta_base_file=args.meta_basename + try: (formats, fields) = read_fields(field_file) (kinds, kinds_ranges, funcs) = read_kinds(spec_file) @@ -582,9 +613,11 @@ elif args.action == 'meta_specs': elif l == ' -- FUNCS': for t in types: print ' function Get_' + t - print ' (N : Iir; F : Fields_Enum) return ' + t + ';' + print ' (N : ' + node_type + '; F : Fields_Enum) return ' \ + + t + ';' print ' procedure Set_' + t - print ' (N : Iir; F : Fields_Enum; V: ' + t + ');' + print ' (N : ' + node_type + '; F : Fields_Enum; V: ' \ + + t + ');' print for f in funcs: gen_has_func_spec(f.name, ';') @@ -622,7 +655,7 @@ elif args.action == 'meta_body': print ' return Attr_' + attr + ';' elif l == ' -- FIELDS_ARRAY': last = None - nodes_types = ['Iir', 'Iir_List'] + nodes_types = [node_type, node_type + '_List'] ref_names = ['Ref', 'Of_Ref', 'Maybe_Ref'] for k in kinds: v = nodes[k] @@ -670,7 +703,8 @@ elif args.action == 'meta_body': types = [t for t in sorted(s)] for t in types: print ' function Get_' + t - print ' (N : Iir; F : Fields_Enum) return ' + t + ' is' + print ' (N : ' + node_type + '; F : Fields_Enum) return ' \ + + t + ' is' print ' begin' print ' pragma Assert (Fields_Type (F) = Type_' + t + ');' print ' case F is' @@ -684,7 +718,8 @@ elif args.action == 'meta_body': print ' end Get_' + t + ';' print print ' procedure Set_' + t - print ' (N : Iir; F : Fields_Enum; V: ' + t + ') is' + print ' (N : ' + node_type + '; F : Fields_Enum; V: ' \ + + t + ') is' print ' begin' print ' pragma Assert (Fields_Type (F) = Type_' + t + ');' print ' case F is' |