aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/simulate
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-02-14 08:47:07 +0100
committerTristan Gingold <tgingold@free.fr>2016-02-14 13:52:34 +0100
commit5c9e171c40383feb36c35d7de81b74134aafeffe (patch)
tree69dba961afb08a13327e2aee9a4e6d354ef7a79a /src/vhdl/simulate
parent12169d369435296598cf0b1c41ee2f1af6bb1ef2 (diff)
downloadghdl-5c9e171c40383feb36c35d7de81b74134aafeffe.tar.gz
ghdl-5c9e171c40383feb36c35d7de81b74134aafeffe.tar.bz2
ghdl-5c9e171c40383feb36c35d7de81b74134aafeffe.zip
simul debugger: handle more concurrent statements.
Diffstat (limited to 'src/vhdl/simulate')
-rw-r--r--src/vhdl/simulate/debugger.adb50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/vhdl/simulate/debugger.adb b/src/vhdl/simulate/debugger.adb
index 47846394a..9b9b5ae42 100644
--- a/src/vhdl/simulate/debugger.adb
+++ b/src/vhdl/simulate/debugger.adb
@@ -776,6 +776,20 @@ package body Debugger is
return Walk_Continue;
end Walk_Decl_Chain;
+ function Walk_Conc_Chain (Chain : Iir) return Walk_Status;
+
+ function Walk_Generate_Statement_Body (Bod : Iir) return Walk_Status is
+ begin
+ if Walk_Decl_Chain (Get_Declaration_Chain (Bod)) = Walk_Abort then
+ return Walk_Abort;
+ end if;
+ if Walk_Conc_Chain (Get_Concurrent_Statement_Chain (Bod)) = Walk_Abort
+ then
+ return Walk_Abort;
+ end if;
+ return Walk_Continue;
+ end Walk_Generate_Statement_Body;
+
function Walk_Conc_Chain (Chain : Iir) return Walk_Status
is
Stmt : Iir := Chain;
@@ -788,6 +802,40 @@ package body Debugger is
then
return Walk_Abort;
end if;
+ when Iir_Kind_For_Generate_Statement =>
+ if Walk_Declarations_Cb.all
+ (Get_Parameter_Specification (Stmt)) = Walk_Abort
+ or else Walk_Generate_Statement_Body
+ (Get_Generate_Statement_Body (Stmt)) = Walk_Abort
+ then
+ return Walk_Abort;
+ end if;
+ when Iir_Kind_If_Generate_Statement =>
+ declare
+ Stmt1 : Iir;
+ begin
+ Stmt1 := Stmt;
+ while Stmt1 /= Null_Iir loop
+ if Walk_Generate_Statement_Body
+ (Get_Generate_Statement_Body (Stmt)) = Walk_Abort
+ then
+ return Walk_Abort;
+ end if;
+ Stmt1 := Get_Generate_Else_Clause (Stmt1);
+ end loop;
+ end;
+ when Iir_Kind_Component_Instantiation_Statement =>
+ null;
+ when Iir_Kind_Block_Statement =>
+ -- FIXME: header
+ if (Walk_Decl_Chain
+ (Get_Declaration_Chain (Stmt)) = Walk_Abort)
+ or else
+ (Walk_Conc_Chain
+ (Get_Concurrent_Statement_Chain (Stmt)) = Walk_Abort)
+ then
+ return Walk_Abort;
+ end if;
when others =>
Error_Kind ("walk_conc_chain", Stmt);
end case;
@@ -827,6 +875,8 @@ package body Debugger is
return Walk_Abort;
end if;
-- FIXME: block configuration ?
+ when Iir_Kind_Context_Declaration =>
+ null;
when others =>
Error_Kind ("Cb_Walk_Declarations", Unit);
end case;