diff options
author | Tristan Gingold <tgingold@free.fr> | 2016-02-14 08:47:07 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2016-02-14 13:52:34 +0100 |
commit | 5c9e171c40383feb36c35d7de81b74134aafeffe (patch) | |
tree | 69dba961afb08a13327e2aee9a4e6d354ef7a79a /src/vhdl/simulate | |
parent | 12169d369435296598cf0b1c41ee2f1af6bb1ef2 (diff) | |
download | ghdl-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.adb | 50 |
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; |