summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in5
-rw-r--r--src/grt/grt-lib.ads4
-rw-r--r--src/grt/grt-processes.adb10
-rw-r--r--src/std_names.adb144
-rw-r--r--src/vhdl/Makefile (renamed from src/xtools/Makefile)30
-rw-r--r--src/vhdl/errorout.adb2
-rw-r--r--src/vhdl/iirs.ads498
-rw-r--r--src/vhdl/simulate/annotations.adb6
-rw-r--r--src/vhdl/simulate/annotations.ads2
-rw-r--r--src/vhdl/translate/translation.adb2
-rwxr-xr-xsrc/xtools/pnodes.py65
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'