summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2008-06-06 11:39:30 +0200
committerBenoit Foucher <benoit@zeroc.com>2008-06-06 11:39:30 +0200
commitb230da31db1d97e6df2a2d98498ea3116ffcccef (patch)
tree9de2166103e2688266402e650233f742a20d5937 /cpp/src
parentBug 3211 - mention second mcpp patch (diff)
downloadice-b230da31db1d97e6df2a2d98498ea3116ffcccef.tar.bz2
ice-b230da31db1d97e6df2a2d98498ea3116ffcccef.tar.xz
ice-b230da31db1d97e6df2a2d98498ea3116ffcccef.zip
Removed SL code
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2sl/.depend2
-rw-r--r--cpp/src/slice2sl/Gen.cpp3457
-rw-r--r--cpp/src/slice2sl/Gen.h268
-rw-r--r--cpp/src/slice2sl/Main.cpp185
-rw-r--r--cpp/src/slice2sl/Makefile32
-rw-r--r--cpp/src/slice2sl/Makefile.mak66
-rw-r--r--cpp/src/slice2sl/Slice2Sl.rc34
7 files changed, 0 insertions, 4044 deletions
diff --git a/cpp/src/slice2sl/.depend b/cpp/src/slice2sl/.depend
deleted file mode 100644
index abbc967d29a..00000000000
--- a/cpp/src/slice2sl/.depend
+++ /dev/null
@@ -1,2 +0,0 @@
-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/DotNetNames.h $(includedir)/Slice/SignalHandler.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)/Slice/Preprocessor.h $(includedir)/Slice/SignalHandler.h ./Gen.h $(includedir)/Slice/CsUtil.h $(includedir)/Slice/Parser.h $(includedir)/IceUtil/OutputUtil.h
diff --git a/cpp/src/slice2sl/Gen.cpp b/cpp/src/slice2sl/Gen.cpp
deleted file mode 100644
index 7f90053584a..00000000000
--- a/cpp/src/slice2sl/Gen.cpp
+++ /dev/null
@@ -1,3457 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <IceUtil/DisableWarnings.h>
-#include <IceUtil/Functional.h>
-#include <Gen.h>
-#include <limits>
-#include <sys/stat.h>
-#ifndef _WIN32
-#include <unistd.h>
-#else
-#include <direct.h>
-#endif
-#include <IceUtil/Iterator.h>
-#include <IceUtil/UUID.h>
-#include <Slice/DotNetNames.h>
-#include <Slice/SignalHandler.h>
-
-using namespace std;
-using namespace Slice;
-
-//
-// Don't use "using namespace IceUtil", or VC++ 6.0 complains about
-// ambigious symbols for constructs like
-// "IceUtil::constMemFun(&Slice::Exception::isLocal)".
-//
-using IceUtilInternal::Output;
-using IceUtilInternal::nl;
-using IceUtilInternal::sp;
-using IceUtilInternal::sb;
-using IceUtilInternal::eb;
-using IceUtilInternal::spar;
-using IceUtilInternal::epar;
-
-//
-// Callback for Crtl-C signal handling
-//
-static Gen* _gen = 0;
-
-static void closeCallback()
-{
- if(_gen != 0)
- {
- _gen->closeOutput();
- }
-}
-
-static string // Should be an anonymous namespace, but VC++ 6 can't handle that.
-sliceModeToIceMode(Operation::Mode opMode)
-{
- string mode;
- switch(opMode)
- {
- case Operation::Normal:
- {
- mode = "Ice.OperationMode.Normal";
- break;
- }
- case Operation::Nonmutating:
- {
- mode = "Ice.OperationMode.Nonmutating";
- break;
- }
- case Operation::Idempotent:
- {
- mode = "Ice.OperationMode.Idempotent";
- break;
- }
- default:
- {
- assert(false);
- break;
- }
- }
- return mode;
-}
-
-static void
-emitDeprecate(const ContainedPtr& p1, const ContainedPtr& p2, Output& out, const string& type)
-{
- string deprecateMetadata;
- if(p1->findMetaData("deprecate", deprecateMetadata) ||
- (p2 != 0 && p2->findMetaData("deprecate", deprecateMetadata)))
- {
- string deprecateReason = "This " + type + " has been deprecated.";
- if(deprecateMetadata.find("deprecate:") == 0 && deprecateMetadata.size() > 10)
- {
- deprecateReason = deprecateMetadata.substr(10);
- }
- out << nl << "[System.Obsolete(\"" << deprecateReason << "\")]";
- }
-}
-
-Slice::CsVisitor::CsVisitor(Output& out) : _out(out)
-{
-}
-
-Slice::CsVisitor::~CsVisitor()
-{
-}
-
-void
-Slice::CsVisitor::writeInheritedOperations(const ClassDefPtr& p)
-{
- ClassList bases = p->bases();
- if(!bases.empty() && !bases.front()->isInterface())
- {
- bases.pop_front();
- }
- if(!bases.empty())
- {
- _out << sp << nl << "#region Inherited Slice operations";
-
- OperationList allOps;
- for(ClassList::const_iterator q = bases.begin(); q != bases.end(); ++q)
- {
- OperationList tmp = (*q)->allOperations();
- allOps.splice(allOps.end(), tmp);
- }
- allOps.sort();
- allOps.unique();
- for(OperationList::const_iterator op = allOps.begin(); op != allOps.end(); ++op)
- {
- ClassDefPtr containingClass = ClassDefPtr::dynamicCast((*op)->container());
- string name = fixId((*op)->name(), DotNet::ICloneable, true);
-
- vector<string> params = getParams(*op);
- vector<string> args = getArgs(*op);
- string retS = typeToString((*op)->returnType());
-
- _out << sp << nl << "public abstract " << retS << ' ' << name << spar << params;
- _out << epar << ';';
- }
-
- _out << sp << nl << "#endregion"; // Inherited Slice operations
- }
-}
-
-void
-Slice::CsVisitor::writeDispatchAndMarshalling(const ClassDefPtr& p)
-{
- string name = fixId(p->name());
- string scoped = p->scoped();
- ClassList allBases = p->allBases();
- StringList ids;
-
-#if defined(__IBMCPP__) && defined(NDEBUG)
- //
- // VisualAge C++ 6.0 does not see that ClassDef is a Contained,
- // when inlining is on. The code below issues a warning: better
- // than an error!
- //
- transform(allBases.begin(), allBases.end(), back_inserter(ids), ::IceUtil::constMemFun<string,ClassDef>(&Contained::scoped));
-#else
- transform(allBases.begin(), allBases.end(), back_inserter(ids), ::IceUtil::constMemFun(&Contained::scoped));
-#endif
-
- StringList other;
- other.push_back(p->scoped());
- other.push_back("::Ice::Object");
- other.sort();
- ids.merge(other);
- ids.unique();
-
- StringList::const_iterator firstIter = ids.begin();
- StringList::const_iterator scopedIter = find(ids.begin(), ids.end(), scoped);
- assert(scopedIter != ids.end());
- StringList::difference_type scopedPos = IceUtilInternal::distance(firstIter, scopedIter);
-
- _out << sp << nl << "#region Slice type-related members";
-
- _out << sp << nl << "public static new string[] ids__ = ";
- _out << sb;
-
- {
- StringList::const_iterator q = ids.begin();
- while(q != ids.end())
- {
- _out << nl << '"' << *q << '"';
- if(++q != ids.end())
- {
- _out << ',';
- }
- }
- }
- _out << eb << ";";
-
- _out << sp << nl << "public override bool ice_isA(string s)";
- _out << sb;
- _out << nl << "return _System.Array.BinarySearch(ids__, 0, ids__.Length, s, IceUtil.StringUtil.OrdinalStringComparer) >= 0;";
- _out << eb;
-
- _out << sp << nl << "public override string[] ice_ids()";
- _out << sb;
- _out << nl << "return ids__;";
- _out << eb;
-
- _out << sp << nl << "public override string ice_id()";
- _out << sb;
- _out << nl << "return ids__[" << scopedPos << "];";
- _out << eb;
-
- _out << sp << nl << "public static new string ice_staticId()";
- _out << sb;
- _out << nl << "return ids__[" << scopedPos << "];";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Slice type-related members
-
- // Marshalling support
- DataMemberList allClassMembers = p->allClassDataMembers();
- DataMemberList::const_iterator d;
- DataMemberList members = p->dataMembers();
- DataMemberList classMembers = p->classDataMembers();
- ClassList bases = p->bases();
- bool hasBaseClass = !bases.empty() && !bases.front()->isInterface();
-
- _out << sp << nl << "#region Marshaling support";
-
- _out << sp << nl << "public override void write__(IceInternal.BasicStream os__)";
- _out << sb;
- _out << nl << "os__.writeTypeId(ice_staticId());";
- _out << nl << "os__.startWriteSlice();";
- for(d = members.begin(); d != members.end(); ++d)
- {
- writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- true, false, false);
- }
- _out << nl << "os__.endWriteSlice();";
- _out << nl << "base.write__(os__);";
- _out << eb;
-
- if(allClassMembers.size() != 0)
- {
- _out << sp << nl << "public sealed ";
- if(hasBaseClass && bases.front()->declaration()->usesClasses())
- {
- _out << "new ";
- }
- _out << "class Patcher__ : IceInternal.Patcher<" << name << ">";
- _out << sb;
- _out << sp << nl << "internal Patcher__(string type, Ice.ObjectImpl instance";
- if(allClassMembers.size() > 1)
- {
- _out << ", int member";
- }
- _out << ") : base(type)";
- _out << sb;
- _out << nl << "_instance = (" << name << ")instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "_member = member;";
- }
- _out << eb;
-
- _out << sp << nl << "public override void patch(Ice.Object v)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- if(allClassMembers.size() > 1)
- {
- _out << nl << "switch(_member)";
- _out << sb;
- }
- int memberCount = 0;
- for(d = allClassMembers.begin(); d != allClassMembers.end(); ++d)
- {
- if(allClassMembers.size() > 1)
- {
- _out.dec();
- _out << nl << "case " << memberCount << ":";
- _out.inc();
- }
- string memberName = fixId((*d)->name(), DotNet::ICloneable, true);
- string memberType = typeToString((*d)->type());
- _out << nl << "_instance." << memberName << " = (" << memberType << ")v;";
- ContainedPtr contained = ContainedPtr::dynamicCast((*d)->type());
- string sliceId = contained ? contained->scoped() : string("::Ice::Object");
- _out << nl << "_typeId = \"" << sliceId << "\";";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "break;";
- }
- memberCount++;
- }
- if(allClassMembers.size() > 1)
- {
- _out << eb;
- }
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "IceInternal.Ex.throwUOE(_typeId, v.ice_id());";
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "private " << name << " _instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "private int _member;";
- }
- _out << nl << "private string _typeId;";
- _out << eb;
- }
-
- _out << sp << nl << "public override void read__(IceInternal.BasicStream is__, bool rid__)";
- _out << sb;
- _out << nl << "if(rid__)";
- _out << sb;
- _out << nl << "/* string myId = */ is__.readTypeId();";
- _out << eb;
- _out << nl << "is__.startReadSlice();";
- int classMemberCount = static_cast<int>(allClassMembers.size() - classMembers.size());
- for(d = members.begin(); d != members.end(); ++d)
- {
- ostringstream patchParams;
- patchParams << "this";
- BuiltinPtr builtin = BuiltinPtr::dynamicCast((*d)->type());
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*d)->type()))
- {
- if(classMembers.size() > 1 || allClassMembers.size() > 1)
- {
- patchParams << ", " << classMemberCount++;
- }
- }
- writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- false, false, false, patchParams.str());
- }
- _out << nl << "is__.endReadSlice();";
- _out << nl << "base.read__(is__, true);";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Marshalling support
-}
-
-string
-Slice::CsVisitor::getParamAttributes(const ParamDeclPtr& p)
-{
- string result;
- StringList metaData = p->getMetaData();
- for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); ++i)
- {
- static const string prefix = "cs:attribute:";
- if(i->find(prefix) == 0)
- {
- result += "[" + i->substr(prefix.size()) + "] ";
- }
- }
- return result;
-}
-
-vector<string>
-Slice::CsVisitor::getParams(const OperationPtr& op)
-{
- vector<string> params;
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- string param = getParamAttributes(*q);
- if((*q)->isOutParam())
- {
- param += "out ";
- }
- param += typeToString((*q)->type()) + " " + fixId((*q)->name());
- params.push_back(param);
- }
- return params;
-}
-
-vector<string>
-Slice::CsVisitor::getParamsAsync(const OperationPtr& op, AsyncType type )
-{
- vector<string> params;
-
- string name = fixId(op->name());
- ContainerPtr container = op->container();
- ClassDefPtr cl = ClassDefPtr::dynamicCast(container); // Get the class containing the op.
- string scope = fixId(cl->scope());
- if(type == AMIDelegate)
- {
- params.push_back(scope + "AMI_" + cl->name() + '_' + op->name() + "_response resp__");
- params.push_back(scope + "AMI_" + cl->name() + '_' + op->name() + "_exception ex__");
- }
- else
- {
- params.push_back(scope + (type == AMD ? "AMD_" : "AMI_") + cl->name() + '_' + op->name() + " cb__");
- }
-
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- if(!(*q)->isOutParam())
- {
- params.push_back(getParamAttributes(*q) + typeToString((*q)->type()) + " " + fixId((*q)->name()));
- }
- }
- return params;
-}
-
-vector<string>
-Slice::CsVisitor::getParamsAsyncCB(const OperationPtr& op)
-{
- vector<string> params;
-
- TypePtr ret = op->returnType();
- if(ret)
- {
- params.push_back(typeToString(ret) + " ret__");
- }
-
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- if((*q)->isOutParam())
- {
- params.push_back(getParamAttributes(*q) + typeToString((*q)->type()) + ' ' + fixId((*q)->name()));
- }
- }
-
- return params;
-}
-
-vector<string>
-Slice::CsVisitor::getArgs(const OperationPtr& op)
-{
- vector<string> args;
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- string arg = fixId((*q)->name());
- if((*q)->isOutParam())
- {
- arg = "out " + arg;
- }
- args.push_back(arg);
- }
- return args;
-}
-
-vector<string>
-Slice::CsVisitor::getArgsAsync(const OperationPtr& op)
-{
- vector<string> args;
-
- args.push_back("cb__");
-
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- if(!(*q)->isOutParam())
- {
- args.push_back(fixId((*q)->name()));
- }
- }
- return args;
-}
-
-vector<string>
-Slice::CsVisitor::getArgsAsyncCB(const OperationPtr& op)
-{
- vector<string> args;
-
- TypePtr ret = op->returnType();
- if(ret)
- {
- args.push_back("ret__");
- }
-
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
- if((*q)->isOutParam())
- {
- args.push_back(fixId((*q)->name()));
- }
- }
-
- return args;
-}
-
-void
-Slice::CsVisitor::emitAttributes(const ContainedPtr& p)
-{
- StringList metaData = p->getMetaData();
- for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); ++i)
- {
- static const string prefix = "cs:attribute:";
- if(i->find(prefix) == 0)
- {
- _out << nl << '[' << i->substr(prefix.size()) << ']';
- }
- }
-}
-
-Slice::Gen::Gen(const string& name, const string& base, const vector<string>& includePaths, const string& dir) :
- _includePaths(includePaths)
-{
- _gen = this;
- SignalHandler::setCallback(closeCallback);
-
- string fileBase = base;
- string::size_type pos = base.find_last_of("/\\");
- if(pos != string::npos)
- {
- fileBase = base.substr(pos + 1);
- }
- string file = fileBase + ".cs";
- string fileImpl = fileBase + "I.cs";
-
- if(!dir.empty())
- {
- file = dir + '/' + file;
- fileImpl = dir + '/' + fileImpl;
- }
- SignalHandler::addFile(file);
- SignalHandler::addFile(fileImpl);
-
- _out.open(file.c_str());
- if(!_out)
- {
- cerr << name << ": can't open `" << file << "' for writing" << endl;
- return;
- }
- printHeader();
-
- _out << nl << "// Generated from file `" << fileBase << ".ice'";
-
- _out << sp << nl << "using _System = global::System;";
- _out << nl << "using _Microsoft = global::Microsoft;";
-}
-
-Slice::Gen::~Gen()
-{
- if(_out.isOpen())
- {
- _out << '\n';
- }
- if(_impl.isOpen())
- {
- _impl << '\n';
- }
-
- SignalHandler::setCallback(0);
-}
-
-bool
-Slice::Gen::operator!() const
-{
- return !_out;
-}
-
-void
-Slice::Gen::generate(const UnitPtr& p)
-{
-
- CsGenerator::validateMetaData(p);
-
- UnitVisitor unitVisitor(_out);
- p->visit(&unitVisitor, false);
-
- TypesVisitor typesVisitor(_out);
- p->visit(&typesVisitor, false);
-
- ProxyVisitor proxyVisitor(_out);
- p->visit(&proxyVisitor, false);
-
- OpsVisitor opsVisitor(_out);
- p->visit(&opsVisitor, false);
-
- HelperVisitor helperVisitor(_out);
- p->visit(&helperVisitor, false);
-
- DispatcherVisitor dispatcherVisitor(_out);
- p->visit(&dispatcherVisitor, false);
-
- AsyncVisitor asyncVisitor(_out);
- p->visit(&asyncVisitor, false);
-}
-
-void
-Slice::Gen::closeOutput()
-{
- _out.close();
- _impl.close();
-}
-
-void
-Slice::Gen::printHeader()
-{
- static const char* header =
-"// **********************************************************************\n"
-"//\n"
-"// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.\n"
-"//\n"
-"// This copy of Ice is licensed to you under the terms described in the\n"
-"// ICE_LICENSE file included in this distribution.\n"
-"//\n"
-"// **********************************************************************\n"
- ;
-
- _out << header;
- _out << "\n// Ice version " << ICE_STRING_VERSION;
-}
-
-Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out) :
- CsVisitor(out), _globalMetaDataDone(false)
-{
-}
-
-bool
-Slice::Gen::UnitVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!_globalMetaDataDone)
- {
- DefinitionContextPtr dc = p->definitionContext();
- StringList globalMetaData = dc->getMetaData();
-
- static const string attributePrefix = "cs:attribute:";
-
- if(!globalMetaData.empty())
- {
- _out << sp;
- }
- for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q)
- {
- string::size_type pos = q->find(attributePrefix);
- if(pos == 0)
- {
- string attrib = q->substr(pos + attributePrefix.size());
- _out << nl << '[' << attrib << ']';
- }
- }
- _globalMetaDataDone = true; // Do this only once per source file.
- }
- return false;
-}
-
-Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out) :
- CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::TypesVisitor::visitModuleStart(const ModulePtr& p)
-{
- DictionaryList dicts;
- if(p->hasOnlyDictionaries(dicts))
- {
- //
- // If this module contains only dictionaries and they
- // all use the new dictionary mapping, we don't need to generate
- // anything for the dictionary types. The early return prevents
- // an empty namespace from being emitted--the namespace will
- // be emitted later by the dictionary helper (which is generated
- // for both old and new dictionaries).
- //
- bool foundOld = false;
- for(DictionaryList::const_iterator i = dicts.begin(); i != dicts.end() && !foundOld; ++i)
- {
- if((*i)->hasMetaData("clr:collection"))
- {
- foundOld = true;
- }
- }
- if(!foundOld)
- {
- return false;
- }
- }
-
- string name = fixId(p->name());
- _out << sp;
- emitAttributes(p);
- _out << nl << "namespace " << name;
-
- _out << sb;
-
- return true;
-}
-
-void
-Slice::Gen::TypesVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
-/*
- if(p->isInterface() && !p->isLocal())
- {
- return false;
- }
-*/
-
- string name = p->name();
- ClassList bases = p->bases();
- bool hasBaseClass = !bases.empty() && !bases.front()->isInterface();
-
- _out << sp;
- emitAttributes(p);
-
- if(p->isInterface())
- {
- _out << nl << "public interface " << fixId(name) << " : ";
- if(p->isLocal())
- {
- _out << name << "OperationsNC_";
- }
- else
- {
- _out << "Ice.Object, " << name << "OperationsNC_";
- }
- if(!bases.empty())
- {
- ClassList::const_iterator q = bases.begin();
- while(q != bases.end())
- {
- _out << ", " << fixId((*q)->scoped());
- q++;
- }
- }
- }
- else
- {
- _out << nl << "public ";
- if(p->isAbstract())
- {
- _out << "abstract ";
- }
- _out << "class " << fixId(name);
-
- bool baseWritten = false;
-
- if(!hasBaseClass)
- {
- if(!p->isLocal())
- {
- _out << " : Ice.ObjectImpl";
- baseWritten = true;
- }
- }
- else
- {
- _out << " : " << fixId(bases.front()->scoped());
- baseWritten = true;
- bases.pop_front();
- }
- if(p->isAbstract())
- {
- if(baseWritten)
- {
- _out << ", ";
- }
- else
- {
- _out << " : ";
- baseWritten = true;
- }
-
- _out << name << "OperationsNC_";
- }
- for(ClassList::const_iterator q = bases.begin(); q != bases.end(); ++q)
- {
- if((*q)->isAbstract())
- {
- if(baseWritten)
- {
- _out << ", ";
- }
- else
- {
- _out << " : ";
- baseWritten = true;
- }
-
- _out << fixId((*q)->scoped());
- }
- }
- }
-
- _out << sb;
-
- if(!p->isInterface())
- {
- if(p->hasDataMembers() && !p->hasOperations())
- {
- _out << sp << nl << "#region Slice data members";
- }
- else if(p->hasDataMembers())
- {
- _out << sp << nl << "#region Slice data members and operations";
- }
- else if(p->hasOperations())
- {
- _out << sp << nl << "#region Slice operations";
- }
- }
-
- return true;
-}
-
-void
-Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
-{
- string name = fixId(p->name());
- DataMemberList classMembers = p->classDataMembers();
- DataMemberList allClassMembers = p->allClassDataMembers();
- DataMemberList dataMembers = p->dataMembers();
- DataMemberList allDataMembers = p->allDataMembers();
- ClassList bases = p->bases();
- bool hasBaseClass = !bases.empty() && !bases.front()->isInterface();
- DataMemberList::const_iterator d;
-
- if(p->isInterface())
- {
- _out << eb;
- return;
- }
-
- if(p->hasDataMembers() && !p->hasOperations())
- {
- _out << sp << nl << "#endregion"; // Slice data members"
- }
- else if(p->hasDataMembers())
- {
- _out << sp << nl << "#endregion"; // Slice data members and operations"
- }
- else if(p->hasOperations())
- {
- _out << sp << nl << "#endregion"; // Slice operations"
- }
-
- if(!allDataMembers.empty())
- {
- _out << sp << nl << "#region Constructors";
-
- _out << sp << nl << "public " << name << spar << epar;
- if(hasBaseClass)
- {
- _out << " : base()";
- }
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "public " << name << spar;
- vector<string> paramDecl;
- for(d = allDataMembers.begin(); d != allDataMembers.end(); ++d)
- {
- string memberName = fixId((*d)->name());
- string memberType = typeToString((*d)->type());
- paramDecl.push_back(memberType + " " + memberName);
- }
- _out << paramDecl << epar;
- if(hasBaseClass && allDataMembers.size() != dataMembers.size())
- {
- _out << " : base" << spar;
- vector<string> baseParamNames;
- DataMemberList baseDataMembers = bases.front()->allDataMembers();
- for(d = baseDataMembers.begin(); d != baseDataMembers.end(); ++d)
- {
- baseParamNames.push_back(fixId((*d)->name()));
- }
- _out << baseParamNames << epar;
- }
- _out << sb;
- vector<string> paramNames;
- for(d = dataMembers.begin(); d != dataMembers.end(); ++d)
- {
- paramNames.push_back(fixId((*d)->name()));
- }
- for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
- {
- _out << nl << "this." << *i << " = " << *i << ';';
- }
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Constructors
- }
-
- writeInheritedOperations(p);
- if(!p->isLocal())
- {
- string scoped = p->scoped();
- ClassList allBases = p->allBases();
- StringList ids;
-
- #if defined(__IBMCPP__) && defined(NDEBUG)
- //
- // VisualAge C++ 6.0 does not see that ClassDef is a Contained,
- // when inlining is on. The code below issues a warning: better
- // than an error!
- //
- transform(allBases.begin(), allBases.end(), back_inserter(ids), ::IceUtil::constMemFun<string,ClassDef>(&Contained::scoped));
- #else
- transform(allBases.begin(), allBases.end(), back_inserter(ids), ::IceUtil::constMemFun(&Contained::scoped));
- #endif
-
- StringList other;
- other.push_back(scoped);
- other.push_back("::Ice::Object");
- other.sort();
- ids.merge(other);
- ids.unique();
-
- StringList::const_iterator firstIter = ids.begin();
- StringList::const_iterator scopedIter = find(ids.begin(), ids.end(), scoped);
- assert(scopedIter != ids.end());
- StringList::difference_type scopedPos = IceUtilInternal::distance(firstIter, scopedIter);
-
- _out << sp << nl << "#region Slice type-related members";
-
- _out << sp << nl << "public static new string[] ids__ = ";
- _out << sb;
-
- {
- StringList::const_iterator q = ids.begin();
- while(q != ids.end())
- {
- _out << nl << '"' << *q << '"';
- if(++q != ids.end())
- {
- _out << ',';
- }
- }
- }
- _out << eb << ";";
-
- _out << sp << nl << "public override bool ice_isA(string s)";
- _out << sb;
- _out << nl << "return _System.Array.BinarySearch(ids__, 0, ids__.Length, s, IceUtil.StringUtil.OrdinalStringComparer) >= 0;";
- _out << eb;
-
- _out << sp << nl << "public override string[] ice_ids()";
- _out << sb;
- _out << nl << "return ids__;";
- _out << eb;
-
- _out << sp << nl << "public override string ice_id()";
- _out << sb;
- _out << nl << "return ids__[" << scopedPos << "];";
- _out << eb;
-
- _out << sp << nl << "public static new string ice_staticId()";
- _out << sb;
- _out << nl << "return ids__[" << scopedPos << "];";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Slice type-related members
-
- // Marshalling support
- _out << sp << nl << "#region Marshaling support";
-
- _out << sp << nl << "public override void write__(IceInternal.BasicStream os__)";
- _out << sb;
- _out << nl << "os__.writeTypeId(ice_staticId());";
- _out << nl << "os__.startWriteSlice();";
- for(d = dataMembers.begin(); d != dataMembers.end(); ++d)
- {
- writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- true, false, false);
- }
- _out << nl << "os__.endWriteSlice();";
- _out << nl << "base.write__(os__);";
- _out << eb;
-
- if(allClassMembers.size() != 0)
- {
- _out << sp << nl << "public sealed ";
- if(hasBaseClass && bases.front()->declaration()->usesClasses())
- {
- _out << "new ";
- }
- _out << "class Patcher__ : IceInternal.Patcher<" << name << ">";
- _out << sb;
- _out << sp << nl << "internal Patcher__(string type, Ice.ObjectImpl instance";
- if(allClassMembers.size() > 1)
- {
- _out << ", int member";
- }
- _out << ") : base(type)";
- _out << sb;
- _out << nl << "_instance = (" << name << ")instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "_member = member;";
- }
- _out << eb;
-
- _out << sp << nl << "public override void patch(Ice.Object v)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- if(allClassMembers.size() > 1)
- {
- _out << nl << "switch(_member)";
- _out << sb;
- }
- int memberCount = 0;
- for(d = allClassMembers.begin(); d != allClassMembers.end(); ++d)
- {
- if(allClassMembers.size() > 1)
- {
- _out.dec();
- _out << nl << "case " << memberCount << ":";
- _out.inc();
- }
- string memberName = fixId((*d)->name(), DotNet::ICloneable, true);
- string memberType = typeToString((*d)->type());
- _out << nl << "_instance." << memberName << " = (" << memberType << ")v;";
- _out << nl << "_typeId = \"" << memberType << "\";";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "break;";
- }
- memberCount++;
- }
- if(allClassMembers.size() > 1)
- {
- _out << eb;
- }
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "IceInternal.Ex.throwUOE(_typeId, v.ice_id());";
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "private " << name << " _instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "private int _member;";
- }
- _out << nl << "private string _typeId;";
- _out << eb;
- }
-
- _out << sp << nl << "public override void read__(IceInternal.BasicStream is__, bool rid__)";
- _out << sb;
- _out << nl << "if(rid__)";
- _out << sb;
- _out << nl << "/* string myId = */ is__.readTypeId();";
- _out << eb;
- _out << nl << "is__.startReadSlice();";
- int classMemberCount = static_cast<int>(allClassMembers.size() - classMembers.size());
- for(d = dataMembers.begin(); d != dataMembers.end(); ++d)
- {
- ostringstream patchParams;
- patchParams << "this";
- BuiltinPtr builtin = BuiltinPtr::dynamicCast((*d)->type());
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*d)->type()))
- {
- if(classMembers.size() > 1 || allClassMembers.size() > 1)
- {
- patchParams << ", " << classMemberCount++;
- }
- }
- writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- false, false, false, patchParams.str());
- }
- _out << nl << "is__.endReadSlice();";
- _out << nl << "base.read__(is__, true);";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Marshalling support
- }
-
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::visitOperation(const OperationPtr& p)
-{
- ClassDefPtr classDef = ClassDefPtr::dynamicCast(p->container());
- if(classDef->isInterface())
- {
- return;
- }
-
- string name = p->name();
- ParamDeclList paramList = p->parameters();
- vector<string> params;
- vector<string> args;
- string retS;
-
- params = getParams(p);
- args = getArgs(p);
- name = fixId(name, DotNet::ICloneable, true);
- retS = typeToString(p->returnType());
-
- _out << sp;
- emitAttributes(p);
- _out << nl << "public abstract ";
- _out << retS << " " << name << spar << params << epar;
- _out << ";";
-}
-
-void
-Slice::Gen::TypesVisitor::visitSequence(const SequencePtr& p)
-{
- //
- // No need to generate anything if the sequence is mapped as an array.
- //
- if(!p->hasMetaData("clr:collection"))
- {
- return;
- }
-
- //
- // No need to generate anything for custom sequences.
- //
- string prefix = "clr:type:";
- string meta;
- if(p->findMetaData(prefix, meta))
- {
- return;
- }
-
- string name = fixId(p->name());
- string s = typeToString(p->type());
-
- _out << sp;
-
- emitDeprecate(p, 0, _out, "type");
-
- emitAttributes(p);
- _out << nl << "public class " << name
- << " : Ice.CollectionBase<" << s << ">, _System.ICloneable";
- _out << sb;
-
- _out << sp << nl << "#region Constructors";
-
- _out << sp << nl << "public " << name << "() : base()";
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "public " << name << "(int capacity) : base(capacity)";
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "public " << name << "(" << s << "[] a__) : base(a__)";
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "public " << name << "(_System.Collections.Generic.IEnumerable<" << s << "> l__) : base(l__)";
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Constructors
-
- _out << sp << nl << "#region Implicit conversion to generic List";
-
- _out << sp << nl << "public static implicit operator _System.Collections.Generic.List<"
- << s << ">(" << name << " s__)";
- _out << sb;
- _out << nl << "return s__.list_;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Implicit conversion to generic List
-
- _out << sp << nl << "#region Operations returning a new sequence";
-
- _out << sp << nl << "public virtual " << name << " GetRange(int index, int count)";
- _out << sb;
- _out << nl << "_System.Collections.Generic.List<" << s << "> l = list_.GetRange(index, count);";
- _out << nl << name << " r = new " << name << "(l.Count);";
- _out << nl << "r.list_.AddRange(l);";
- _out << nl << "return r;";
- _out << eb;
-
- _out << sp << nl << "public static " << name << " Repeat(" << s << " value, int count)";
- _out << sb;
- _out << nl << name << " r = new " << name << "(count);";
- _out << nl << "for(int i = 0; i < count; ++i)";
- _out << sb;
- _out << nl << "r.Add(value);";
- _out << eb;
- _out << nl << "return r;";
- _out << eb;
-
- _out << sp << nl << "public object Clone()";
- _out << sb;
- _out << nl << name << " s = new " << name << "(Count);";
- _out << nl << "s.list_.AddRange(list_);";
- _out << nl << "return s;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Operations returning a new sequence
-
- _out << eb;
-}
-
-bool
-Slice::Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p)
-{
- string name = fixId(p->name());
- ExceptionPtr base = p->base();
-
- _out << sp;
-
- emitDeprecate(p, 0, _out, "type");
-
- emitAttributes(p);
- _out << nl << "public class " << name << " : ";
- if(base)
- {
- _out << fixId(base->scoped());
- }
- else
- {
- _out << (p->isLocal() ? "Ice.LocalException" : "Ice.UserException");
- }
- _out << sb;
-
- if(!p->dataMembers().empty())
- {
- _out << sp << nl << "#region Slice data members";
- }
-
- return true;
-}
-
-void
-Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
-{
- string name = fixId(p->name());
-
- DataMemberList allDataMembers = p->allDataMembers();
- DataMemberList dataMembers = p->dataMembers();
- DataMemberList::const_iterator q;
-
- vector<string> allParamDecl;
- for(q = allDataMembers.begin(); q != allDataMembers.end(); ++q)
- {
- string memberName = fixId((*q)->name());
- string memberType = typeToString((*q)->type());
- allParamDecl.push_back(memberType + " " + memberName);
- }
-
- vector<string> paramNames;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- paramNames.push_back(fixId((*q)->name()));
- }
-
- vector<string> paramDecl;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- string memberName = fixId((*q)->name());
- string memberType = typeToString((*q)->type());
- paramDecl.push_back(memberType + " " + memberName);
- }
-
- vector<string> baseParamNames;
- DataMemberList baseDataMembers;
-
- if(p->base())
- {
- baseDataMembers = p->base()->allDataMembers();
- for(q = baseDataMembers.begin(); q != baseDataMembers.end(); ++q)
- {
- baseParamNames.push_back(fixId((*q)->name()));
- }
- }
-
- if(!dataMembers.empty())
- {
- _out << sp << nl << "#endregion"; // Slice data members
- }
-
- _out << sp << nl << "#region Constructors";
-
- _out << sp << nl << "public " << name << "()";
- _out << sb;
- _out << eb;
-
- _out << sp << nl << "public " << name << "(_System.Exception ex__) : base(ex__)";
- _out << sb;
- _out << eb;
-
- if(!allDataMembers.empty())
- {
- if(!dataMembers.empty())
- {
- _out << sp << nl << "private void initDM__" << spar << paramDecl << epar;
- _out << sb;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- string name = fixId((*q)->name(), DotNet::Exception, false);
- _out << nl << "this." << name << " = " << fixId((*q)->name()) << ';';
- }
- _out << eb;
- }
-
- _out << sp << nl << "public " << name << spar << allParamDecl << epar;
- if(p->base() && allDataMembers.size() != dataMembers.size())
- {
- _out << " : base" << spar << baseParamNames << epar;
- }
- _out << sb;
- if(!dataMembers.empty())
- {
- _out << nl << "initDM__" << spar << paramNames << epar << ';';
- }
- _out << eb;
-
- vector<string> exceptionParam;
- exceptionParam.push_back("ex__");
- vector<string> exceptionDecl;
- exceptionDecl.push_back("_System.Exception ex__");
- _out << sp << nl << "public " << name << spar << allParamDecl << exceptionDecl << epar << " : base" << spar;
- if(p->base() && allDataMembers.size() != dataMembers.size())
- {
- _out << baseParamNames;
- }
- _out << exceptionParam << epar;
- _out << sb;
- if(!dataMembers.empty())
- {
- _out << nl << "initDM__" << spar << paramNames << epar << ';';
- }
- _out << eb;
- }
-
- _out << sp << nl << "#endregion"; // Constructors
-
- _out << sp << nl << "#region Object members";
-
- _out << sp << nl << "public override int GetHashCode()";
- _out << sb;
- if(p->base())
- {
- _out << nl << "int h__ = base.GetHashCode();";
- }
- else
- {
- _out << nl << "int h__ = 0;";
- }
- writeMemberHashCode(dataMembers, DotNet::Exception);
- _out << nl << "return h__;";
- _out << eb;
-
- _out << sp << nl << "public override bool Equals(object other__)";
- _out << sb;
- _out << nl << "if(other__ == null)";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- _out << nl << "if(object.ReferenceEquals(this, other__))";
- _out << sb;
- _out << nl << "return true;";
- _out << eb;
- _out << nl << "if(!(other__ is " << name << "))";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- if(p->base())
- {
- _out << nl << "if(!base.Equals(other__))";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- }
- if(!dataMembers.empty())
- {
- _out << nl << name << " o__ = (" << name << ")other__;";
- }
- writeMemberEquals(dataMembers, DotNet::Exception);
- _out << nl << "return true;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Object members
-
- _out << sp << nl << "#region Comparison members";
-
- _out << sp << nl << "public static bool operator==(" << name << " lhs__, " << name << " rhs__)";
- _out << sb;
- _out << nl << "return Equals(lhs__, rhs__);";
- _out << eb;
-
- _out << sp << nl << "public static bool operator!=(" << name << " lhs__, " << name << " rhs__)";
- _out << sb;
- _out << nl << "return !Equals(lhs__, rhs__);";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Comparison members
-
- if(!p->isLocal())
- {
- _out << sp << nl << "#region Marshaling support";
-
- string scoped = p->scoped();
- ExceptionPtr base = p->base();
-
- _out << sp << nl << "public override void write__(IceInternal.BasicStream os__)";
- _out << sb;
- _out << nl << "os__.writeString(\"" << scoped << "\");";
- _out << nl << "os__.startWriteSlice();";
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, DotNet::Exception),
- true, false, false);
- }
- _out << nl << "os__.endWriteSlice();";
- if(base)
- {
- _out << nl << "base.write__(os__);";
- }
- _out << eb;
-
- DataMemberList allClassMembers = p->allClassDataMembers();
- if(allClassMembers.size() != 0)
- {
- _out << sp << nl << "public sealed ";
- if(base && base->usesClasses())
- {
- _out << "new ";
- }
- _out << "class Patcher__ : IceInternal.Patcher<" << name << ">";
- _out << sb;
- _out << sp << nl << "internal Patcher__(string type, Ice.Exception instance";
- if(allClassMembers.size() > 1)
- {
- _out << ", int member";
- }
- _out << ") : base(type)";
- _out << sb;
- _out << nl << "_instance = (" << name << ")instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "_member = member;";
- }
- _out << eb;
-
- _out << sp << nl << "public override void patch(Ice.Object v)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- if(allClassMembers.size() > 1)
- {
- _out << nl << "switch(_member)";
- _out << sb;
- }
- int memberCount = 0;
- for(q = allClassMembers.begin(); q != allClassMembers.end(); ++q)
- {
- if(allClassMembers.size() > 1)
- {
- _out.dec();
- _out << nl << "case " << memberCount << ":";
- _out.inc();
- }
- string memberName = fixId((*q)->name(), DotNet::Exception);
- string memberType = typeToString((*q)->type());
- _out << nl << "_instance." << memberName << " = (" << memberType << ")v;";
- ContainedPtr contained = ContainedPtr::dynamicCast((*q)->type());
- string sliceId = contained ? contained->scoped() : string("::Ice::Object");
- _out << nl << "_typeId = \"" << sliceId << "\";";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "break;";
- }
- memberCount++;
- }
- if(allClassMembers.size() > 1)
- {
- _out << eb;
- }
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "IceInternal.Ex.throwUOE(_typeId, v.ice_id());";
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "private " << name << " _instance;";
- if(allClassMembers.size() > 1)
- {
- _out << nl << "private int _member;";
- }
- _out << nl << "private string _typeId;";
- _out << eb;
- }
-
- _out << sp << nl << "public override void read__(IceInternal.BasicStream is__, bool rid__)";
- _out << sb;
- _out << nl << "if(rid__)";
- _out << sb;
- _out << nl << "/* string myId = */ is__.readString();";
- _out << eb;
- _out << nl << "is__.startReadSlice();";
- DataMemberList classMembers = p->classDataMembers();
- int classMemberCount = static_cast<int>(allClassMembers.size() - classMembers.size());
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- ostringstream patchParams;
- patchParams << "this";
- BuiltinPtr builtin = BuiltinPtr::dynamicCast((*q)->type());
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*q)->type()))
- {
- if(classMembers.size() > 1 || allClassMembers.size() > 1)
- {
- patchParams << ", " << classMemberCount++;
- }
- }
- writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::Exception),
- false, false, false, patchParams.str());
- }
- _out << nl << "is__.endReadSlice();";
- if(base)
- {
- _out << nl << "base.read__(is__, true);";
- }
- _out << eb;
-
- if(!base || !base->usesClasses())
- {
- _out << sp << nl << "public override bool usesClasses__()";
- _out << sb;
- _out << nl << "return true;";
- _out << eb;
- }
-
- _out << sp << nl << "#endregion"; // Marshalling support
- }
-
- _out << eb;
-}
-
-bool
-Slice::Gen::TypesVisitor::visitStructStart(const StructPtr& p)
-{
- string name = fixId(p->name());
-
- _out << sp;
-
- emitDeprecate(p, 0, _out, "type");
-
- emitAttributes(p);
- if(isValueType(p))
- {
- _out << nl << "public struct " << name;
- }
- else
- {
- _out << nl << "public class " << name << " : _System.ICloneable";
- }
- _out << sb;
-
- _out << sp << nl << "#region Slice data members";
-
- return true;
-}
-
-void
-Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
-{
- string name = fixId(p->name());
-
- DataMemberList classMembers = p->classDataMembers();
- DataMemberList dataMembers = p->dataMembers();
- DataMemberList::const_iterator q;
-
- bool propertyMapping = p->hasMetaData("clr:property");
-
- _out << sp << nl << "#endregion"; // Slice data members
-
- bool isClass = !isValueType(p);
-
- _out << sp << nl << "#region Constructor";
- if(isClass)
- {
- _out << "s";
- _out << sp << nl << "public " << name << "()";
- _out << sb;
- _out << eb;
- }
-
- _out << sp << nl << "public " << name << spar;
- vector<string> paramDecl;
- vector<string> paramNames;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
- string memberType = typeToString((*q)->type());
- paramDecl.push_back(memberType + " " + memberName);
- paramNames.push_back(memberName);
- }
- _out << paramDecl << epar;
- _out << sb;
- for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
- {
- _out << nl << "this." << *i;
- if(propertyMapping)
- {
- _out << "_prop";
- }
- _out << " = " << *i << ';';
- }
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Constructor(s)
-
- if(isClass)
- {
- _out << sp << nl << "#region ICloneable members";
-
- _out << sp << nl << "public object Clone()";
- _out << sb;
- _out << nl << "return MemberwiseClone();";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // ICloneable members
- }
-
- _out << sp << nl << "#region Object members";
-
- _out << sp << nl << "public override int GetHashCode()";
- _out << sb;
- _out << nl << "int h__ = 0;";
- writeMemberHashCode(dataMembers, isClass ? DotNet::ICloneable : 0);
- _out << nl << "return h__;";
- _out << eb;
-
- _out << sp << nl << "public override bool Equals(object other__)";
- _out << sb;
- if(isClass)
- {
- _out << nl << "if(object.ReferenceEquals(this, other__))";
- _out << sb;
- _out << nl << "return true;";
- _out << eb;
- }
- if(isClass)
- {
- _out << nl << "if(other__ == null)";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- _out << nl << "if(GetType() != other__.GetType())";
- }
- else
- {
- _out << nl << "if(!(other__ is " << name << "))";
- }
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- if(!dataMembers.empty())
- {
- _out << nl << name << " o__ = (" << name << ")other__;";
- }
- writeMemberEquals(dataMembers, isClass ? DotNet::ICloneable : 0);
- _out << nl << "return true;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Object members
-
- _out << sp << nl << "#region Comparison members";
-
- _out << sp << nl << "public static bool operator==(" << name << " lhs__, " << name << " rhs__)";
- _out << sb;
- _out << nl << "return Equals(lhs__, rhs__);";
- _out << eb;
-
- _out << sp << nl << "public static bool operator!=(" << name << " lhs__, " << name << " rhs__)";
- _out << sb;
- _out << nl << "return !Equals(lhs__, rhs__);";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Comparison members
-
- if(!p->isLocal())
- {
- _out << sp << nl << "#region Marshalling support";
-
- _out << sp << nl << "public void write__(IceInternal.BasicStream os__)";
- _out << sb;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0),
- true, false, false);
- }
- _out << eb;
-
-
- if(isClass && classMembers.size() != 0)
- {
- _out << sp << nl << "public sealed class Patcher__ : IceInternal.Patcher<" << name << ">";
- _out << sb;
- _out << sp << nl << "internal Patcher__(string type, " << name << " instance";
- if(classMembers.size() > 1)
- {
- _out << ", int member";
- }
- _out << ") : base(type)";
- _out << sb;
- _out << nl << "_instance = (" << name << ")instance;";
- if(classMembers.size() > 1)
- {
- _out << nl << "_member = member;";
- }
- _out << eb;
-
- _out << sp << nl << "public override void patch(Ice.Object v)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- if(classMembers.size() > 1)
- {
- _out << nl << "switch(_member)";
- _out << sb;
- }
- int memberCount = 0;
- for(q = classMembers.begin(); q != classMembers.end(); ++q)
- {
- if(classMembers.size() > 1)
- {
- _out.dec();
- _out << nl << "case " << memberCount << ":";
- _out.inc();
- }
- string memberType = typeToString((*q)->type());
- string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
- _out << nl << "_instance." << memberName << " = (" << memberType << ")v;";
- ContainedPtr contained = ContainedPtr::dynamicCast((*q)->type());
- string sliceId = contained ? contained->scoped() : string("::Ice::Object");
- _out << nl << "_typeId = \"" << sliceId << "\";";
- if(classMembers.size() > 1)
- {
- _out << nl << "break;";
- }
- memberCount++;
- }
- if(classMembers.size() > 1)
- {
- _out << eb;
- }
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "IceInternal.Ex.throwUOE(_typeId, v.ice_id());";
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "private " << name;
- _out << " _instance;";
- if(classMembers.size() > 1)
- {
- _out << nl << "private int _member;";
- }
- _out << nl << "private string _typeId;";
- _out << eb;
- }
-
- _out << sp << nl << "public void read__(IceInternal.BasicStream is__)";
- _out << sb;
- int classMemberCount = 0;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- ostringstream patchParams;
- patchParams << "this";
- BuiltinPtr builtin = BuiltinPtr::dynamicCast((*q)->type());
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast((*q)->type()))
- {
- if(classMembers.size() > 1)
- {
- patchParams << ", " << classMemberCount++;
- }
- }
- writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0 ),
- false, false, false, patchParams.str());
- }
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Marshalling support
- }
-
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::visitDictionary(const DictionaryPtr& p)
-{
- if(!p->hasMetaData("clr:collection"))
- {
- return;
- }
-
- string name = fixId(p->name());
- string ks = typeToString(p->keyType());
- string vs = typeToString(p->valueType());
-
- _out << sp;
-
- emitDeprecate(p, 0, _out, "type");
-
- emitAttributes(p);
- _out << nl << "public class " << name
- << " : Ice.DictionaryBase<" << ks << ", " << vs << ">, _System.ICloneable";
- _out << sb;
-
- _out << sp << nl << "#region " << name << " members";
-
- _out << sp << nl << "public void AddRange(" << name << " d__)";
- _out << sb;
- _out << nl << "foreach(_System.Collections.Generic.KeyValuePair<" << ks << ", " << vs << "> e in d__.dict_)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- _out << nl << "dict_.Add(e.Key, e.Value);";
- _out << eb;
- _out << nl << "catch(_System.ArgumentException)";
- _out << sb;
- _out << nl << "// ignore";
- _out << eb;
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "#endregion"; // <name> members
-
- _out << sp << nl << "#region ICloneable members";
-
- _out << sp << nl << "public object Clone()";
- _out << sb;
- _out << nl << name << " d = new " << name << "();";
- _out << nl << "foreach(_System.Collections.Generic.KeyValuePair<" << ks << ", " << vs <<"> e in dict_)";
- _out << sb;
- _out << nl << "d.dict_.Add(e.Key, e.Value);";
- _out << eb;
- _out << nl << "return d;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // ICloneable members
-
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p)
-{
- string name = fixId(p->name());
- string scoped = fixId(p->scoped());
- EnumeratorList enumerators = p->getEnumerators();
- _out << sp;
-
- emitDeprecate(p, 0, _out, "type");
-
- emitAttributes(p);
- _out << nl << "public enum " << name;
- _out << sb;
- EnumeratorList::const_iterator en = enumerators.begin();
- while(en != enumerators.end())
- {
- _out << nl << fixId((*en)->name());
- if(++en != enumerators.end())
- {
- _out << ',';
- }
- }
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::visitConst(const ConstPtr& p)
-{
- string name = fixId(p->name());
- _out << sp;
- emitAttributes(p);
- _out << nl << "public abstract class " << name;
- _out << sb;
- _out << sp << nl << "public const " << typeToString(p->type()) << " value = ";
- BuiltinPtr bp = BuiltinPtr::dynamicCast(p->type());
- if(bp && bp->kind() == Builtin::KindString)
- {
- //
- // Expand strings into the basic source character set. We can't use isalpha() and the like
- // here because they are sensitive to the current locale.
- //
- static const string basicSourceChars = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789"
- "_{}[]#()<>%:;.?*+-/^&|~!=,\\\"' ";
- static const set<char> charSet(basicSourceChars.begin(), basicSourceChars.end());
-
- _out << "\""; // Opening "
-
- const string val = p->value();
- for(string::const_iterator c = val.begin(); c != val.end(); ++c)
- {
- if(charSet.find(*c) == charSet.end())
- {
- unsigned char uc = *c; // char may be signed, so make it positive
- ostringstream s;
- s << "\\u"; // Print as unicode if not in basic source character set
- s << hex;
- s.width(4);
- s.fill('0');
- s << static_cast<unsigned>(uc);
- _out << s.str();
- }
- else
- {
- _out << *c; // Print normally if in basic source character set
- }
- }
-
- _out << "\""; // Closing "
- }
- else if(bp && bp->kind() == Builtin::KindLong)
- {
- _out << p->value() << "L";
- }
- else if(bp && bp->kind() == Builtin::KindFloat)
- {
- _out << p->value() << "F";
- }
- else
- {
- EnumPtr ep = EnumPtr::dynamicCast(p->type());
- if(ep)
- {
- _out << typeToString(p->type()) << "." << fixId(p->value());
- }
- else
- {
- _out << p->value();
- }
- }
- _out << ";";
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::visitDataMember(const DataMemberPtr& p)
-{
- int baseTypes = 0;
- bool isClass = false;
- bool propertyMapping = false;
- bool isValue = false;
- bool isProtected = false;
- ContainedPtr cont = ContainedPtr::dynamicCast(p->container());
- assert(cont);
- if(StructPtr::dynamicCast(cont))
- {
- isValue = isValueType(StructPtr::dynamicCast(cont));
- if(!isValue || cont->hasMetaData("clr:class"))
- {
- baseTypes = DotNet::ICloneable;
- }
- if(cont->hasMetaData("clr:property"))
- {
- propertyMapping = true;
- }
- }
- else if(ExceptionPtr::dynamicCast(cont))
- {
- baseTypes = DotNet::Exception;
- }
- else if(ClassDefPtr::dynamicCast(cont))
- {
- baseTypes = DotNet::ICloneable;
- isClass = true;
- if(cont->hasMetaData("clr:property"))
- {
- propertyMapping = true;
- }
- isProtected = cont->hasMetaData("protected") || p->hasMetaData("protected");
- }
-
- _out << sp;
-
- emitDeprecate(p, cont, _out, "member");
-
- emitAttributes(p);
-
- string type = typeToString(p->type());
- string propertyName = fixId(p->name(), baseTypes, isClass);
- string dataMemberName = propertyName;
- if(propertyMapping)
- {
- dataMemberName += "_prop";
- }
-
- _out << nl;
- if(propertyMapping)
- {
- _out << "private";
- }
- else if(isProtected)
- {
- _out << "protected";
- }
- else
- {
- _out << "public";
- }
- _out << ' ' << type << ' ' << dataMemberName << ';';
-
- if(!propertyMapping)
- {
- return;
- }
-
- _out << nl << (isProtected ? "protected" : "public");
- if(!isValue)
- {
- _out << " virtual";
- }
- _out << ' ' << type << ' ' << propertyName;
- _out << sb;
- _out << nl << "get";
- _out << sb;
- _out << nl << "return " << dataMemberName << ';';
- _out << eb;
- _out << nl << "set";
- _out << sb;
- _out << nl << dataMemberName << " = value;";
- _out << eb;
- _out << eb;
-}
-
-void
-Slice::Gen::TypesVisitor::writeMemberHashCode(const DataMemberList& dataMembers, int baseTypes)
-{
- for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- string memberName = fixId((*q)->name(), baseTypes);
- TypePtr memberType = (*q)->type();
- bool isValue = isValueType(memberType);
- if(!isValue)
- {
- _out << nl << "if(" << memberName << " != null)";
- _out << sb;
- }
- SequencePtr seq = SequencePtr::dynamicCast(memberType);
- if(seq)
- {
- string genericType;
- bool isGeneric = seq->findMetaData("clr:generic:", genericType);
- bool isArray = !isGeneric && !seq->hasMetaData("clr:collection");
- if(isArray)
- {
- //
- // GetHashCode() for native arrays does not have value semantics.
- //
- _out << nl << "h__ = 5 * h__ + IceUtil.Arrays.GetHashCode(" << memberName << ");";
- }
- else if(isGeneric)
- {
- //
- // GetHashCode() for generic types does not have value semantics.
- //
- _out << nl << "h__ = 5 * h__ + IceUtil.Collections.SequenceGetHashCode(" << memberName << ");";
- }
- else
- {
- //
- // GetHashCode() for CollectionBase has value semantics.
- //
- _out << nl << "h__ = 5 * h__ + " << memberName << ".GetHashCode();";
- }
- }
- else
- {
- DictionaryPtr dict = DictionaryPtr::dynamicCast(memberType);
- if(dict)
- {
- if(dict->hasMetaData("clr:collection"))
- {
- //
- // GetHashCode() for DictionaryBase has value semantics.
- //
- _out << nl << "h__ = 5 * h__ + " << memberName << ".GetHashCode();";
- }
- else
- {
- //
- // GetHashCode() for generic types does not have value semantics.
- //
- _out << nl << "h__ = 5 * h__ + IceUtil.Collections.DictionaryGetHashCode(" << memberName
- << ");";
- }
- }
- else
- {
- _out << nl << "h__ = 5 * h__ + " << memberName << ".GetHashCode();";
- }
- }
- if(!isValue)
- {
- _out << eb;
- }
- }
-}
-
-void
-Slice::Gen::TypesVisitor::writeMemberEquals(const DataMemberList& dataMembers, int baseTypes)
-{
- for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
- string memberName = fixId((*q)->name(), baseTypes);
- TypePtr memberType = (*q)->type();
- if(!isValueType(memberType))
- {
- _out << nl << "if(" << memberName << " == null)";
- _out << sb;
- _out << nl << "if(o__." << memberName << " != null)";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- _out << eb;
- _out << nl << "else";
- _out << sb;
- SequencePtr seq = SequencePtr::dynamicCast(memberType);
- if(seq)
- {
- string genericType;
- bool isGeneric = seq->findMetaData("clr:generic:", genericType);
- bool isArray = !isGeneric && !seq->hasMetaData("clr:collection");
- if(isArray)
- {
- //
- // Equals() for native arrays does not have value semantics.
- //
- _out << nl << "if(!IceUtil.Arrays.Equals(" << memberName << ", o__." << memberName << "))";
- }
- else if(isGeneric)
- {
- //
- // Equals() for generic types does not have value semantics.
- //
- _out << nl << "if(!IceUtil.Collections.SequenceEquals(" << memberName << ", o__."
- << memberName << "))";
- }
- else
- {
- //
- // Equals() for CollectionBase has value semantics.
- //
- _out << nl << "if(!" << memberName << ".Equals(o__." << memberName << "))";
- }
- }
- else
- {
- DictionaryPtr dict = DictionaryPtr::dynamicCast(memberType);
- if(dict)
- {
- if(dict->hasMetaData("clr:collection"))
- {
- //
- // Equals() for DictionaryBase has value semantics.
- //
- _out << nl << "if(!" << memberName << ".Equals(o__." << memberName << "))";
- }
- else
- {
- //
- // Equals() for generic types does not have value semantics.
- //
- _out << nl << "if(!IceUtil.Collections.DictionaryEquals(" << memberName << ", o__."
- << memberName << "))";
- }
- }
- else
- {
- _out << nl << "if(!" << memberName << ".Equals(o__." << memberName << "))";
- }
- }
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- _out << eb;
- }
- else
- {
- _out << nl << "if(!" << memberName << ".Equals(o__." << memberName << "))";
- _out << sb;
- _out << nl << "return false;";
- _out << eb;
- }
- }
-}
-
-Slice::Gen::ProxyVisitor::ProxyVisitor(IceUtilInternal::Output& out)
- : CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::ProxyVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!p->hasNonLocalClassDecls())
- {
- return false;
- }
-
- _out << sp << nl << "namespace " << fixId(p->name());
- _out << sb;
- return true;
-}
-
-void
-Slice::Gen::ProxyVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::ProxyVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
- if(p->isLocal())
- {
- return false;
- }
-
- string name = p->name();
- ClassList bases = p->bases();
-
- _out << sp << nl << "public interface " << name << "Prx : ";
- if(bases.empty())
- {
- _out << "Ice.ObjectPrx";
- }
- else
- {
- ClassList::const_iterator q = bases.begin();
- while(q != bases.end())
- {
- _out << fixId((*q)->scoped() + "Prx");
- if(++q != bases.end())
- {
- _out << ", ";
- }
- }
- }
-
- _out << sb;
-
- return true;
-}
-
-void
-Slice::Gen::ProxyVisitor::visitClassDefEnd(const ClassDefPtr&)
-{
- _out << eb;
-}
-
-void
-Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
-{
- ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container());
- string name = fixId(p->name(), DotNet::ICloneable, true);
- vector<string> params = getParams(p);
-
- _out << sp;
-
- string deprecateMetadata, deprecateReason;
- if(p->findMetaData("deprecate", deprecateMetadata) || cl->findMetaData("deprecate", deprecateMetadata))
- {
- deprecateReason = "This operation has been deprecated.";
- if(deprecateMetadata.find("deprecate:") == 0 && deprecateMetadata.size() > 10)
- {
- deprecateReason = deprecateMetadata.substr(10);
- }
- }
-
- //
- // Write two versions of the operation - with and without a
- // context parameter.
- //
- if(!deprecateReason.empty())
- {
- _out << nl << "[System.Obsolete(\"" << deprecateReason << "\")]";
- }
- _out << nl << typeToString(p->returnType()) << " " << name << spar << params << epar << ';';
-
- if(!deprecateReason.empty())
- {
- _out << nl << "[System.Obsolete(\"" << deprecateReason << "\")]";
- }
- _out << nl << typeToString(p->returnType()) << " " << name
- << spar << params << "_System.Collections.Generic.Dictionary<string, string> context__" << epar << ';';
-
- if(cl->hasMetaData("ami") || p->hasMetaData("ami"))
- {
- vector<string> paramsAMI = getParamsAsync(p, AMIDelegate);
-
- //
- // Write two versions of the operation - with and without a
- // context parameter.
- //
- _out << sp;
- if(!deprecateReason.empty())
- {
- _out << nl << "[System.Obsolete(\"" << deprecateReason << "\")]";
- }
- _out << nl << "void " << p->name() << "_async" << spar << paramsAMI << epar << ';';
- if(!deprecateReason.empty())
- {
- _out << nl << "[System.Obsolete(\"" << deprecateReason << "\")]";
- }
- _out << nl << "void " << p->name() << "_async" << spar << paramsAMI
- << "_System.Collections.Generic.Dictionary<string, string> ctx__" << epar << ';';
- }
-}
-
-Slice::Gen::OpsVisitor::OpsVisitor(IceUtilInternal::Output& out)
- : CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::OpsVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!p->hasAbstractClassDefs())
- {
- return false;
- }
-
- _out << sp << nl << "namespace " << fixId(p->name());
- _out << sb;
- return true;
-}
-
-void
-Slice::Gen::OpsVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::OpsVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
- //
- // Don't generate Operations interfaces for non-abstract classes.
- //
- if(!p->isAbstract())
- {
- return false;
- }
-
- writeOperations(p, true);
-
- return false;
-}
-
-void
-Slice::Gen::OpsVisitor::writeOperations(const ClassDefPtr& p, bool noCurrent)
-{
- string name = p->name();
- string scoped = fixId(p->scoped());
- ClassList bases = p->bases();
- string opIntfName = "Operations";
- if(noCurrent || p->isLocal())
- {
- opIntfName += "NC";
- }
-
- _out << sp << nl << "public interface " << name << opIntfName << '_';
- if((bases.size() == 1 && bases.front()->isAbstract()) || bases.size() > 1)
- {
- _out << " : ";
- ClassList::const_iterator q = bases.begin();
- bool first = true;
- while(q != bases.end())
- {
- if((*q)->isAbstract())
- {
- if(!first)
- {
- _out << ", ";
- }
- else
- {
- first = false;
- }
- string s = (*q)->scoped();
- s += "Operations";
- if(noCurrent)
- {
- s += "NC";
- }
- _out << fixId(s) << '_';
- }
- ++q;
- }
- }
- _out << sb;
-
- OperationList ops = p->operations();
- OperationList::const_iterator r;
- for(r = ops.begin(); r != ops.end(); ++r)
- {
- OperationPtr op = *r;
- bool amd = !p->isLocal() && (p->hasMetaData("amd") || op->hasMetaData("amd"));
- string opname = amd ? (op->name() + "_async") : fixId(op->name(), DotNet::ICloneable, true);
-
- TypePtr ret;
- vector<string> params;
-
- if(amd)
- {
- params = getParamsAsync(op, AMD);
- }
- else
- {
- params = getParams(op);
- ret = op->returnType();
- }
-
- _out << sp;
-
- emitDeprecate(op, p, _out, "operation");
-
- emitAttributes(op);
- string retS = typeToString(ret);
- _out << nl << retS << ' ' << opname << spar << params;
- if(!noCurrent && !p->isLocal())
- {
- _out << "Ice.Current current__";
- }
- _out << epar << ';';
- }
-
- _out << eb;
-}
-
-Slice::Gen::HelperVisitor::HelperVisitor(IceUtilInternal::Output& out) :
- CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::HelperVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!p->hasNonLocalClassDecls() && !p->hasNonLocalSequences() && !p->hasDictionaries())
- {
- return false;
- }
-
- _out << sp << nl << "namespace " << fixId(p->name());
- _out << sb;
- return true;
-}
-
-void
-Slice::Gen::HelperVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
- if(p->isLocal())
- return false;
-
- string name = p->name();
- ClassList bases = p->bases();
-
- _out << sp << nl << "public sealed class " << name << "PrxHelper : Ice.ObjectPrxHelperBase, " << name << "Prx";
- _out << sb;
-
- OperationList ops = p->allOperations();
-
- if(!ops.empty())
- {
- _out << sp << nl << "#region Synchronous operations";
- }
-
- OperationList::const_iterator r;
- for(r = ops.begin(); r != ops.end(); ++r)
- {
- OperationPtr op = *r;
- string opName = fixId(op->name(), DotNet::ICloneable, true);
- TypePtr ret = op->returnType();
- string retS = typeToString(ret);
-
- TypeStringList inParams;
- TypeStringList outParams;
- ParamDeclList paramList = op->parameters();
- for(ParamDeclList::const_iterator pli = paramList.begin(); pli != paramList.end(); ++pli)
- {
- if((*pli)->isOutParam())
- {
- outParams.push_back(make_pair((*pli)->type(), (*pli)->name()));
- }
- else
- {
- inParams.push_back(make_pair((*pli)->type(), (*pli)->name()));
- }
- }
-
- TypeStringList::const_iterator q;
-
- ExceptionList throws = op->throws();
- throws.sort();
- throws.unique();
-
- //
- // Arrange exceptions into most-derived to least-derived order. If we don't
- // do this, a base exception handler can appear before a derived exception
- // handler, causing compiler warnings and resulting in the base exception
- // being marshaled instead of the derived exception.
- //
-#if defined(__SUNPRO_CC)
- throws.sort(Slice::derivedToBaseCompare);
-#else
- throws.sort(Slice::DerivedToBaseCompare());
-#endif
-
- vector<string> params = getParams(op);
- vector<string> args = getArgs(op);
-
- _out << sp << nl << "public " << retS << " " << opName << spar << params << epar;
- _out << sb;
- _out << nl;
- if(ret)
- {
- _out << "return ";
- }
- _out << opName << spar << args << "null" << "false" << epar << ';';
- _out << eb;
-
- _out << sp << nl << "public " << retS << " " << opName << spar << params
- << "_System.Collections.Generic.Dictionary<string, string> context__" << epar;
- _out << sb;
- _out << nl;
- if(ret)
- {
- _out << "return ";
- }
- _out << opName << spar << args << "context__" << "true" << epar << ';';
- _out << eb;
-
- _out << sp << nl << "private " << retS << " " << opName << spar << params
- << "_System.Collections.Generic.Dictionary<string, string> context__"
- << "bool explicitContext__" << epar;
- _out << sb;
-
- _out << nl << "if(explicitContext__ && context__ == null)";
- _out << sb;
- _out << nl << "context__ = emptyContext_;";
- _out << eb;
- _out << nl << "int cnt__ = 0;";
- _out << nl << "while(true)";
- _out << sb;
- //XXX:
- _out << nl << "try";
- _out << sb;
- _out << nl << "IceInternal.Outgoing og__ = getOutgoing(\"" << op->name() << "\", "
- << sliceModeToIceMode(op->sendMode())
- << ", context__);";
- if(!inParams.empty())
- {
- _out << nl << "IceInternal.BasicStream os__ = og__.ostr();";
- for(q = inParams.begin(); q != inParams.end(); ++q)
- {
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), true, false, false);
- }
- if(op->sendsClasses())
- {
- _out << nl << "os__.writePendingObjects();";
- }
- }
- _out << nl << "bool ok__ = og__.invoke();";
- _out << nl << "try";
- _out << sb;
- _out << nl << "IceInternal.BasicStream is__ = og__.istr();";
- _out << nl << "if(!ok__)";
- _out << sb;
- //
- // The try/catch block is necessary because throwException()
- // can raise UserException.
- //
- _out << nl << "try";
- _out << sb;
- _out << nl << "is__.throwException();";
- _out << eb;
- for(ExceptionList::const_iterator t = throws.begin(); t != throws.end(); ++t)
- {
- _out << nl << "catch(" << fixId((*t)->scoped()) << ')';
- _out << sb;
- _out << nl << "throw;";
- _out << eb;
- }
- _out << nl << "catch(Ice.UserException ex)";
- _out << sb;
- _out << nl << "throw new Ice.UnknownUserException(ex);";
- _out << eb;
- _out << eb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
- string param = fixId(q->second);
- StructPtr st = StructPtr::dynamicCast(q->first);
- if(st)
- {
- if(isValueType(q->first))
- {
- _out << nl << param << " = new " << typeToString(q->first) << "();";
- }
- else
- {
- _out << nl << param << " = null;";
- }
- }
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true, "");
- }
- if(ret)
- {
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret))
- {
- _out << nl << retS << " ret__;";
- ContainedPtr contained = ContainedPtr::dynamicCast(ret);
- string sliceId = contained ? contained->scoped() : string("::Ice::Object");
- _out << nl << "IceInternal.ParamPatcher<" << retS << "> ret___PP = new IceInternal.ParamPatcher<"
- << retS << ">(\"" << sliceId << "\");";
- _out << nl << "is__.readObject(ret___PP);";
- }
- else
- {
- _out << nl << retS << " ret__;";
- StructPtr st = StructPtr::dynamicCast(ret);
- if(st)
- {
- if(isValueType(st))
- {
- _out << nl << "ret__ = new " << retS << "();";
- }
- else
- {
- _out << nl << "ret__ = null;";
- }
- }
- writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true, "");
- }
- }
- if(op->returnsClasses())
- {
- _out << nl << "is__.readPendingObjects();";
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
- string param = fixId(q->second);
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(q->first))
- {
- string type = typeToString(q->first);
- _out << nl << "try";
- _out << sb;
- _out << nl << param << " = (" << type << ")" << param << "_PP.value;";
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << param << " = null;";
- _out << nl << "IceInternal.Ex.throwUOE(" << param << "_PP.type(), "
- << param << "_PP.value.ice_id());";
- _out << eb;
- }
- }
- }
- if(ret)
- {
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret))
- {
- _out << nl << "try";
- _out << sb;
- _out << nl << "ret__ = (" << retS << ")ret___PP.value;";
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "ret__ = null;";
- _out << nl << "IceInternal.Ex.throwUOE(ret___PP.type(), ret___PP.value.ice_id());";
- _out << eb;
- }
- _out << nl << "return ret__;";
- }
- _out << eb;
- _out << nl << "catch(Ice.LocalException ex__)";
- _out << sb;
- _out << nl << "throw new IceInternal.LocalExceptionWrapper(ex__, false);";
- _out << eb;
-
- if(!ret)
- {
- _out << nl << "return;";
- }
-
- // XXX: Generated code for marshaling, etc.
- _out << eb;
- _out << nl << "catch(IceInternal.LocalExceptionWrapper ex__)";
- _out << sb;
- if(op->mode() == Operation::Idempotent || op->mode() == Operation::Nonmutating)
- {
- _out << nl << "cnt__ = handleExceptionWrapperRelaxed__(ex__, cnt__);";
- }
- else
- {
- _out << nl << "handleExceptionWrapper__(ex__);";
- }
- _out << eb;
- _out << nl << "catch(Ice.LocalException ex__)";
- _out << sb;
- _out << nl << "cnt__ = handleException__(ex__, cnt__);";
- _out << eb;
- _out << eb;
-
- _out << eb;
- }
-
- if(!ops.empty())
- {
- _out << sp << nl << "#endregion"; // Synchronous operations
- }
-
- bool hasAsyncOps = false;
-
- for(r = ops.begin(); r != ops.end(); ++r)
- {
- OperationPtr op = *r;
-
- ClassDefPtr containingClass = ClassDefPtr::dynamicCast(op->container());
- if(containingClass->hasMetaData("ami") || op->hasMetaData("ami"))
- {
- if(!hasAsyncOps)
- {
- _out << sp << nl << "#region Asynchronous operations";
- hasAsyncOps = true;
- }
- vector<string> paramsAMI = getParamsAsync(op, AMI);
- vector<string> paramsAMIDel = getParamsAsync(op, AMIDelegate);
- vector<string> argsAMI = getArgsAsync(op);
-
- string opName = op->name();
-
- //
- // Write two versions of the operation - with and without a
- // context parameter
- //
-
- string callbackName = fixId(p->scope()) + "AMI_" + containingClass->name() + "_" + opName;
-
- _out << sp;
- _out << nl << "public void " << opName << "_async" << spar << paramsAMIDel << epar;
- _out << sb;
- _out << nl << callbackName << " cb__ = new " << callbackName << "(resp__, ex__);";
- _out << nl << opName << "_async" << spar << argsAMI << "null" << "false" << epar << ';';
- _out << eb;
-
- _out << sp;
- _out << nl << "public void " << opName << "_async" << spar << paramsAMIDel
- << "_System.Collections.Generic.Dictionary<string, string> ctx__" << epar;
- _out << sb;
- _out << nl << callbackName << " cb__ = new " << callbackName << "(resp__, ex__);";
- _out << nl << opName << "_async" << spar << argsAMI << "ctx__" << "true" << epar << ';';
- _out << eb;
-
- _out << sp;
- _out << nl << "public void " << opName << "_async" << spar << paramsAMI
- << "_System.Collections.Generic.Dictionary<string, string> ctx__"
- << "bool explicitContext__" << epar;
- _out << sb;
- _out << nl << "if(explicitContext__ && ctx__ == null)";
- _out << sb;
- _out << nl << "ctx__ = emptyContext_;";
- _out << eb;
- _out << nl << "cb__.invoke__" << spar << "this" << argsAMI << "ctx__" << epar << ';';
- _out << eb;
- }
- }
-
- if(hasAsyncOps)
- {
- _out << sp << nl << "#endregion"; // Asynchronous operations
- }
-
- _out << sp << nl << "#region Checked and unchecked cast operations";
-
- _out << sp << nl << "public static " << name << "Prx checkedCast(Ice.ObjectPrx b)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << "if(b is " << name << "Prx)";
- _out << sb;
- _out << nl << "return (" << name << "Prx)b;";
- _out << eb;
- _out << nl << "if(b.ice_isA(\"" << p->scoped() << "\"))";
- _out << sb;
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(b);";
- _out << nl << "return h;";
- _out << eb;
- _out << nl << "return null;";
- _out << eb;
-
- _out << sp << nl << "public static " << name
- << "Prx checkedCast(Ice.ObjectPrx b, _System.Collections.Generic.Dictionary<string, string> ctx)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << "if(b is " << name << "Prx)";
- _out << sb;
- _out << nl << "return (" << name << "Prx)b;";
- _out << eb;
- _out << nl << "if(b.ice_isA(\"" << p->scoped() << "\", ctx))";
- _out << sb;
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(b);";
- _out << nl << "return h;";
- _out << eb;
- _out << nl << "return null;";
- _out << eb;
-
- _out << sp << nl << "public static " << name << "Prx checkedCast(Ice.ObjectPrx b, string f)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << "Ice.ObjectPrx bb = b.ice_facet(f);";
- _out << nl << "try";
- _out << sb;
- _out << nl << "if(bb.ice_isA(\"" << p->scoped() << "\"))";
- _out << sb;
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(bb);";
- _out << nl << "return h;";
- _out << eb;
- _out << eb;
- _out << nl << "catch(Ice.FacetNotExistException)";
- _out << sb;
- _out << eb;
- _out << nl << "return null;";
- _out << eb;
-
- _out << sp << nl << "public static " << name
- << "Prx checkedCast(Ice.ObjectPrx b, string f, "
- << "_System.Collections.Generic.Dictionary<string, string> ctx)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << "Ice.ObjectPrx bb = b.ice_facet(f);";
- _out << nl << "try";
- _out << sb;
- _out << nl << "if(bb.ice_isA(\"" << p->scoped() << "\", ctx))";
- _out << sb;
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(bb);";
- _out << nl << "return h;";
- _out << eb;
- _out << eb;
- _out << nl << "catch(Ice.FacetNotExistException)";
- _out << sb;
- _out << eb;
- _out << nl << "return null;";
- _out << eb;
-
- _out << sp << nl << "public static " << name << "Prx uncheckedCast(Ice.ObjectPrx b)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(b);";
- _out << nl << "return h;";
- _out << eb;
-
- _out << sp << nl << "public static " << name << "Prx uncheckedCast(Ice.ObjectPrx b, string f)";
- _out << sb;
- _out << nl << "if(b == null)";
- _out << sb;
- _out << nl << "return null;";
- _out << eb;
- _out << nl << "Ice.ObjectPrx bb = b.ice_facet(f);";
- _out << nl << name << "PrxHelper h = new " << name << "PrxHelper();";
- _out << nl << "h.copyFrom__(bb);";
- _out << nl << "return h;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Checked and unchecked cast operations
-
- _out << sp << nl << "#region Marshaling support";
-
- _out << sp << nl << "public static void write__(IceInternal.BasicStream os__, " << name << "Prx v__)";
- _out << sb;
- _out << nl << "os__.writeProxy(v__);";
- _out << eb;
-
- _out << sp << nl << "public static " << name << "Prx read__(IceInternal.BasicStream is__)";
- _out << sb;
- _out << nl << "Ice.ObjectPrx proxy = is__.readProxy();";
- _out << nl << "if(proxy != null)";
- _out << sb;
- _out << nl << name << "PrxHelper result = new " << name << "PrxHelper();";
- _out << nl << "result.copyFrom__(proxy);";
- _out << nl << "return result;";
- _out << eb;
- _out << nl << "return null;";
- _out << eb;
-
- _out << sp << nl << "#endregion"; // Marshaling support
-
- return true;
-}
-
-void
-Slice::Gen::HelperVisitor::visitClassDefEnd(const ClassDefPtr&)
-{
- _out << eb;
-}
-
-void
-Slice::Gen::HelperVisitor::visitSequence(const SequencePtr& p)
-{
- //
- // Don't generate helper for sequence of a local type.
- //
- if(p->isLocal())
- {
- return;
- }
-
- string typeS = typeToString(p);
-
- _out << sp << nl << "public sealed class " << p->name() << "Helper";
- _out << sb;
-
- _out << sp << nl << "public static void write(IceInternal.BasicStream os__, " << typeS << " v__)";
- _out << sb;
- writeSequenceMarshalUnmarshalCode(_out, p, "v__", true, false);
- _out << eb;
-
- _out << sp << nl << "public static " << typeS << " read(IceInternal.BasicStream is__)";
- _out << sb;
- _out << nl << typeS << " v__;";
- writeSequenceMarshalUnmarshalCode(_out, p, "v__", false, false);
- _out << nl << "return v__;";
- _out << eb;
-
- _out << eb;
-
- string prefix = "clr:generic:";
- string meta;
- if(p->findMetaData(prefix, meta))
- {
- string type = meta.substr(prefix.size());
- if(type == "List" || type == "LinkedList" || type == "Queue" || type == "Stack")
- {
- return;
- }
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type());
- bool isClass = (builtin && builtin->kind() == Builtin::KindObject)
- || ClassDeclPtr::dynamicCast(p->type());
-
- if(!isClass)
- {
- return;
- }
-
- //
- // The sequence is a custom sequence with elements of class type.
- // Emit a dummy class that causes a compile-time error if the
- // custom sequence type does not implement an indexer.
- //
- _out << sp << nl << "public class " << p->name() << "_Tester";
- _out << sb;
- _out << nl << p->name() << "_Tester()";
- _out << sb;
- _out << nl << typeS << " test = new " << typeS << "();";
- _out << nl << "test[0] = null;";
- _out << eb;
- _out << eb;
- }
-}
-
-void
-Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p)
-{
- //
- // Don't generate helper for a dictionary containing a local type
- //
- if(p->isLocal())
- {
- return;
- }
-
- TypePtr key = p->keyType();
- TypePtr value = p->valueType();
-
- string meta;
- bool isNewMapping = !p->hasMetaData("clr:collection");
-
- string prefix = "clr:generic:";
- string genericType;
- if(!p->findMetaData(prefix, meta))
- {
- genericType = "Dictionary";
- }
- else
- {
- genericType = meta.substr(prefix.size());
- }
-
- string keyS = typeToString(key);
- string valueS = typeToString(value);
- string name = isNewMapping
- ? "_System.Collections.Generic." + genericType + "<" + keyS + ", " + valueS + ">"
- : fixId(p->name());
-
- _out << sp << nl << "public sealed class " << p->name() << "Helper";
- _out << sb;
-
- _out << sp << nl << "public static void write(";
- _out.useCurrentPosAsIndent();
- _out << "IceInternal.BasicStream os__,";
- _out << nl << name << " v__)";
- _out.restoreIndent();
- _out << sb;
- _out << nl << "if(v__ == null)";
- _out << sb;
- _out << nl << "os__.writeSize(0);";
- _out << eb;
- _out << nl << "else";
- _out << sb;
- _out << nl << "os__.writeSize(v__.Count);";
- _out << nl << "foreach(_System.Collections.";
- if(isNewMapping)
- {
- _out << "Generic.KeyValuePair<" << keyS << ", " << valueS << ">";
- }
- else
- {
- _out << "DictionaryEntry";
- }
- _out << " e__ in v__)";
- _out << sb;
- string keyArg = isNewMapping ? string("e__.Key") : "((" + keyS + ")e__.Key)";
- writeMarshalUnmarshalCode(_out, key, keyArg, true, false, false);
- string valueArg = isNewMapping ? string("e__.Value") : "((" + valueS + ")e__.Value)";
- writeMarshalUnmarshalCode(_out, value, valueArg, true, false, false);
- _out << eb;
- _out << eb;
- _out << eb;
-
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(value);
- bool hasClassValue = (builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(value);
- if(hasClassValue)
- {
- string expectedType = ContainedPtr::dynamicCast(value)->scoped();
- _out << sp << nl << "public sealed class Patcher__ : IceInternal.Patcher<" << valueS << ">";
- _out << sb;
- _out << sp << nl << "internal Patcher__(string type, " << name << " m, " << keyS << " key) : base(type)";
- _out << sb;
- _out << nl << "_m = m;";
- _out << nl << "_key = key;";
- _out << eb;
-
- _out << sp << nl << "public override void" << nl << "patch(Ice.Object v)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- _out << nl << "_m[_key] = (" << valueS << ")v;";
- _out << eb;
- _out << nl << "catch(System.InvalidCastException)";
- _out << sb;
- _out << nl << "IceInternal.Ex.throwUOE(type(), v.ice_id());";
- _out << eb;
- _out << eb;
-
- _out << sp << nl << "private " << name << " _m;";
- _out << nl << "private " << keyS << " _key;";
- _out << eb;
- }
-
- _out << sp << nl << "public static " << name << " read(IceInternal.BasicStream is__)";
- _out << sb;
- _out << nl << "int sz__ = is__.readSize();";
- _out << nl << name << " r__ = new " << name << "();";
- _out << nl << "for(int i__ = 0; i__ < sz__; ++i__)";
- _out << sb;
- _out << nl << keyS << " k__;";
- StructPtr st = StructPtr::dynamicCast(key);
- if(st)
- {
- if(isValueType(key))
- {
- _out << nl << "v__ = new " << typeToString(key) << "();";
- }
- else
- {
- _out << nl << "k__ = null;";
- }
- }
- writeMarshalUnmarshalCode(_out, key, "k__", false, false, false);
- if(!hasClassValue)
- {
- _out << nl << valueS << " v__;";
-
- StructPtr st = StructPtr::dynamicCast(value);
- if(st)
- {
- if(isValueType(value))
- {
- _out << nl << "v__ = new " << typeToString(value) << "();";
- }
- else
- {
- _out << nl << "v__ = null;";
- }
- }
- }
- writeMarshalUnmarshalCode(_out, value, "v__", false, false, false, "r__, k__");
- if(!hasClassValue)
- {
- _out << nl << "r__[k__] = v__;";
- }
- _out << eb;
- _out << nl << "return r__;";
- _out << eb;
-
- _out << eb;
-}
-
-Slice::Gen::DispatcherVisitor::DispatcherVisitor(::IceUtilInternal::Output &out) :
- CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::DispatcherVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!p->hasNonLocalClassDecls())
- {
- return false;
- }
-
- _out << sp << nl << "namespace " << fixId(p->name());
- _out << sb;
- return true;
-}
-
-void
-Slice::Gen::DispatcherVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
- if(p->isLocal() || !p->isInterface())
- {
- return false;
- }
-
- string name = p->name();
-
- _out << sp << nl << "public abstract class " << name << "Disp_ : Ice.ObjectImpl, " << fixId(name);
- _out << sb;
-
- OperationList ops = p->operations();
- if(!ops.empty())
- {
- _out << sp << nl << "#region Slice operations";
- for(OperationList::const_iterator op = ops.begin(); op != ops.end(); ++op)
- {
- string opname = (*op)->name();
- vector<string> params = getParams(*op);
- vector<string> args = getArgs(*op);
- TypePtr ret = (*op)->returnType();
-
- opname = fixId(opname, DotNet::ICloneable, true);
-
- _out << sp << nl << "public abstract " << typeToString(ret) << " "
- << opname << spar << params << epar << ';';
- }
- _out << sp << nl << "#endregion"; // Slice operations
- }
-
- writeInheritedOperations(p);
-
- writeDispatchAndMarshalling(p);
-
- _out << eb;
-
- return true;
-}
-
-Slice::Gen::AsyncVisitor::AsyncVisitor(::IceUtilInternal::Output &out)
- : CsVisitor(out)
-{
-}
-
-bool
-Slice::Gen::AsyncVisitor::visitModuleStart(const ModulePtr& p)
-{
- if(!p->hasAsyncOps())
- {
- return false;
- }
-
- _out << sp << nl << "namespace " << fixId(p->name());
- _out << sb;
- return true;
-}
-
-void
-Slice::Gen::AsyncVisitor::visitModuleEnd(const ModulePtr&)
-{
- _out << eb;
-}
-
-bool
-Slice::Gen::AsyncVisitor::visitClassDefStart(const ClassDefPtr& p)
-{
- return true;
-}
-
-void
-Slice::Gen::AsyncVisitor::visitClassDefEnd(const ClassDefPtr&)
-{
-}
-
-void
-Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
-{
- ContainerPtr container = p->container();
- ClassDefPtr cl = ClassDefPtr::dynamicCast(container);
-
- if(cl->isLocal())
- {
- return;
- }
-
- string name = p->name();
-
- if(cl->hasMetaData("ami") || p->hasMetaData("ami"))
- {
-
- TypePtr ret = p->returnType();
- string retS = typeToString(ret);
-
- TypeStringList inParams;
- TypeStringList outParams;
- ParamDeclList paramList = p->parameters();
- for(ParamDeclList::const_iterator pli = paramList.begin(); pli != paramList.end(); ++pli)
- {
- if((*pli)->isOutParam())
- {
- outParams.push_back(make_pair((*pli)->type(), (*pli)->name()));
- }
- else
- {
- inParams.push_back(make_pair((*pli)->type(), (*pli)->name()));
- }
- }
-
- ExceptionList throws = p->throws();
- throws.sort();
- throws.unique();
-
- //
- // Arrange exceptions into most-derived to least-derived order. If we don't
- // do this, a base exception handler can appear before a derived exception
- // handler, causing compiler warnings and resulting in the base exception
- // being marshaled instead of the derived exception.
- //
-#if defined(__SUNPRO_CC)
- throws.sort(Slice::derivedToBaseCompare);
-#else
- throws.sort(Slice::DerivedToBaseCompare());
-#endif
-
- TypeStringList::const_iterator q;
-
- vector<string> params = getParamsAsyncCB(p);
- vector<string> args = getArgsAsyncCB(p);
-
- vector<string> paramsInvoke = getParamsAsync(p, AMI);
-
- _out << nl << "public delegate void AMI_" << cl->name() << "_" << name << "_response" << spar << params
- << epar << ";";
- _out << nl << "public delegate void AMI_" << cl->name() << "_" << name << "_exception(Ice.Exception ex);";
-
- _out << sp << nl << "public sealed class AMI_" << cl->name() << '_'
- << name << " : IceInternal.OutgoingAsync";
- _out << sb;
- _out << sp;
-
- _out << nl << "public AMI_" << cl->name() << "_" << name << "(AMI_" << cl->name() << "_" << name
- << "_response response, AMI_" << cl->name() << "_" << name << "_exception exception)";
- _out << sb;
- _out << nl << "response_ = response;";
- _out << nl << "exception_ = exception;";
- _out << nl;
- _out << nl << "System.Diagnostics.Debug.Assert(response_ != null);";
- _out << nl << "System.Diagnostics.Debug.Assert(exception_ != null);";
- _out << eb;
-
- _out << sp << nl << "public void invoke__" << spar << "Ice.ObjectPrx prx__"
- << paramsInvoke << "_System.Collections.Generic.Dictionary<string, string> ctx__" << epar;
- _out << sb;
- _out << nl << "try";
- _out << sb;
- _out << nl << "prepare__(prx__, \"" << name << "\", " << sliceModeToIceMode(p->sendMode())
- << ", ctx__);";
- for(q = inParams.begin(); q != inParams.end(); ++q)
- {
- string typeS = typeToString(q->first);
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), true, false, false);
- }
- if(p->sendsClasses())
- {
- _out << nl << "os__.writePendingObjects();";
- }
- _out << nl << "os__.endWriteEncaps();";
- _out << eb;
- _out << nl << "catch(Ice.LocalException ex__)";
- _out << sb;
- _out << nl << "finished__(ex__);";
- _out << nl << "return;";
- _out << eb;
- _out << nl << "send__();";
- _out << eb;
-
- _out << sp << nl << "protected override void response__(bool ok__)";
- _out << sb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
- string param = fixId(q->second);
- string typeS = typeToString(q->first);
- _out << nl << typeS << ' ' << param << ';';
- }
- if(ret)
- {
- _out << nl << retS << " ret__;";
- }
- _out << nl << "try";
- _out << sb;
- _out << nl << "if(!ok__)";
- _out << sb;
- _out << nl << "try";
- _out << sb;
- _out << nl << "is__.throwException();";
- _out << eb;
- for(ExceptionList::const_iterator r = throws.begin(); r != throws.end(); ++r)
- {
- _out << nl << "catch(" << fixId((*r)->scoped()) << ')';
- _out << sb;
- _out << nl << "throw;";
- _out << eb;
- }
- _out << nl << "catch(Ice.UserException ex)";
- _out << sb;
- _out << nl << "throw new Ice.UnknownUserException(ex);";
- _out << eb;
- _out << eb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
- string param = fixId(q->second);
- StructPtr st = StructPtr::dynamicCast(q->first);
- if(st)
- {
- if(isValueType(st))
- {
- _out << nl << param << " = new " << typeToString(q->first) << "();";
- }
- else
- {
- _out << nl << param << " = null;";
- }
- }
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true);
- }
- if(ret)
- {
- StructPtr st = StructPtr::dynamicCast(ret);
- if(st)
- {
- if(isValueType(ret))
- {
- _out << nl << "ret__ = new " << retS << "();";
- }
- else
- {
- _out << nl << "ret__ = null;";
- }
- }
- writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true);
- }
- if(p->returnsClasses())
- {
- _out << nl << "is__.readPendingObjects();";
- }
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
- string param = fixId(q->second);
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(q->first))
- {
- string type = typeToString(q->first);
- _out << nl << param << " = (" << type << ")" << param << "_PP.value;";
- }
- }
- if(ret)
- {
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(ret);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(ret))
- {
- string type = typeToString(ret);
- _out << nl << "ret__ = (" << retS << ")ret___PP.value;";
- }
- }
- _out << eb;
- _out << nl << "catch(Ice.LocalException ex__)";
- _out << sb;
- _out << nl << "finished__(ex__);";
- _out << nl << "return;";
- _out << eb;
- if(!throws.empty())
- {
- _out << nl << "catch(Ice.UserException ex__)";
- _out << sb;
- _out << nl << "exception_(ex__);";
- _out << nl << "return;";
- _out << eb;
- }
- _out << nl << "response_" << spar << args << epar << ';';
- _out << eb;
-
- _out << sp << nl << "protected override void exception__(Ice.Exception ex)";
- _out << sb;
- _out << nl << "exception_(ex);";
- _out << eb;
-
- _out << nl;
- _out << nl << "private AMI_" << cl->name() << "_" << name << "_response response_ = null;";
- _out << nl << "private AMI_" << cl->name() << "_" << name << "_exception exception_ = null;";
- _out << eb;
- }
-}
diff --git a/cpp/src/slice2sl/Gen.h b/cpp/src/slice2sl/Gen.h
deleted file mode 100644
index c4d3292d072..00000000000
--- a/cpp/src/slice2sl/Gen.h
+++ /dev/null
@@ -1,268 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef GEN_H
-#define GEN_H
-
-#include <Slice/CsUtil.h>
-
-namespace Slice
-{
-
-
-class CsVisitor : public CsGenerator, public ParserVisitor
-{
-public:
-
- CsVisitor(::IceUtilInternal::Output&);
- virtual ~CsVisitor();
-
-protected:
-
- enum AsyncType { AMD, AMI, AMIDelegate };
-
- virtual void writeInheritedOperations(const ClassDefPtr&);
- virtual void writeDispatchAndMarshalling(const ClassDefPtr&);
- virtual std::vector<std::string> getParams(const OperationPtr&);
- virtual std::vector<std::string> getParamsAsync(const OperationPtr&, AsyncType);
- virtual std::vector<std::string> getParamsAsyncCB(const OperationPtr&);
- virtual std::vector<std::string> getArgs(const OperationPtr&);
- virtual std::vector<std::string> getArgsAsync(const OperationPtr&);
- virtual std::vector<std::string> getArgsAsyncCB(const OperationPtr&);
-
- void emitAttributes(const ContainedPtr&);
- ::std::string getParamAttributes(const ParamDeclPtr&);
-
- ::IceUtilInternal::Output& _out;
-};
-
-class Gen : private ::IceUtil::noncopyable
-{
-public:
-
- Gen(const std::string&, const std::string&, const std::vector<std::string>&, const std::string&);
- ~Gen();
-
- bool operator!() const; // Returns true if there was a constructor error
-
- void generate(const UnitPtr&);
- void generateTie(const UnitPtr&);
- void generateImpl(const UnitPtr&);
- void generateImplTie(const UnitPtr&);
- void closeOutput();
-
-private:
-
- IceUtilInternal::Output _out;
- IceUtilInternal::Output _impl;
-
- std::vector<std::string> _includePaths;
-
- void printHeader();
-
- class UnitVisitor : public CsVisitor
- {
- public:
-
- UnitVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
-
- private:
-
- bool _globalMetaDataDone;
- };
-
- class TypesVisitor : public CsVisitor
- {
- public:
-
- TypesVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitOperation(const OperationPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- virtual bool visitExceptionStart(const ExceptionPtr&);
- virtual void visitExceptionEnd(const ExceptionPtr&);
- virtual bool visitStructStart(const StructPtr&);
- virtual void visitStructEnd(const StructPtr&);
- virtual void visitSequence(const SequencePtr&);
- virtual void visitDictionary(const DictionaryPtr&);
- virtual void visitEnum(const EnumPtr&);
- virtual void visitConst(const ConstPtr&);
- virtual void visitDataMember(const DataMemberPtr&);
-
- private:
-
- void writeMemberHashCode(const DataMemberList&, int);
- void writeMemberEquals(const DataMemberList&, int);
- };
-
- class ProxyVisitor : public CsVisitor
- {
- public:
-
- ProxyVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- virtual void visitOperation(const OperationPtr&);
- };
-
- class OpsVisitor : public CsVisitor
- {
- public:
-
- OpsVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
-
- private:
- void writeOperations(const ClassDefPtr&, bool);
- };
-
- class HelperVisitor : public CsVisitor
- {
- public:
-
- HelperVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- virtual void visitSequence(const SequencePtr&);
- virtual void visitDictionary(const DictionaryPtr&);
- };
-
- class DelegateVisitor : public CsVisitor
- {
- public:
-
- DelegateVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- };
-
- class DelegateMVisitor : public CsVisitor
- {
- public:
-
- DelegateMVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- };
-
- class DelegateDVisitor : public CsVisitor
- {
- public:
-
- DelegateDVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- };
-
- class DispatcherVisitor : public CsVisitor
- {
- public:
-
- DispatcherVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- };
-
- class AsyncVisitor : public CsVisitor
- {
- public:
-
- AsyncVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- virtual void visitOperation(const OperationPtr&);
- };
-
- class TieVisitor : public CsVisitor
- {
- public:
-
- TieVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
-
- private:
-
- typedef ::std::set< ::std::string> NameSet;
- void writeInheritedOperationsWithOpNames(const ClassDefPtr&, NameSet&);
- };
-
- class BaseImplVisitor : public CsVisitor
- {
- public:
-
- BaseImplVisitor(::IceUtilInternal::Output&);
-
- protected:
-
- void writeOperation(const OperationPtr&, bool, bool);
-
- private:
-
- ::std::string writeValue(const TypePtr&);
- };
-
- class ImplVisitor : public BaseImplVisitor
- {
- public:
-
- ImplVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- virtual void visitClassDefEnd(const ClassDefPtr&);
- };
-
- class ImplTieVisitor : public BaseImplVisitor
- {
- public:
-
- ImplTieVisitor(::IceUtilInternal::Output&);
-
- virtual bool visitModuleStart(const ModulePtr&);
- virtual void visitModuleEnd(const ModulePtr&);
- virtual bool visitClassDefStart(const ClassDefPtr&);
- };
-};
-
-}
-
-#endif
diff --git a/cpp/src/slice2sl/Main.cpp b/cpp/src/slice2sl/Main.cpp
deleted file mode 100644
index b626410cf9e..00000000000
--- a/cpp/src/slice2sl/Main.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <IceUtil/Options.h>
-#include <Slice/Preprocessor.h>
-#include <Slice/SignalHandler.h>
-#include <Gen.h>
-
-using namespace std;
-using namespace Slice;
-
-void
-usage(const char* n)
-{
- cerr << "Usage: " << n << " [options] slice-files...\n";
- cerr <<
- "Options:\n"
- "-h, --help Show this message.\n"
- "-v, --version Display the Ice version.\n"
- "-DNAME Define NAME as 1.\n"
- "-DNAME=DEF Define NAME as DEF.\n"
- "-UNAME Remove any definition for NAME.\n"
- "-IDIR Put DIR in the include file search path.\n"
- "-E Print preprocessor output on stdout.\n"
- "--output-dir DIR Create files in the directory DIR.\n"
- "--depend Generate Makefile dependencies.\n"
- "-d, --debug Print debug messages.\n"
- "--ice Permit `Ice' prefix (for building Ice source code only)\n"
- ;
- // Note: --case-sensitive is intentionally not shown here!
-}
-
-int
-main(int argc, char* argv[])
-{
- IceUtilInternal::Options opts;
- opts.addOpt("h", "help");
- opts.addOpt("v", "version");
- opts.addOpt("D", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
- opts.addOpt("U", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
- opts.addOpt("I", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
- opts.addOpt("E");
- opts.addOpt("", "output-dir", IceUtilInternal::Options::NeedArg);
- opts.addOpt("", "depend");
- opts.addOpt("d", "debug");
- opts.addOpt("", "ice");
- opts.addOpt("", "case-sensitive");
-
- vector<string> args;
- try
- {
- args = opts.parse(argc, (const char**)argv);
- }
- catch(const IceUtilInternal::BadOptException& e)
- {
- cerr << argv[0] << ": " << e.reason << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
- if(opts.isSet("help"))
- {
- usage(argv[0]);
- return EXIT_SUCCESS;
- }
-
- if(opts.isSet("version"))
- {
- cout << ICE_STRING_VERSION << endl;
- return EXIT_SUCCESS;
- }
-
- vector<string> cppArgs;
- vector<string> optargs = opts.argVec("D");
- vector<string>::const_iterator i;
- for(i = optargs.begin(); i != optargs.end(); ++i)
- {
- cppArgs.push_back("-D" + *i);
- }
-
- optargs = opts.argVec("U");
- for(i = optargs.begin(); i != optargs.end(); ++i)
- {
- cppArgs.push_back("-U" + *i);
- }
-
- vector<string> includePaths = opts.argVec("I");
- for(i = includePaths.begin(); i != includePaths.end(); ++i)
- {
- cppArgs.push_back("-I" + Preprocessor::normalizeIncludePath(*i));
- }
-
- bool preprocess = opts.isSet("E");
-
- string output = opts.optArg("output-dir");
-
- bool depend = opts.isSet("depend");
-
- bool debug = opts.isSet("debug");
-
- bool ice = opts.isSet("ice");
-
- bool caseSensitive = opts.isSet("case-sensitive");
-
- if(args.empty())
- {
- cerr << argv[0] << ": no input file" << endl;
- usage(argv[0]);
- return EXIT_FAILURE;
- }
-
- int status = EXIT_SUCCESS;
-
- for(i = args.begin(); i != args.end(); ++i)
- {
- SignalHandler sigHandler;
-
- if(depend)
- {
- Preprocessor icecpp(argv[0], *i, cppArgs);
- icecpp.printMakefileDependencies(Preprocessor::CSharp, includePaths);
- }
- else
- {
- Preprocessor icecpp(argv[0], *i, cppArgs);
- FILE* cppHandle = icecpp.preprocess(false);
-
- if(cppHandle == 0)
- {
- return EXIT_FAILURE;
- }
- if(preprocess)
- {
- char buf[4096];
- while(fgets(buf, static_cast<int>(sizeof(buf)), cppHandle) != NULL)
- {
- if(fputs(buf, stdout) == EOF)
- {
- return EXIT_FAILURE;
- }
- }
- if(!icecpp.close())
- {
- return EXIT_FAILURE;
- }
- }
- else
- {
- UnitPtr p = Unit::createUnit(false, false, ice, caseSensitive);
- int parseStatus = p->parse(*i, cppHandle, debug);
-
- if(!icecpp.close())
- {
- p->destroy();
- return EXIT_FAILURE;
- }
-
- if(parseStatus == EXIT_FAILURE)
- {
- status = EXIT_FAILURE;
- }
- else
- {
- Gen gen(argv[0], icecpp.getBaseName(), includePaths, output);
- if(!gen)
- {
- p->destroy();
- return EXIT_FAILURE;
- }
- gen.generate(p);
- }
-
- p->destroy();
- }
- }
- }
-
- return status;
-}
diff --git a/cpp/src/slice2sl/Makefile b/cpp/src/slice2sl/Makefile
deleted file mode 100644
index e63e077676b..00000000000
--- a/cpp/src/slice2sl/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-# **********************************************************************
-#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
-#
-# This copy of Ice is licensed to you under the terms described in the
-# ICE_LICENSE file included in this distribution.
-#
-# **********************************************************************
-
-top_srcdir = ../..
-
-NAME = $(top_srcdir)/bin/slice2sl
-
-TARGETS = $(NAME)
-
-OBJS = Gen.o \
- Main.o
-
-SRCS = $(OBJS:.o=.cpp)
-
-include $(top_srcdir)/config/Make.rules
-
-CPPFLAGS := -I. $(CPPFLAGS)
-
-$(NAME): $(OBJS)
- rm -f $@
- $(CXX) $(LDFLAGS) -o $@ $(OBJS) -lSlice $(BASELIBS) $(MCPP_RPATH_LINK)
-
-install:: all
- $(call installprogram,$(NAME),$(install_bindir))
-
-include .depend
diff --git a/cpp/src/slice2sl/Makefile.mak b/cpp/src/slice2sl/Makefile.mak
deleted file mode 100644
index c67d131a3a2..00000000000
--- a/cpp/src/slice2sl/Makefile.mak
+++ /dev/null
@@ -1,66 +0,0 @@
-# **********************************************************************
-#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
-#
-# This copy of Ice is licensed to you under the terms described in the
-# ICE_LICENSE file included in this distribution.
-#
-# **********************************************************************
-
-top_srcdir = ..\..
-
-NAME = $(top_srcdir)\bin\slice2sl.exe
-
-TARGETS = $(NAME)
-
-OBJS = Gen.obj \
- Main.obj
-
-SRCS = $(OBJS:.obj=.cpp)
-
-!include $(top_srcdir)/config/Make.rules.mak
-
-CPPFLAGS = -I. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
-
-!if "$(GENERATE_PDB)" == "yes"
-PDBFLAGS = /pdb:$(NAME:.exe=.pdb)
-!endif
-
-!if "$(CPP_COMPILER)" == "BCC2007"
-RES_FILE = ,, Slice2Sl.res
-!else
-RES_FILE = Slice2Sl.res
-!endif
-
-!if "$(STATICLIBS)" == "yes"
-BASELIBS = $(MCPP_LIBS) $(BASELIBS)
-!endif
-
-$(NAME): $(OBJS) Slice2Sl.res
- $(LINK) $(LD_EXEFLAGS) $(PDBFLAGS) $(OBJS) $(SETARGV) $(PREOUT)$@ $(PRELIBS)slice$(LIBSUFFIX).lib \
- $(BASELIBS) $(RES_FILE)
- @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
- $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
-
-clean::
- del /q $(NAME:.exe=.*)
- del /q Slice2Sl.res
-
-install:: all
- copy $(NAME) $(install_bindir)
-
-
-
-!if "$(CPP_COMPILER)" == "BCC2007" && "$(OPTIMIZE)" != "yes"
-
-install:: all
- copy $(NAME:.exe=.tds) $(install_bindir)
-
-!elseif "$(GENERATE_PDB)" == "yes"
-
-install:: all
- copy $(NAME:.exe=.pdb) $(install_bindir)
-
-!endif
-
-!include .depend
diff --git a/cpp/src/slice2sl/Slice2Sl.rc b/cpp/src/slice2sl/Slice2Sl.rc
deleted file mode 100644
index e6d12c0b997..00000000000
--- a/cpp/src/slice2sl/Slice2Sl.rc
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "winver.h"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
- FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE VFT_APP
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904e4"
- BEGIN
- VALUE "CompanyName", "ZeroC, Inc.\0"
- VALUE "FileDescription", "Slice To Silverlight Translator\0"
- VALUE "FileVersion", "3.3.0\0"
- VALUE "InternalName", "slice2sl\0"
- VALUE "LegalCopyright", "Copyright (c) 2003 - 2008 ZeroC, Inc. All rights reserved.\0"
- VALUE "OriginalFilename", "slice2sl.exe\0"
- VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- END
-END