Index: Gen.cpp =================================================================== RCS file: /home/cvsroot/ice/src/slice2cpp/Gen.cpp,v retrieving revision 1.233 diff -c -r1.233 Gen.cpp *** Gen.cpp 29 Sep 2004 00:04:40 -0000 1.233 --- Gen.cpp 18 Oct 2004 04:04:43 -0000 *************** *** 520,525 **** --- 520,534 ---- } } + H << sp << nl << "struct __" << p->name() << "_init"; + H << sb; + H << nl << "__" << p->name() << "_init();"; + H << eb << ';'; + + C << sp << nl << scoped << "::__" << p->name() << "_init::__" << p->name() << "_init()"; + C << sb; + C << eb; + string factoryName = "__F" + flattenedScope + name; C << sp << nl << "class " << factoryName << " : public ::IceInternal::UserExceptionFactory"; *************** *** 570,575 **** --- 579,590 ---- H << sp << nl << "static const ::std::string _name;"; H << eb << ';'; + + if(!p->isLocal()) + { + H << sp << nl << "static " << name << "::__" << p->name() << "_init __" + << p->name() << "_initializer; // Force initializers in .cpp file to run"; + } } bool *************** *** 2259,2264 **** --- 2274,2288 ---- C << nl << "extern \"C\" { void " << initfuncname << "() {} }"; C << nl << "#endif"; + H << sp << nl << "struct __" << p->name() << "_init"; + H << sb; + H << nl << "__" << p->name() << "_init();"; + H << eb << ';'; + + C << sp << nl << scoped << "::__" << p->name() << "_init::__" << name << "_init()"; + C << sb; + C << eb; + H.dec(); H << sp << nl << "private:"; H.inc(); *************** *** 2268,2273 **** --- 2292,2303 ---- H << eb << ';'; + if(!p->isAbstract() && !p->isLocal()) + { + H << sp << nl << "static " << fixKwd(p->name()) << "::__" << p->name() << "_init __" + << p->name() << "_initializer; // Force initializers in .cpp file to run"; + } + if(p->isLocal()) { C << sp;