diff --git a/elab_scope.cc b/elab_scope.cc index 2ed50504e..60f7fe791 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -453,6 +453,16 @@ bool PGenerate::generate_scope_condit_(Design*des, NetScope*container, bool else void PGenerate::elaborate_subscope_(Design*des, NetScope*scope) { + // Scan the generated scope for nested generate schemes, + // and *generate* new scopes, which is slightly different + // from simple elaboration. + + typedef list::const_iterator generate_it_t; + for (generate_it_t cur = generates.begin() + ; cur != generates.end() ; cur ++ ) { + (*cur) -> generate_scope(des, scope); + } + // Scan the generated scope for gates that may create // their own scopes. typedef list::const_iterator pgate_list_it_t; diff --git a/elab_sig.cc b/elab_sig.cc index 788cd7bd9..6a68517ba 100644 --- a/elab_sig.cc +++ b/elab_sig.cc @@ -309,6 +309,12 @@ bool PGenerate::elaborate_sig_(Design*des, NetScope*scope) const cur->elaborate_sig(des, scope); } + typedef list::const_iterator generate_it_t; + for (generate_it_t cur = generates.begin() + ; cur != generates.end() ; cur ++ ) { + (*cur) -> elaborate_sig(des, scope); + } + typedef list::const_iterator pgate_list_it_t; for (pgate_list_it_t cur = gates.begin() ; cur != gates.end() ; cur ++) { diff --git a/elaborate.cc b/elaborate.cc index 12dd4c10b..e546df3c9 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -3573,6 +3573,12 @@ bool PGenerate::elaborate_(Design*des, NetScope*scope) const for (proc_it_t cur = behaviors.begin(); cur != behaviors.end(); cur++) (*cur)->elaborate(des, scope); + typedef list::const_iterator generate_it_t; + for (generate_it_t cur = generates.begin() + ; cur != generates.end() ; cur ++ ) { + (*cur)->elaborate(des, scope); + } + return true; }