aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/vhdl-parse.adb2
-rw-r--r--src/vhdl/vhdl-sem_decls.adb19
-rw-r--r--src/vhdl/vhdl-sem_decls.ads16
-rw-r--r--src/vhdl/vhdl-sem_specs.adb5
-rw-r--r--src/vhdl/vhdl-sem_specs.ads3
5 files changed, 31 insertions, 14 deletions
diff --git a/src/vhdl/vhdl-parse.adb b/src/vhdl/vhdl-parse.adb
index 6801f00fc..a6e24922d 100644
--- a/src/vhdl/vhdl-parse.adb
+++ b/src/vhdl/vhdl-parse.adb
@@ -9433,6 +9433,7 @@ package body Vhdl.Parse is
Error_Msg_Parse
("attribute declaration not allowed here");
end if;
+ Set_Parent (El, Parent);
Chain_Append (First, Last, El);
end if;
when Tok_Group =>
@@ -9442,6 +9443,7 @@ package body Vhdl.Parse is
Error_Msg_Parse
("group template declaration not allowed here");
end if;
+ Set_Parent (El, Parent);
Chain_Append (First, Last, El);
end if;
when others =>
diff --git a/src/vhdl/vhdl-sem_decls.adb b/src/vhdl/vhdl-sem_decls.adb
index a8da895eb..b92e56cf4 100644
--- a/src/vhdl/vhdl-sem_decls.adb
+++ b/src/vhdl/vhdl-sem_decls.adb
@@ -850,7 +850,7 @@ package body Vhdl.Sem_Decls is
-- LAST_DECL is set only if DECL is part of a list of declarations (they
-- share the same type and the same default value).
- procedure Sem_Object_Declaration (Decl: Iir; Parent : Iir; Last_Decl : Iir)
+ procedure Sem_Object_Declaration (Decl: Iir; Last_Decl : Iir)
is
Deferred_Const : constant Iir := Get_Deferred_Constant (Decl);
Atype: Iir;
@@ -969,7 +969,8 @@ package body Vhdl.Sem_Decls is
else
Set_Deferred_Declaration_Flag (Decl, True);
end if;
- if Get_Kind (Parent) /= Iir_Kind_Package_Declaration then
+ if Get_Kind (Get_Parent (Decl)) /= Iir_Kind_Package_Declaration
+ then
Error_Msg_Sem
(+Decl, "a constant must have a default value");
end if;
@@ -1019,6 +1020,7 @@ package body Vhdl.Sem_Decls is
-- parse.
if Flags.Vhdl_Std >= Vhdl_00 then
declare
+ Parent : constant Iir := Get_Parent (Decl);
Base_Type : constant Iir := Get_Base_Type (Atype);
Is_Protected : constant Boolean :=
Get_Kind (Base_Type) = Iir_Kind_Protected_Type_Declaration;
@@ -1168,10 +1170,9 @@ package body Vhdl.Sem_Decls is
-- Note: this check is also performed when a file is referenced.
-- But a file can be declared without being explicitly referenced.
declare
- Parent : Iir;
+ Parent : constant Iir := Get_Parent (Decl);
Spec : Iir;
begin
- Parent := Get_Parent (Decl);
case Get_Kind (Parent) is
when Iir_Kind_Function_Body =>
Spec := Get_Subprogram_Specification (Parent);
@@ -2045,14 +2046,12 @@ package body Vhdl.Sem_Decls is
-- PREV_DECL is the previous one (used for declaration like
-- signal a, b : mytype; ) to get type and default value from the
-- previous declaration.
- -- PARENT is the parent node (useful ?)
-- IS_GLOBAL must be true when the declaration can be used by an external
-- file (so for package and entities).
-- ATTR_SPEC_CHAIN is the chain of attribute specifications, used to
-- handle the 'others' case.
procedure Sem_Declaration (Decl : in out Iir;
Prev_Decl : in out Iir;
- Parent : Iir;
Is_Global : Boolean;
Attr_Spec_Chain : in out Iir) is
begin
@@ -2065,13 +2064,13 @@ package body Vhdl.Sem_Decls is
when Iir_Kind_Signal_Declaration
| Iir_Kind_Constant_Declaration
| Iir_Kind_Variable_Declaration =>
- Sem_Object_Declaration (Decl, Parent, Prev_Decl);
+ Sem_Object_Declaration (Decl, Prev_Decl);
when Iir_Kind_File_Declaration =>
Sem_File_Declaration (Decl, Prev_Decl);
when Iir_Kind_Attribute_Declaration =>
Sem_Attribute_Declaration (Decl);
when Iir_Kind_Attribute_Specification =>
- Sem_Attribute_Specification (Decl, Parent);
+ Sem_Attribute_Specification (Decl);
if Get_Entity_Name_List (Decl) in Iir_Flists_All_Others then
Set_Attribute_Specification_Chain (Decl, Attr_Spec_Chain);
Attr_Spec_Chain := Decl;
@@ -2150,7 +2149,7 @@ package body Vhdl.Sem_Decls is
-- Insert *before* DECL pending implicit signal declarations created
-- for DECL after LAST_DECL. This updates LAST_DECL.
- Insert_Pending_Implicit_Declarations (Parent, Prev_Decl);
+ Insert_Pending_Implicit_Declarations (Get_Parent (Decl), Prev_Decl);
end Sem_Declaration;
procedure Sem_Declaration_Chain (Parent : Iir)
@@ -2187,7 +2186,7 @@ package body Vhdl.Sem_Decls is
while Decl /= Null_Iir loop
- Sem_Declaration (Decl, Last_Decl, Parent, Is_Global, Attr_Spec_Chain);
+ Sem_Declaration (Decl, Last_Decl, Is_Global, Attr_Spec_Chain);
if Last_Decl = Null_Iir then
-- Append now to handle expand names.
diff --git a/src/vhdl/vhdl-sem_decls.ads b/src/vhdl/vhdl-sem_decls.ads
index 3ab43adf8..744a586a6 100644
--- a/src/vhdl/vhdl-sem_decls.ads
+++ b/src/vhdl/vhdl-sem_decls.ads
@@ -22,6 +22,22 @@ package Vhdl.Sem_Decls is
procedure Sem_Interface_Chain (Interface_Chain: Iir;
Interface_Kind : Interface_Kind_Type);
+ -- Analyze declaration DECL.
+ -- This is a sub-procedure of Sem_Declaration_Chain used only for
+ -- PSL verification units.
+ --
+ -- PREV_DECL is the previous one (used for declaration like
+ -- signal a, b : mytype; ) to get type and default value from the
+ -- previous declaration.
+ -- IS_GLOBAL must be true when the declaration can be used by an external
+ -- file (so for package and entities).
+ -- ATTR_SPEC_CHAIN is the chain of attribute specifications, used to
+ -- handle the 'others' case.
+ procedure Sem_Declaration (Decl : in out Iir;
+ Prev_Decl : in out Iir;
+ Is_Global : Boolean;
+ Attr_Spec_Chain : in out Iir);
+
-- Analyze declarations of PARENT.
procedure Sem_Declaration_Chain (Parent : Iir);
diff --git a/src/vhdl/vhdl-sem_specs.adb b/src/vhdl/vhdl-sem_specs.adb
index bdefcfbca..77619b3ce 100644
--- a/src/vhdl/vhdl-sem_specs.adb
+++ b/src/vhdl/vhdl-sem_specs.adb
@@ -707,9 +707,10 @@ package body Vhdl.Sem_Specs is
Attribute_A_Decl (Name, Attr, True, True);
end Sem_Signature_Entity_Designator;
- procedure Sem_Attribute_Specification
- (Spec : Iir_Attribute_Specification; Scope : Iir)
+ procedure Sem_Attribute_Specification (Spec : Iir_Attribute_Specification)
is
+ Scope : constant Iir := Get_Parent (Spec);
+
-- Emit an error message when NAME is not found.
procedure Error_Attribute_Specification (Name : Iir)
is
diff --git a/src/vhdl/vhdl-sem_specs.ads b/src/vhdl/vhdl-sem_specs.ads
index d626a9bfb..b74ce6308 100644
--- a/src/vhdl/vhdl-sem_specs.ads
+++ b/src/vhdl/vhdl-sem_specs.ads
@@ -31,8 +31,7 @@ package Vhdl.Sem_Specs is
function Get_Entity_Class_Kind (Decl : Iir) return Vhdl.Tokens.Token_Type;
- procedure Sem_Attribute_Specification
- (Spec : Iir_Attribute_Specification; Scope : Iir);
+ procedure Sem_Attribute_Specification (Spec : Iir_Attribute_Specification);
-- Check declarations following an ALL/OTHERS attribute specification.
-- ATTR_SPEC_CHAIN is the linked list of all attribute specifications whith