Hi Costas,
the attached patch fixes that. You can apply it to your ROOT sources using
patch -p0 < rootcint_nested_namespace.diff; make skip bin/rootcint
It should also appear in ROOT's CVS soon. Thanks for reporting.
FYI: in some occasions, rootcint created invalid dictionary sources for nested namespaces.
Cheers, Axel.
Costas Andreopoulos wrote:
> Hello all,
>
> while migrating my MC generator http://www.genie-mc.org
> from ROOT 4.04 to 5.09 I hit a problem with CINT.
> It seems that it gets confused and fails to build the
> dictionary in a case that I use templated classes behind
> namespaces.
>
> A small example that, I believe, reproduces the problem
> can be found at:
> http://hepunx.rl.ac.uk/~candreop/outbox/root5-problem.tar.gz
>
> cheers,
> Costas
>
Index: utils/src/rootcint.cxx
--- utils/src/rootcint.cxx 3 Feb 2006 15:48:16 -0000 1.233 +++ utils/src/rootcint.cxx 7 Feb 2006 17:17:56 -0000 @@ -2080,8 +2080,11 @@ void WriteClassFunctions(G__ClassInfo &c clsname.erase (0, nsname.size() + 2);}
(*dictSrcOut) << "//_______________________________________" << "_______________________________________" << std::endl; @@ -2131,8 +2134,10 @@ void WriteClassFunctions(G__ClassInfo &c << "}" << std::endl << std::endl;}
//______________________________________________________________________________ @@ -2535,8 +2540,11 @@ void WriteStreamer(G__ClassInfo &cl) clsname.erase (0, nsname.size() + 2);}
(*dictSrcOut) << "//_______________________________________" << "_______________________________________" << std::endl;@@ -2871,8 +2879,10 @@ void WriteStreamer(G__ClassInfo &cl)
(*dictSrcOut) << " }" << std::endl
<< "}" << std::endl << std::endl;
//______________________________________________________________________________ @@ -2898,8 +2908,11 @@ void WriteAutoStreamer(G__ClassInfo &cl) clsname.erase (0, nsname.size() + 2);}
(*dictSrcOut) << "//_______________________________________" << "_______________________________________" << std::endl; @@ -2914,8 +2927,10 @@ void WriteAutoStreamer(G__ClassInfo &cl) << " }" << std::endl << "}" << std::endl << std::endl;
//______________________________________________________________________________ @@ -3411,8 +3426,11 @@ void WriteShowMembers(G__ClassInfo &cl, clsname.erase (0, nsname.size() + 2); } int add_template_keyword = NeedTemplateKeyword(cl); - if (!nsname.empty()) - (*dictSrcOut) << "namespace " << nsname << " {" << std::endl; + int enclSpaceNesting = 0; + if (!nsname.empty()) { + G__ShadowMaker nestTempShadowMaker(*dictSrcOut, ""); + enclSpaceNesting = nestTempShadowMaker.WriteNamespaceHeader(cl); + } if (add_template_keyword) (*dictSrcOut) << "template <> "; (*dictSrcOut) << "void " << clsname << "::ShowMembers(TMemberInspector &R__insp, char *R__parent)" << std::endl << "{" << std::endl; @@ -3426,9 +3444,11 @@ void WriteShowMembers(G__ClassInfo &cl, } (*dictSrcOut) << "}" << std::endl << std::endl; - if (!nsname.empty()) - (*dictSrcOut) << "} // namespace "<< nsname << std::endl; - } + while (enclSpaceNesting) { + (*dictSrcOut) << "} // namespace " << nsname << std::endl; + --enclSpaceNesting; + }
//______________________________________________________________________________Received on Tue Feb 07 2006 - 18:23:19 MET
This archive was generated by hypermail 2.2.0 : Mon Jan 01 2007 - 16:31:57 MET