summaryrefslogtreecommitdiff
path: root/src/vhdl/sem_decls.ads
diff options
context:
space:
mode:
authorTristan Gingold2015-05-27 03:51:50 +0200
committerTristan Gingold2015-05-27 03:51:50 +0200
commit719f5418c95be27edcdfea5c437d44d2ef8c67de (patch)
tree570bec4128ffaaae3b600c3b96314682605cd815 /src/vhdl/sem_decls.ads
parent5f17068849547fa1ce7bfd6320188d9317aba7ec (diff)
downloadghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.tar.gz
ghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.tar.bz2
ghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.zip
Handle signal attribute in declarations. Fix alias of implicit signal.
Diffstat (limited to 'src/vhdl/sem_decls.ads')
-rw-r--r--src/vhdl/sem_decls.ads42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/vhdl/sem_decls.ads b/src/vhdl/sem_decls.ads
index 7a8e240..49ba43a 100644
--- a/src/vhdl/sem_decls.ads
+++ b/src/vhdl/sem_decls.ads
@@ -18,6 +18,7 @@
with Iirs; use Iirs;
package Sem_Decls is
+ -- Analyze an interface chain.
procedure Sem_Interface_Chain (Interface_Chain: Iir;
Interface_Kind : Interface_Kind_Type);
@@ -49,4 +50,45 @@ package Sem_Decls is
-- is an overload list, it is destroyed.
function Sem_Signature (Name : Iir; Sig : Iir_Signature) return Iir;
+ -- The attribute signals ('stable, 'quiet and 'transaction) are
+ -- implicitely declared.
+ -- Note: guard signals are also implicitly declared but with a guard
+ -- expression, which is at a known location.
+ -- Since these signals need resources and are not easily located (can be
+ -- nearly in every expression), it is useful to add a node into a
+ -- declaration list to declare them.
+ -- However, only a few declaration_list can declare signals. These
+ -- declarations lists must register and unregister themselves with
+ -- push_declarative_region_with_signals and
+ -- pop_declarative_region_with_signals.
+ type Implicit_Signal_Declaration_Type is private;
+
+ procedure Push_Signals_Declarative_Part
+ (Cell: out Implicit_Signal_Declaration_Type; Decls_Parent : Iir);
+
+ procedure Pop_Signals_Declarative_Part
+ (Cell: in Implicit_Signal_Declaration_Type);
+
+ -- Declare an implicit signal.
+ procedure Add_Declaration_For_Implicit_Signal (Sig : Iir);
+
+private
+ type Implicit_Signal_Declaration_Type is record
+ -- Declaration or statement than will contain implicit declarations.
+ Decls_Parent : Iir;
+
+ -- If True, declarations of DECLS_PARENT have already been analyzed.
+ -- So implicit declarations are appended to the parent, and the last
+ -- declaration is LAST_IMPLICIT_DECL.
+ -- If False, declarations are being analyzed. Implicit declarations
+ -- are saved in FIRST_IMPLICIT_DECL / LAST_IMPLICIT_DECL and will be
+ -- inserted before the current declaration.
+ Decls_Analyzed : Boolean;
+
+ -- If DECLS_ANALYZED is False, this is the chain of implicit
+ -- declarations. If True, LAST_IMPLICIT_DECL contains the last
+ -- declaration.
+ First_Implicit_Decl : Iir;
+ Last_Implicit_Decl : Iir;
+ end record;
end Sem_Decls;