void FreezeScript::AnalyzeInitVisitor::typeChange(const TypePtr& t, const string& scoped, const string& kind) { BuiltinPtr b = BuiltinPtr::dynamicCast(t); ContainedPtr c = ContainedPtr::dynamicCast(t); ProxyPtr p = ProxyPtr::dynamicCast(t); _out.newline(); _out.newline(); _out << "<!-- NOTICE: " << scoped << " has changed from "; if(b) { _out << b->kindAsString(); } else if(p) { _out << "proxy"; } else { assert(c); _out << c->kindOf(); } _out << " to " << kind << " -->"; }
string Slice::JsGenerator::typeToString(const TypePtr& type) { if(!type) { return "void"; } static const char* builtinTable[] = { "Number", // byte "Boolean", // bool "Number", // short "Number", // int "Number", // long "Number", // float "Number", // double "String", "Ice.Value", "Ice.ObjectPrx", "Object", "Ice.Value" }; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { return builtinTable[builtin->kind()]; } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { return fixId(proxy->_class()->scoped() + "Prx"); } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { return typeToString(seq->type()) + "[]"; } DictionaryPtr d = DictionaryPtr::dynamicCast(type); if(d) { const TypePtr keyType = d->keyType(); BuiltinPtr b = BuiltinPtr::dynamicCast(keyType); return ((b && b->kind() == Builtin::KindLong) || StructPtr::dynamicCast(keyType)) ? "Ice.HashMap" : "Map"; } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { return fixId(contained->scoped()); } return "???"; }
string Slice::ObjCGenerator::getParamName(const ContainedPtr& param, bool internal) { if(internal) { return "iceP_" + param->name(); } else { return fixId(param->name()); } }
string Slice::ObjCGenerator::getParamId(const ContainedPtr& param) { string n; if(ParamDeclPtr::dynamicCast(param) && param->findMetaData("objc:param:", n)) { return lookupParamIdKwd(n.substr(11)); } else { return lookupParamIdKwd(param->name()); } }
string Slice::Ruby::getAbsolute(const ContainedPtr& cont, IdentStyle style, const string& prefix) { string scope = fixIdent(cont->scope(), IdentToUpper); if(prefix.empty()) { return scope + fixIdent(cont->name(), style); } else { return scope + prefix + fixIdent(cont->name(), style); } }
ModulePtr Slice::ObjCGenerator::findModule(const ContainedPtr& cont, int baseTypes, bool mangleCasts) { ModulePtr m = ModulePtr::dynamicCast(cont); ContainerPtr container = cont->container(); while(container && !m) { ContainedPtr contained = ContainedPtr::dynamicCast(container); container = contained->container(); m = ModulePtr::dynamicCast(contained); } assert(m); return m; }
void Slice::ObjCGenerator::MetaDataVisitor::setMetaData(const ContainedPtr& cont, const StringList& metadata) { StringList localMetaData = cont->getMetaData(); for(StringList::const_iterator p = localMetaData.begin(); p != localMetaData.end();) { string s = *p++; if(s.find(_objcPrefix) == 0) { localMetaData.remove(s); } } localMetaData.insert(localMetaData.end(), metadata.begin(), metadata.end()); cont->setMetaData(localMetaData); }
string Slice::ObjCGenerator::getFactoryMethod(const ContainedPtr& p, bool deprecated) { ClassDefPtr def = ClassDefPtr::dynamicCast(p); if(def && def->declaration()->isLocal()) { deprecated = false; // Local classes don't have this issue since they were added after this fix. } // // If deprecated is true, we return uDPConnectionInfo for a class // named UDPConnectionInfo, return udpConnectionInfo otherwise. // string name = fixId(p->name()); if(name.empty()) { return name; } else if(deprecated || name.size() < 2 || !isupper(*(name.begin() + 1))) { *name.begin() = tolower(*name.begin()); } else { for(string::iterator p = name.begin(); p != name.end() && isalpha(*p); ++p) { if(p != name.end() - 1 && isalpha(*(p + 1)) && !isupper(*(p + 1))) { break; } *p = tolower(*p); } } return name; }
string Slice::JsGenerator::importPrefix(const ContainedPtr& contained, const ContainedPtr& toplevel, const vector<pair<string, string> >& imports) { string m1 = getModuleMetadata(contained); string m2 = getModuleMetadata(toplevel); string p; if(m1.empty()) { string p1 = contained->definitionContext()->filename(); string p2 = toplevel->definitionContext()->filename(); p = relativePath(p1, p2); string::size_type pos = p.rfind('.'); if (pos != string::npos) { p.erase(pos); } } else if(m1 == "ice" && m1 != m2) { return "iceNS0."; } else if(m1 != m2) { p = m1; } if(!p.empty()) { for(vector<pair<string, string> >::const_iterator i = imports.begin(); i != imports.end(); ++i) { if(i->first == p) { return i->second + "."; } } } return ""; }
string FreezeScript::typeToString(const TypePtr& type) { BuiltinPtr b = BuiltinPtr::dynamicCast(type); ContainedPtr c = ContainedPtr::dynamicCast(type); if(b) { return b->kindAsString(); } else if(c) { return c->scoped(); } else { ProxyPtr p = ProxyPtr::dynamicCast(type); assert(p); return p->_class()->scoped() + "*"; } }
void CodeVisitor::startNamespace(const ContainedPtr& cont) { if(_ns) { string scope = cont->scope(); scope = scope.substr(2); // Removing leading '::' scope = scope.substr(0, scope.length() - 2); // Removing trailing '::' _out << sp << nl << "namespace " << scopedToName(scope, true); _out << sb; } }
string CodeVisitor::getName(const ContainedPtr& p, const string& suffix) { if(_ns) { return fixIdent(p->name() + suffix); } else { return getAbsolute(p, false, "", suffix); } }
string Slice::JsGenerator::getModuleMetadata(const ContainedPtr& p) { // // Check if the file contains the python:pkgdir global metadata. // DefinitionContextPtr dc = p->definitionContext(); assert(dc); const string prefix = "js:module:"; const string value = dc->findMetaData(prefix); return value.empty() ? value : value.substr(prefix.size()); }
string Slice::ChecksumVisitor::typeToString(const TypePtr& type) { static const char* builtinTable[] = { "byte", "boolean", "short", "int", "long", "float", "double", "string", "Object", "Object*", "LocalObject" }; if (!type) { return "void"; } BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if (builtin) { return builtinTable[builtin->kind()]; } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if (proxy) { return proxy->_class()->scoped() + "*"; } ContainedPtr cont = ContainedPtr::dynamicCast(type); assert(cont); return cont->scoped(); }
StringList Slice::ObjCGenerator::MetaDataVisitor::getMetaData(const ContainedPtr& cont) { StringList localMetaData = cont->getMetaData(); for(StringList::const_iterator p = localMetaData.begin(); p != localMetaData.end();) { string s = *p++; if(s.find(_objcPrefix) != 0) { localMetaData.remove(s); } } return localMetaData; }
string Slice::JsGenerator::getStaticId(const TypePtr& type) { BuiltinPtr b = BuiltinPtr::dynamicCast(type); ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); assert((b && b->kind() == Builtin::KindObject) || cl); if(b) { return "Ice.ObjectImpl.ice_staticId()"; } else if(cl->isInterface()) { ContainedPtr cont = ContainedPtr::dynamicCast(cl->container()); assert(cont); return fixId(cont->scoped()) + "." + cl->name() + "Disp_.ice_staticId()"; } else { return fixId(cl->scoped()) + ".ice_staticId()"; } }
StringList Slice::ObjCGenerator::MetaDataVisitor::getMetaData(const ContainedPtr& cont) { StringList ret; StringList localMetaData = cont->getMetaData(); StringList::const_iterator p; for(p = localMetaData.begin(); p != localMetaData.end(); ++p) { if(p->find(_objcPrefix) != string::npos) { ret.push_back(*p); } } return ret; }
string Slice::JsGenerator::typeToString(const TypePtr& type, const ContainedPtr& toplevel, const std::vector<std::pair<std::string, std::string> >& imports, bool typeScript, bool definition, bool usealias) { string t = typeToString(type, toplevel, imports, typeScript, definition); if(usealias) { string m1 = getModuleMetadata(type); string m2 = getModuleMetadata(toplevel); if (!m1.empty() && m1 == m2) { // we are using the same module return t; } string p = importPrefix(type, toplevel, imports); // // When using an import prefix we don't need an alias, prefixes use iceNSXX that is reserved // name prefix // string::size_type i = t.find("."); if(p.empty() && i != string::npos) { const string scoped = fixId(toplevel->scoped()) + "."; if(scoped.find("." + t.substr(0, i + 1)) != string::npos) { replace(t.begin(), t.end(), '.', '_'); t = "iceA_" + t; } } } return t; }
void Slice::ObjCGenerator::writeMarshalUnmarshalCode(Output &out, const TypePtr& type, const string& param, bool marshal, bool autoreleased) const { string stream = marshal ? "os_" : "is_"; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { string name; if(builtin->kind() == Builtin::KindObject) { if(marshal) { out << nl << "[" << stream << " writeObject:" << param << "];"; } else { if(autoreleased) { out << nl << "[" << stream << " readObject:&" << param << "];"; } else { out << nl << "[" << stream << " newObject:&" << param << "];"; } } } else if(builtin->kind() == Builtin::KindObjectProxy) { if(marshal) { out << nl << "[" << stream << " writeProxy:" << param << "];"; } else { if(autoreleased) { out << nl << param << " = [" << stream << " readProxy:[ICEObjectPrx class]];"; } else { out << nl << param << " = [" << stream << " newProxy:[ICEObjectPrx class]];"; } } } else { if(marshal) { out << nl << "[" << stream << " write" << getBuiltinName(builtin) << ":" << param << "];"; } else { if(autoreleased || isValueType(builtin)) { out << nl << param << " = [" << stream << " read" << getBuiltinName(builtin) << "];"; } else { out << nl << param << " = [" << stream << " new" << getBuiltinName(builtin) << "];"; } } } return; } ProxyPtr prx = ProxyPtr::dynamicCast(type); if(prx) { if(marshal) { out << nl << "[" << stream << " writeProxy:(id<ICEObjectPrx>)" << param << "];"; } else { string name = moduleName(findModule(prx->_class())) + prx->_class()->name() + "Prx"; out << nl << param << " = (id<" << name << ">)[" << stream; if(autoreleased) { out << " readProxy:"; } else { out << " newProxy:"; } // // We use objc_getClass to get the proxy class instead of [name class]. This is to avoid // a warning if the proxy is forward declared. // if(prx->_class()->definition()) { out << "[" << name << " class]];"; } else { out << "objc_getClass(\"" << name << "\")];"; } } return; } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { if(marshal) { // Cast avoids warning for forward-declared classes. out << nl << "[" << stream << " writeObject:(ICEObject*)" << param << "];"; } else { if(autoreleased) { out << nl << "[" << stream << " " << "readObject:(ICEObject**)&" << param; } else { out << nl << "[" << stream << " " << "newObject:(ICEObject**)&" << param; } if(cl->isInterface()) { out << "];"; } else { string name = moduleName(findModule(cl)) + cl->name(); if(cl->definition()) { out << " expectedType:[" << name << " class]];"; } else { out << " expectedType:objc_getClass(\"" << name << "\")];"; } } } return; } EnumPtr en = EnumPtr::dynamicCast(type); if(en) { if(marshal) { out << nl << "[" << stream << " writeEnumerator:" << param << " min:" << en->minValue() << " max:" << en->maxValue() << "];"; } else { out << nl << param << " = " << "[" << stream << " readEnumerator:" << en->minValue() << " max:" << en->maxValue() << "];"; } return; } ContainedPtr c = ContainedPtr::dynamicCast(type); assert(c); string name = moduleName(findModule(c)) + c->name() + "Helper"; if(marshal) { out << nl << "[" + name << " write:" << param << " stream:" << stream << "];"; } else { if(StructPtr::dynamicCast(type)) { if(autoreleased) { out << nl << param << " = [" << name << " read:" << stream << " value:" << param << "];"; } else { out << nl << param << " = [" << name << " readRetained:" << stream << " value:" << param << "];"; } } else { if(autoreleased) { out << nl << param << " = [" << name << " read:" << stream << "];"; } else { out << nl << param << " = [" << name << " readRetained:" << stream << "];"; } } } }
string Slice::JsGenerator::typeToString(const TypePtr& type, const ContainedPtr& toplevel, const vector<pair<string, string> >& imports, bool typescript, bool definition) { if(!type) { return "void"; } bool local = false; if(toplevel) { if(ConstructedPtr::dynamicCast(toplevel)) { local = ConstructedPtr::dynamicCast(toplevel)->isLocal(); } else if(ClassDefPtr::dynamicCast(toplevel)) { local = ClassDefPtr::dynamicCast(toplevel)->isLocal(); } } static const char* typeScriptBuiltinTable[] = { "number", // byte "boolean", // bool "number", // short "number", // int "Ice.Long", // long "number", // float "number", // double "string", "Ice.Object", "Ice.ObjectPrx", "Object", "Ice.Value" }; static const char* javaScriptBuiltinTable[] = { "Number", // byte "Boolean", // bool "Number", // short "Number", // int "Ice.Long", // long "Number", // float "Number", // double "String", "Ice.Value", "Ice.ObjectPrx", "Object", "Ice.Value" }; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(typescript) { int kind = (!local && builtin->kind() == Builtin::KindObject) ? Builtin::KindValue : builtin->kind(); ostringstream os; if(getModuleMetadata(type) == "ice" && getModuleMetadata(toplevel) != "ice") { os << "iceNS0."; } os << getUnqualified(typeScriptBuiltinTable[kind], toplevel->scope(), "iceNS0."); return os.str(); } else { return javaScriptBuiltinTable[builtin->kind()]; } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { string prefix; ostringstream os; if(typescript) { if(cl->isInterface() && !local) { prefix = importPrefix("Ice.Value", toplevel); } else { prefix = importPrefix(ContainedPtr::dynamicCast(cl), toplevel, imports); } } os << prefix; if(!prefix.empty() && typescript) { if(cl->isInterface() && !local) { os << getUnqualified("Ice.Value", toplevel->scope(), prefix); } else { os << getUnqualified(fixId(cl->scoped()), toplevel->scope(), prefix); } } else { os << fixId(cl->scoped()); } return os.str(); } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { ostringstream os; ClassDefPtr def = proxy->_class()->definition(); if(!def->isInterface() && def->allOperations().empty()) { if(getModuleMetadata(toplevel) != "ice") { os << "iceNS0."; } os << getUnqualified(typeScriptBuiltinTable[Builtin::KindObjectProxy], toplevel->scope(), getModuleMetadata(toplevel)); } else { string prefix; if(typescript) { prefix = importPrefix(ContainedPtr::dynamicCast(def), toplevel, imports); os << prefix; } if(prefix.empty() && typescript) { os << getUnqualified(fixId(proxy->_class()->scoped() + "Prx"), toplevel->scope(), prefix); } else { os << fixId(proxy->_class()->scoped() + "Prx"); } } return os.str(); } if(!typescript || definition) { SequencePtr seq = SequencePtr::dynamicCast(type); if (seq) { BuiltinPtr b = BuiltinPtr::dynamicCast(seq->type()); if (b && b->kind() == Builtin::KindByte) { return "Uint8Array"; } else { return typeToString(seq->type(), toplevel, imports, typescript) + "[]"; } } DictionaryPtr d = DictionaryPtr::dynamicCast(type); if(d) { const TypePtr keyType = d->keyType(); BuiltinPtr builtin = BuiltinPtr::dynamicCast(keyType); ostringstream os; if ((builtin && builtin->kind() == Builtin::KindLong) || StructPtr::dynamicCast(keyType)) { const string prefix = importPrefix("Ice.HashMap", toplevel); os << prefix << getUnqualified("Ice.HashMap", toplevel->scope(), prefix); } else { os << "Map"; } if (typescript) { os << "<" << typeToString(keyType, toplevel, imports, true) << ", " << typeToString(d->valueType(), toplevel, imports, true) << ">"; } return os.str(); } } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { ostringstream os; string prefix; if(typescript) { prefix = importPrefix(contained, toplevel, imports); os << prefix; } if(prefix.empty() && typescript) { os << getUnqualified(fixId(contained->scoped()), toplevel->scope(), prefix); } else { os << fixId(contained->scoped()); } return os.str(); } return "???"; }
string Slice::ObjCGenerator::fixName(const ContainedPtr& cont, int baseTypes, bool mangleCasts) { return moduleName(findModule(cont, baseTypes, mangleCasts)) + cont->name(); }
string Slice::ObjCGenerator::fixId(const ContainedPtr& cont, int baseTypes, bool mangleCasts) { return fixId(cont->name(), baseTypes, mangleCasts); }
string Slice::PHP::getAbsolute(const ContainedPtr& cont, bool ns, const string& prefix, const string& suffix) { return scopedToName(cont->scope() + prefix + cont->name() + suffix, ns); }
string Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx, bool cpp11) { static const char* builtinTable[] = { "::Ice::Byte", "bool", "::Ice::Short", "::Ice::Int", "::Ice::Long", "::Ice::Float", "::Ice::Double", "::std::string", "::Ice::ObjectPtr", "::Ice::ObjectPrx", "::Ice::LocalObjectPtr", "::Ice::ValuePtr" }; static const char* cpp11BuiltinTable[] = { "::Ice::Byte", "bool", "short", "int", "long long int", "float", "double", "::std::string", "::std::shared_ptr<::Ice::Object>", "::std::shared_ptr<::Ice::ObjectPrx>", "::std::shared_ptr<void>", "::std::shared_ptr<::Ice::Value>" }; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(builtin->kind() == Builtin::KindString) { return stringTypeToString(type, metaData, typeCtx); } else { if(cpp11) { if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocalOperation)) { return "::std::shared_ptr<::Ice::Value>"; } else { return cpp11BuiltinTable[builtin->kind()]; } } else { return builtinTable[builtin->kind()]; } } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { // // C++11 mapping accepts cpp11:type metadata for classes and proxies // if(cpp11) { string t; if(cpp11 && findMetaData("cpp11:type:", cl, t)) { return t; } else if(cl->definition() && cl->definition()->isDelegate()) { return classDefToDelegateString(cl->definition()); } else { if(cl->isInterface() && !cl->isLocal()) { return "std::shared_ptr<::Ice::Value>"; } else { return "::std::shared_ptr<" + cl->scoped() + ">"; } } } else { return cl->scoped() + "Ptr"; } } StructPtr st = StructPtr::dynamicCast(type); if(st) { // // C++11 mapping doesn't accept cpp:class metdata // if(!cpp11 && findMetaData(st->getMetaData()) == "%class") { return fixKwd(st->scoped() + "Ptr"); } return fixKwd(st->scoped()); } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { if(cpp11) { ClassDefPtr def = proxy->_class()->definition(); // // Non local classes without operations map to the base // proxy class shared_ptr<Ice::ObjectPrx> // if(def && !def->isInterface() && def->allOperations().empty()) { return "::std::shared_ptr<::Ice::ObjectPrx>"; } else { return "::std::shared_ptr<" + fixKwd(proxy->_class()->scoped() + "Prx") + ">"; } } else { return fixKwd(proxy->_class()->scoped() + "Prx"); } } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { return sequenceTypeToString(seq, metaData, typeCtx); } DictionaryPtr dict = DictionaryPtr::dynamicCast(type); if(dict) { return dictionaryTypeToString(dict, metaData, typeCtx); } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { return fixKwd(contained->scoped()); } EnumPtr en = EnumPtr::dynamicCast(type); if(en) { return fixKwd(en->scoped()); } return "???"; }
string Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx, bool cpp11) { static const char* cpp98InputBuiltinTable[] = { "::Ice::Byte", "bool", "::Ice::Short", "::Ice::Int", "::Ice::Long", "::Ice::Float", "::Ice::Double", "const ::std::string&", "const ::Ice::ObjectPtr&", "const ::Ice::ObjectPrx&", "const ::Ice::LocalObjectPtr&", "const ::Ice::ValuePtr&" }; static const char* cpp11InputLocalBuiltinTable[] = { "::Ice::Byte", "bool", "short", "int", "long long int", "float", "double", "const ::std::string&", "const ::std::shared_ptr<::Ice::Object>&", "const ::std::shared_ptr<::Ice::ObjectPrx>&", "const ::std::shared_ptr<void>&", "const ::std::shared_ptr<::Ice::Value>&" }; static const char* cpp11InputBuiltinTable[] = { "::Ice::Byte", "bool", "short", "int", "long long int", "float", "double", "::std::string&", "::std::shared_ptr<::Ice::Object>", "::std::shared_ptr<::Ice::ObjectPrx>", "::std::shared_ptr<void>", "::std::shared_ptr<::Ice::Value>" }; typeCtx |= TypeContextInParam; if(optional) { if(cpp11 && !(typeCtx & TypeContextLocalOperation) && !(typeCtx & TypeContextAMD)) { return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx, cpp11)) +">"; } else { return "const IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx, cpp11)) +">&"; } } BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(builtin->kind() == Builtin::KindString) { if(cpp11 && !(typeCtx & TypeContextLocalOperation) && !(typeCtx & TypeContextAMD)) { return stringTypeToString(type, metaData, typeCtx); } else { return string("const ") + stringTypeToString(type, metaData, typeCtx) + "&"; } } else { if(cpp11) { if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocalOperation)) { if(typeCtx & TypeContextAMD) { return "const ::std::shared_ptr<::Ice::Value>&"; } else { return "::std::shared_ptr<::Ice::Value>"; } } else { if(typeCtx & TypeContextLocalOperation || typeCtx & TypeContextAMD) { return cpp11InputLocalBuiltinTable[builtin->kind()]; } else { return cpp11InputBuiltinTable[builtin->kind()]; } } } else { return cpp98InputBuiltinTable[builtin->kind()]; } } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { string t; if(cpp11) { if(findMetaData("cpp11:type:", cl, t)) { return t; } else if(cl->isLocal() || (typeCtx & TypeContextLocalOperation)) { if(cl->definition() && cl->definition()->isDelegate()) { return classDefToDelegateString(cl->definition(), typeCtx, cpp11); } else if(typeCtx & TypeContextDelegate) { return "::std::shared_ptr<" + fixKwd(cl->scoped()) + ">"; } else { return "const ::std::shared_ptr<" + fixKwd(cl->scoped()) + ">&"; } } else { if(typeCtx & TypeContextAMD) { if(cl->isInterface()) { return "const ::std::shared_ptr<::Ice::Value>&"; } else { return "const ::std::shared_ptr<" + fixKwd(cl->scoped()) + ">&"; } } else { if(cl->isInterface()) { return "::std::shared_ptr<::Ice::Value>"; } else { return "::std::shared_ptr<" + fixKwd(cl->scoped()) + ">"; } } } } else { return "const " + fixKwd(cl->scoped() + "Ptr&"); } } StructPtr st = StructPtr::dynamicCast(type); if(st) { if(cpp11) { if(st->isLocal() || (typeCtx & TypeContextLocalOperation) || (typeCtx & TypeContextAMD)) { return "const " + fixKwd(st->scoped()) + "&"; } else { return fixKwd(st->scoped()); } } else { if(findMetaData(st->getMetaData()) == "%class") { return "const " + fixKwd(st->scoped() + "Ptr&"); } else { return "const " + fixKwd(st->scoped()) + "&"; } } } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { if(cpp11) { ClassDefPtr def = proxy->_class()->definition(); // // Non local classes without operations map to the base // proxy class shared_ptr<Ice::ObjectPrx> // if(typeCtx & TypeContextLocalOperation) { if(def && !def->isInterface() && def->allOperations().empty()) { return "const ::std::shared_ptr<::Ice::ObjectPrx>&"; } else { return "const ::std::shared_ptr<" + fixKwd(proxy->_class()->scoped() + "Prx") + ">&"; } } else { string t; if(def && !def->isInterface() && def->allOperations().empty()) { t = "::std::shared_ptr<::Ice::ObjectPrx>"; } else { t = "::std::shared_ptr<" + fixKwd(proxy->_class()->scoped() + "Prx") + ">"; } return (typeCtx & TypeContextAMD) ? ("const " + t + "&") : t; } } else { return "const " + fixKwd(proxy->_class()->scoped() + "Prx&"); } } EnumPtr en = EnumPtr::dynamicCast(type); if(en) { return fixKwd(en->scoped()); } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { if(cpp11 && !(typeCtx & TypeContextLocalOperation) && !(typeCtx & TypeContextAMD)) { return sequenceTypeToString(seq, metaData, typeCtx); } else { return "const " + sequenceTypeToString(seq, metaData, typeCtx) + "&"; } } DictionaryPtr dict = DictionaryPtr::dynamicCast(type); if(dict) { if(cpp11 && !(typeCtx & TypeContextLocalOperation) && !(typeCtx & TypeContextAMD)) { return dictionaryTypeToString(dict, metaData, typeCtx); } else { return "const " + dictionaryTypeToString(dict, metaData, typeCtx) + "&"; } } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { if(cpp11 && !(typeCtx & TypeContextLocalOperation) && !(typeCtx & TypeContextAMD)) { return fixKwd(contained->scoped()); } else { return "const " + fixKwd(contained->scoped()) + "&"; } } return "???"; }
string Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx, bool cpp11) { static const char* outputBuiltinTable[] = { "::Ice::Byte&", "bool&", "::Ice::Short&", "::Ice::Int&", "::Ice::Long&", "::Ice::Float&", "::Ice::Double&", "::std::string&", "::Ice::ObjectPtr&", "::Ice::ObjectPrxPtr&", "::Ice::LocalObjectPtr&", "::Ice::ValuePtr&" }; static const char* cpp11OutputBuiltinTable[] = { "::Ice::Byte&", "bool&", "short&", "int&", "long long int&", "float&", "double&", "::std::string&", "::std::shared_ptr<::Ice::Object>&", "::std::shared_ptr<::Ice::ObjectPrx>&", "::std::shared_ptr<void>&", "::std::shared_ptr<::Ice::Value>&" }; if(optional) { return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx, cpp11)) +">&"; } BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(builtin->kind() == Builtin::KindString) { return stringTypeToString(type, metaData, typeCtx) + "&"; } else { if(cpp11) { if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocalOperation)) { return "::std::shared_ptr<::Ice::Value>"; } else { return cpp11OutputBuiltinTable[builtin->kind()]; } } else { return outputBuiltinTable[builtin->kind()]; } } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { if(cpp11) { if(cl->isInterface() && !cl->isLocal()) { return "::std::shared_ptr<::Ice::Value>&"; } else { return "::std::shared_ptr<" + fixKwd(cl->scoped()) + ">&"; } } else { return fixKwd(cl->scoped() + "Ptr&"); } } StructPtr st = StructPtr::dynamicCast(type); if(st) { if(!cpp11 && findMetaData(st->getMetaData()) == "%class") { return fixKwd(st->scoped() + "Ptr&"); } else { return fixKwd(st->scoped()) + "&"; } } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { if(cpp11) { ClassDefPtr def = proxy->_class()->definition(); // // Non local classes without operations map to the base // proxy class shared_ptr<Ice::ObjectPrx> // if(def && !def->isInterface() && def->allOperations().empty()) { return "::std::shared_ptr<::Ice::ObjectPrx>"; } else { return "::std::shared_ptr<" + fixKwd(proxy->_class()->scoped() + "Prx") + ">&"; } } else { return fixKwd(proxy->_class()->scoped() + "Prx&"); } } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { return sequenceTypeToString(seq, metaData, typeCtx) + "&"; } DictionaryPtr dict = DictionaryPtr::dynamicCast(type); if(dict) { return dictionaryTypeToString(dict, metaData, typeCtx) + "&"; } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { return fixKwd(contained->scoped()) + "&"; } return "???"; }
string Slice::JsGenerator::fixId(const ContainedPtr& cont, bool mangleCasts) { return fixId(cont->name(), mangleCasts); }
string Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx) { static const char* outputBuiltinTable[] = { "::Ice::Byte&", "bool&", "::Ice::Short&", "::Ice::Int&", "::Ice::Long&", "::Ice::Float&", "::Ice::Double&", "::std::string&", "::Ice::ObjectPtr&", "::Ice::ObjectPrx&", "::Ice::LocalObjectPtr&" }; if(optional) { return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&"; } BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(builtin->kind() == Builtin::KindString) { return stringTypeToString(type, metaData, typeCtx) + "&"; } else { return outputBuiltinTable[builtin->kind()]; } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { return fixKwd(cl->scoped() + "Ptr&"); } StructPtr st = StructPtr::dynamicCast(type); if(st) { if(findMetaData(st->getMetaData()) == "%class") { return fixKwd(st->scoped() + "Ptr&"); } return fixKwd(st->scoped()) + "&"; } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { return fixKwd(proxy->_class()->scoped() + "Prx&"); } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { return sequenceTypeToString(seq, metaData, typeCtx) + "&"; } DictionaryPtr dict = DictionaryPtr::dynamicCast(type); if(dict) { return dictionaryTypeToString(dict, metaData, typeCtx) + "&"; } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { return fixKwd(contained->scoped()) + "&"; } return "???"; }
string Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx) { static const char* builtinTable[] = { "::Ice::Byte", "bool", "::Ice::Short", "::Ice::Int", "::Ice::Long", "::Ice::Float", "::Ice::Double", "::std::string", "::Ice::ObjectPtr", "::Ice::ObjectPrx", "::Ice::LocalObjectPtr" }; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); if(builtin) { if(builtin->kind() == Builtin::KindString) { return stringTypeToString(type, metaData, typeCtx); } else { return builtinTable[builtin->kind()]; } } ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { return fixKwd(cl->scoped() + "Ptr"); } StructPtr st = StructPtr::dynamicCast(type); if(st) { if(findMetaData(st->getMetaData()) == "%class") { return fixKwd(st->scoped() + "Ptr"); } return fixKwd(st->scoped()); } ProxyPtr proxy = ProxyPtr::dynamicCast(type); if(proxy) { return fixKwd(proxy->_class()->scoped() + "Prx"); } SequencePtr seq = SequencePtr::dynamicCast(type); if(seq) { return sequenceTypeToString(seq, metaData, typeCtx); } DictionaryPtr dict = DictionaryPtr::dynamicCast(type); if(dict) { return dictionaryTypeToString(dict, metaData, typeCtx); } ContainedPtr contained = ContainedPtr::dynamicCast(type); if(contained) { return fixKwd(contained->scoped()); } EnumPtr en = EnumPtr::dynamicCast(type); if(en) { return fixKwd(en->scoped()); } return "???"; }
string Slice::JsGenerator::fixId(const ContainedPtr& cont) { return fixId(cont->name()); }