diff options
author | Benoit Foucher <benoit@zeroc.com> | 2009-03-24 11:45:18 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2009-03-24 11:45:18 +0100 |
commit | 06a08ecf28e205277336a97a6173db7ccbed1adc (patch) | |
tree | a369a5044a63f8cdba9e7c0a461e24ae344486b4 /cpp/src/slice2cs | |
parent | Merge branch 'R3_3_branch' (diff) | |
parent | Bug 3924: slice2py missing from VC60 installer (diff) | |
download | ice-06a08ecf28e205277336a97a6173db7ccbed1adc.tar.bz2 ice-06a08ecf28e205277336a97a6173db7ccbed1adc.tar.xz ice-06a08ecf28e205277336a97a6173db7ccbed1adc.zip |
Merge commit 'origin/R3_3_branch'
Conflicts:
CHANGES
cpp/demo/Freeze/backup/.depend
cpp/demo/Freeze/bench/.depend
cpp/demo/Freeze/casino/.depend
cpp/demo/Freeze/customEvictor/.depend
cpp/demo/Freeze/library/.depend
cpp/demo/Freeze/phonebook/.depend
cpp/demo/Freeze/transform/.depend
cpp/demo/Glacier2/callback/.depend
cpp/demo/Glacier2/chat/.depend
cpp/demo/Ice/async/.depend
cpp/demo/Ice/bidir/.depend
cpp/demo/Ice/callback/.depend
cpp/demo/Ice/converter/.depend
cpp/demo/Ice/hello/.depend
cpp/demo/Ice/invoke/.depend
cpp/demo/Ice/latency/.depend
cpp/demo/Ice/minimal/.depend
cpp/demo/Ice/multicast/.depend
cpp/demo/Ice/nested/.depend
cpp/demo/Ice/nrvo/.depend
cpp/demo/Ice/session/.depend
cpp/demo/Ice/throughput/.depend
cpp/demo/Ice/value/.depend
cpp/demo/IceBox/hello/.depend
cpp/demo/IceGrid/allocate/.depend
cpp/demo/IceGrid/icebox/.depend
cpp/demo/IceGrid/replication/.depend
cpp/demo/IceGrid/sessionActivation/.depend
cpp/demo/IceGrid/simple/.depend
cpp/demo/IceStorm/clock/.depend
cpp/demo/IceStorm/counter/.depend
cpp/demo/IceStorm/replicated/.depend
cpp/demo/IceStorm/replicated2/.depend
cpp/demo/book/freeze_filesystem/.depend
cpp/demo/book/lifecycle/.depend
cpp/demo/book/printer/.depend
cpp/demo/book/simple_filesystem/.depend
cpp/src/Freeze/.depend
cpp/src/FreezeScript/.depend
cpp/src/Ice/.depend
cpp/src/Ice/UdpTransceiver.cpp
cpp/src/Ice/UdpTransceiver.h
cpp/src/IceBox/.depend
cpp/src/IceGrid/.depend
cpp/src/IceGridLib/.depend
cpp/src/IcePatch2/.depend
cpp/src/IceStorm/.depend
cpp/src/slice2freeze/.depend
cpp/test/Freeze/complex/.depend
cpp/test/Freeze/dbmap/.depend
cpp/test/Freeze/evictor/.depend
cpp/test/Freeze/oldevictor/.depend
cpp/test/FreezeScript/dbmap/.depend
cpp/test/FreezeScript/evictor/.depend
cpp/test/Glacier2/attack/.depend
cpp/test/Glacier2/dynamicFiltering/.depend
cpp/test/Glacier2/router/.depend
cpp/test/Glacier2/sessionControl/.depend
cpp/test/Glacier2/ssl/.depend
cpp/test/Glacier2/staticFiltering/.depend
cpp/test/Ice/adapterDeactivation/.depend
cpp/test/Ice/background/.depend
cpp/test/Ice/binding/.depend
cpp/test/Ice/checksum/.depend
cpp/test/Ice/checksum/server/.depend
cpp/test/Ice/custom/.depend
cpp/test/Ice/exceptions/.depend
cpp/test/Ice/facets/.depend
cpp/test/Ice/faultTolerance/.depend
cpp/test/Ice/gc/.depend
cpp/test/Ice/hold/.depend
cpp/test/Ice/inheritance/.depend
cpp/test/Ice/interceptor/.depend
cpp/test/Ice/location/.depend
cpp/test/Ice/objects/.depend
cpp/test/Ice/operations/.depend
cpp/test/Ice/proxy/.depend
cpp/test/Ice/retry/.depend
cpp/test/Ice/servantLocator/.depend
cpp/test/Ice/slicing/exceptions/.depend
cpp/test/Ice/slicing/objects/.depend
cpp/test/Ice/stream/.depend
cpp/test/Ice/stringConverter/.depend
cpp/test/Ice/timeout/.depend
cpp/test/Ice/udp/.depend
cpp/test/IceBox/configuration/.depend
cpp/test/IceGrid/activation/.depend
cpp/test/IceGrid/allocation/.depend
cpp/test/IceGrid/deployer/.depend
cpp/test/IceGrid/distribution/.depend
cpp/test/IceGrid/replicaGroup/.depend
cpp/test/IceGrid/replication/.depend
cpp/test/IceGrid/session/.depend
cpp/test/IceGrid/simple/.depend
cpp/test/IceGrid/update/.depend
cpp/test/IceSSL/configuration/.depend
cpp/test/IceStorm/federation/.depend
cpp/test/IceStorm/federation2/.depend
cpp/test/IceStorm/rep1/.depend
cpp/test/IceStorm/repgrid/.depend
cpp/test/IceStorm/repstress/.depend
cpp/test/IceStorm/single/.depend
cpp/test/IceStorm/stress/.depend
cpp/test/Slice/keyword/.depend
cs/src/Ice/Instance.cs
cs/src/IceSSL/ConnectorI.cs
java/demo/book/simple_filesystem/Filesystem/DirectoryI.java
java/demo/book/simple_filesystem/Filesystem/FileI.java
java/src/IceInternal/TcpConnector.java
java/src/IceSSL/ConnectorI.java
py/modules/IcePy/.depend
rb/src/IceRuby/.depend
Diffstat (limited to 'cpp/src/slice2cs')
-rw-r--r-- | cpp/src/slice2cs/.depend | 4 | ||||
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 88 | ||||
-rw-r--r-- | cpp/src/slice2cs/Gen.h | 9 | ||||
-rw-r--r-- | cpp/src/slice2cs/Main.cpp | 12 | ||||
-rw-r--r-- | cpp/src/slice2cs/Makefile.mak | 4 |
5 files changed, 63 insertions, 54 deletions
diff --git a/cpp/src/slice2cs/.depend b/cpp/src/slice2cs/.depend index 3681dd8ef03..ac8143032bd 100644 --- a/cpp/src/slice2cs/.depend +++ b/cpp/src/slice2cs/.depend @@ -1,2 +1,2 @@ -Gen$(OBJEXT): Gen.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Config.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/OutputUtil.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/UUID.h $(includedir)/Slice/Checksum.h $(includedir)/Slice/DotNetNames.h -Main$(OBJEXT): Main.cpp $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/Slice/Preprocessor.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/OutputUtil.h +Gen$(OBJEXT): Gen.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Config.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/OutputUtil.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/UUID.h $(includedir)/Slice/Checksum.h $(includedir)/Slice/DotNetNames.h $(includedir)/Slice/FileTracker.h +Main$(OBJEXT): Main.cpp $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Slice/Preprocessor.h $(includedir)/Slice/FileTracker.h $(includedir)/Slice/Parser.h $(includedir)/Slice/Util.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/IceUtil/OutputUtil.h diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index b3c236cfa1a..b803c48c768 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -425,9 +425,9 @@ Slice::CsVisitor::writeDispatchAndMarshalling(const ClassDefPtr& p, bool stream) for(t = throws.begin(); t != throws.end(); ++t) { string exS = fixId((*t)->scoped()); - _out << nl << "catch(" << exS << " ex)"; + _out << nl << "catch(" << exS << " ex__)"; _out << sb; - _out << nl << "os__.writeUserException(ex);"; + _out << nl << "os__.writeUserException(ex__);"; _out << nl << "return Ice.DispatchStatus.DispatchUserException;"; _out << eb; } @@ -534,9 +534,9 @@ Slice::CsVisitor::writeDispatchAndMarshalling(const ClassDefPtr& p, bool stream) } _out << "current__" << epar << ';'; _out << eb; - _out << nl << "catch(_System.Exception ex)"; + _out << nl << "catch(_System.Exception ex__)"; _out << sb; - _out << nl << "cb__.ice_exception(ex);"; + _out << nl << "cb__.ice_exception(ex__);"; _out << eb; _out << nl << "return Ice.DispatchStatus.DispatchAsync;"; @@ -1110,7 +1110,7 @@ Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const st if(stat(fileImpl.c_str(), &st) == 0) { ostringstream os; - os << fileImpl << "' already exists - will not overwrite"; + os << "`" << fileImpl << "' already exists - will not overwrite"; throw FileException(__FILE__, __LINE__, os.str()); } @@ -1143,7 +1143,7 @@ Slice::Gen::generate(const UnitPtr& p) { CsGenerator::validateMetaData(p); - UnitVisitor unitVisitor(_out, _stream); + UnitVisitor unitVisitor(_out); p->visit(&unitVisitor, false); TypesVisitor typesVisitor(_out, _stream); @@ -1263,35 +1263,34 @@ Slice::Gen::printHeader() _out << "\n// Ice version " << ICE_STRING_VERSION; } -Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out, bool stream) - : CsVisitor(out), _stream(stream), _globalMetaDataDone(false) +Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out) + : CsVisitor(out) { } bool -Slice::Gen::UnitVisitor::visitModuleStart(const ModulePtr& p) +Slice::Gen::UnitVisitor::visitUnitStart(const UnitPtr& p) { - if(!_globalMetaDataDone) - { - DefinitionContextPtr dc = p->definitionContext(); - StringList globalMetaData = dc->getMetaData(); + DefinitionContextPtr dc = p->findDefinitionContext(p->topLevelFile()); + assert(dc); + StringList globalMetaData = dc->getMetaData(); - static const string attributePrefix = "cs:attribute:"; + static const string attributePrefix = "cs:attribute:"; - if(!globalMetaData.empty()) - { - _out << sp; - } - for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + bool sep = false; + for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + { + string::size_type pos = q->find(attributePrefix); + if(pos == 0 && q->size() > attributePrefix.size()) { - string::size_type pos = q->find(attributePrefix); - if(pos == 0) + if(!sep) { - string attrib = q->substr(pos + attributePrefix.size()); - _out << nl << '[' << attrib << ']'; + _out << sp; + sep = true; } + string attrib = q->substr(pos + attributePrefix.size()); + _out << nl << '[' << attrib << ']'; } - _globalMetaDataDone = true; // Do this only once per source file. } return false; } @@ -1666,6 +1665,15 @@ Slice::Gen::TypesVisitor::visitSequence(const SequencePtr& p) return; } + // + // No need to generate anything for serializable sequences. + // + prefix = "clr:serializable:"; + if(p->findMetaData(prefix, meta)) + { + return; + } + string name = fixId(p->name()); string s = typeToString(p->type()); @@ -2137,7 +2145,7 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) _out << eb; } - if(!base || (base && !base->usesClasses())) + if((!base || (base && !base->usesClasses())) && p->usesClasses()) { _out << sp << nl << "public override bool usesClasses__()"; _out << sb; @@ -2668,8 +2676,6 @@ Slice::Gen::TypesVisitor::visitDataMember(const DataMemberPtr& p) emitDeprecate(p, cont, _out, "member"); - emitAttributes(p); - string type = typeToString(p->type()); string propertyName = fixId(p->name(), baseTypes, isClass); string dataMemberName = propertyName; @@ -2678,18 +2684,19 @@ Slice::Gen::TypesVisitor::visitDataMember(const DataMemberPtr& p) dataMemberName += "_prop"; } - _out << nl; if(propertyMapping) { - _out << "private"; + _out << nl << "private"; } else if(isProtected) { - _out << "protected"; + emitAttributes(p); + _out << nl << "protected"; } else { - _out << "public"; + emitAttributes(p); + _out << nl << "public"; } _out << ' ' << type << ' ' << dataMemberName << ';'; @@ -2698,6 +2705,7 @@ Slice::Gen::TypesVisitor::visitDataMember(const DataMemberPtr& p) return; } + emitAttributes(p); _out << nl << (isProtected ? "protected" : "public"); if(!isValue) { @@ -2732,9 +2740,10 @@ Slice::Gen::TypesVisitor::writeMemberHashCode(const DataMemberList& dataMembers, SequencePtr seq = SequencePtr::dynamicCast(memberType); if(seq) { - string genericType; - bool isGeneric = seq->findMetaData("clr:generic:", genericType); - bool isArray = !isGeneric && !seq->hasMetaData("clr:collection"); + string meta; + bool isSerializable = seq->findMetaData("clr:serializable", meta); + bool isGeneric = seq->findMetaData("clr:generic:", meta); + bool isArray = !isSerializable && !isGeneric && !seq->hasMetaData("clr:collection"); if(isArray) { // @@ -2811,9 +2820,10 @@ Slice::Gen::TypesVisitor::writeMemberEquals(const DataMemberList& dataMembers, i SequencePtr seq = SequencePtr::dynamicCast(memberType); if(seq) { - string genericType; - bool isGeneric = seq->findMetaData("clr:generic:", genericType); - bool isArray = !isGeneric && !seq->hasMetaData("clr:collection"); + string meta; + bool isSerializable = seq->findMetaData("clr:serializable:", meta); + bool isGeneric = seq->findMetaData("clr:generic:", meta); + bool isArray = !isSerializable && !isGeneric && !seq->hasMetaData("clr:collection"); if(isArray) { // @@ -4000,9 +4010,9 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) _out << nl << "throw;"; _out << eb; } - _out << nl << "catch(Ice.UserException ex)"; + _out << nl << "catch(Ice.UserException ex__)"; _out << sb; - _out << nl << "throw new Ice.UnknownUserException(ex.ice_name(), ex);"; + _out << nl << "throw new Ice.UnknownUserException(ex__.ice_name(), ex__);"; _out << eb; _out << eb; if(ret || !outParams.empty()) diff --git a/cpp/src/slice2cs/Gen.h b/cpp/src/slice2cs/Gen.h index dc9d655570e..3bb6c266a92 100644 --- a/cpp/src/slice2cs/Gen.h +++ b/cpp/src/slice2cs/Gen.h @@ -76,14 +76,9 @@ private: { public: - UnitVisitor(::IceUtilInternal::Output&, bool); + UnitVisitor(::IceUtilInternal::Output&); - virtual bool visitModuleStart(const ModulePtr&); - - private: - - bool _stream; - bool _globalMetaDataDone; + virtual bool visitUnitStart(const UnitPtr&); }; class TypesVisitor : public CsVisitor diff --git a/cpp/src/slice2cs/Main.cpp b/cpp/src/slice2cs/Main.cpp index 595dfe75dc9..6b9e1a87d15 100644 --- a/cpp/src/slice2cs/Main.cpp +++ b/cpp/src/slice2cs/Main.cpp @@ -12,6 +12,7 @@ #include <IceUtil/StaticMutex.h> #include <Slice/Preprocessor.h> #include <Slice/FileTracker.h> +#include <Slice/Util.h> #include <Gen.h> using namespace std; @@ -78,11 +79,14 @@ main(int argc, char* argv[]) vector<string> args; try { +#if defined(__BCPLUSPLUS__) && (__BCPLUSPLUS__ >= 0x0600) + IceUtil::DummyBCC dummy; +#endif args = opts.parse(argc, (const char**)argv); } catch(const IceUtilInternal::BadOptException& e) { - cerr << argv[0] << ": " << e.reason << endl; + cerr << argv[0] << ": error: " << e.reason << endl; usage(argv[0]); return EXIT_FAILURE; } @@ -143,14 +147,14 @@ main(int argc, char* argv[]) if(args.empty()) { - cerr << argv[0] << ": no input file" << endl; + getErrorStream() << argv[0] << ": error: no input file" << endl; usage(argv[0]); return EXIT_FAILURE; } if(impl && implTie) { - cerr << argv[0] << ": cannot specify both --impl and --impl-tie" << endl; + getErrorStream() << argv[0] << ": error: cannot specify both --impl and --impl-tie" << endl; usage(argv[0]); return EXIT_FAILURE; } @@ -238,7 +242,7 @@ main(int argc, char* argv[]) // cleanup any created files. FileTracker::instance()->cleanup(); p->destroy(); - cerr << argv[0] << ": " << ex.reason() << endl; + getErrorStream() << argv[0] << ": error: " << ex.reason() << endl; return EXIT_FAILURE; } } diff --git a/cpp/src/slice2cs/Makefile.mak b/cpp/src/slice2cs/Makefile.mak index 263fc9a09d4..3b86acc9f9b 100644 --- a/cpp/src/slice2cs/Makefile.mak +++ b/cpp/src/slice2cs/Makefile.mak @@ -26,7 +26,7 @@ CPPFLAGS = -I. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN PDBFLAGS = /pdb:$(NAME:.exe=.pdb)
!endif
-!if "$(CPP_COMPILER)" == "BCC2007"
+!if "$(BCPLUSPLUS)" == "yes"
RES_FILE = ,, Slice2Cs.res
!else
RES_FILE = Slice2Cs.res
@@ -46,7 +46,7 @@ install:: all copy $(NAME) $(install_bindir)
-!if "$(CPP_COMPILER)" == "BCC2007" && "$(OPTIMIZE)" != "yes"
+!if "$(BCPLUSPLUS)" == "yes" && "$(OPTIMIZE)" != "yes"
install:: all
copy $(NAME:.exe=.tds) $(install_bindir)
|