diff options
author | Jose <jose@zeroc.com> | 2016-12-28 10:50:12 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2016-12-28 10:50:12 +0100 |
commit | c7943b32df74f525013c8b7e17c92a032d74c868 (patch) | |
tree | 0ce9bc34394de9929696ab18aae84623778e3eb0 /cpp/src/slice2js/Gen.cpp | |
parent | Bumped timeout for server shutdown (diff) | |
download | ice-c7943b32df74f525013c8b7e17c92a032d74c868.tar.bz2 ice-c7943b32df74f525013c8b7e17c92a032d74c868.tar.xz ice-c7943b32df74f525013c8b7e17c92a032d74c868.zip |
Port Ice.Value to JavaScript mapping
Diffstat (limited to 'cpp/src/slice2js/Gen.cpp')
-rw-r--r-- | cpp/src/slice2js/Gen.cpp | 262 |
1 files changed, 125 insertions, 137 deletions
diff --git a/cpp/src/slice2js/Gen.cpp b/cpp/src/slice2js/Gen.cpp index e5e658f4aaa..2be5cd03f8a 100644 --- a/cpp/src/slice2js/Gen.cpp +++ b/cpp/src/slice2js/Gen.cpp @@ -643,6 +643,7 @@ Slice::Gen::RequireVisitor::writeRequires(const UnitPtr& p) if(_seenClass || _seenObjectSeq || _seenObjectDict) { requires["Ice"].push_back("Ice/Object"); + requires["Ice"].push_back("Ice/Value"); } if(_seenClass) { @@ -902,25 +903,20 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) const string localScope = getLocalScope(scope); const string name = fixId(p->name()); const string prxName = p->name() + "Prx"; - const string objectRef = "Ice.Object"; - const string prxRef = "Ice.ObjectPrx"; ClassList bases = p->bases(); ClassDefPtr base; string baseRef; - string basePrxRef; const bool hasBaseClass = !bases.empty() && !bases.front()->isInterface(); if(hasBaseClass) { base = bases.front(); bases.erase(bases.begin()); baseRef = getReference(scope, base->scoped()); - basePrxRef = getReference(scope, base->scoped() + "Prx"); } else { - baseRef = objectRef; - basePrxRef = prxRef; + baseRef = "Ice.Value"; } const DataMemberList allDataMembers = p->allDataMembers(); @@ -979,92 +975,123 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) _out << nl << "];"; } - _out << sp; - writeDocComment(p, getDeprecateReason(p, 0, "type")); - _out << nl << localScope << '.' << name << " = class"; - if(!p->isLocal() || hasBaseClass) - { - _out << " extends " << baseRef; - } - _out << sb; - if(!allParamNames.empty()) + if(!p->isInterface() || p->isLocal()) { - _out << nl << "constructor" << spar; - for(DataMemberList::const_iterator q = baseDataMembers.begin(); q != baseDataMembers.end(); ++q) + _out << sp; + writeDocComment(p, getDeprecateReason(p, 0, "type")); + _out << nl << localScope << '.' << name << " = class"; + if(!p->isLocal() || hasBaseClass) { - _out << fixId((*q)->name()); + _out << " extends " << baseRef; } - for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q) + _out << sb; + if(!allParamNames.empty()) { - string value; - if((*q)->optional()) + _out << nl << "constructor" << spar; + for(DataMemberList::const_iterator q = baseDataMembers.begin(); q != baseDataMembers.end(); ++q) { - if((*q)->defaultValueType()) + _out << fixId((*q)->name()); + } + + for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q) + { + string value; + if((*q)->optional()) { - value = writeConstantValue(scope, (*q)->type(), (*q)->defaultValueType(), (*q)->defaultValue()); + if((*q)->defaultValueType()) + { + value = writeConstantValue(scope, (*q)->type(), (*q)->defaultValueType(), (*q)->defaultValue()); + } + else + { + value = "undefined"; + } } else { - value = "undefined"; + if((*q)->defaultValueType()) + { + value = writeConstantValue(scope, (*q)->type(), (*q)->defaultValueType(), (*q)->defaultValue()); + } + else + { + value = getValue(scope, (*q)->type()); + } } + _out << (fixId((*q)->name()) + (value.empty() ? value : (" = " + value))); } - else + + _out << epar << sb; + if(!p->isLocal() || hasBaseClass) + { + _out << nl << "super" << spar << baseParamNames << epar << ';'; + } + writeInitDataMembers(dataMembers, scope); + _out << eb; + + if(!p->isLocal()) { - if((*q)->defaultValueType()) + if(p->compactId() != -1) { - value = writeConstantValue(scope, (*q)->type(), (*q)->defaultValueType(), (*q)->defaultValue()); + _out << sp; + _out << nl << "static get _iceCompactId()"; + _out << sb; + _out << nl << "return " << p->compactId() << ";"; + _out << eb; } - else + + if(!dataMembers.empty()) { - value = getValue(scope, (*q)->type()); + _out << sp; + _out << nl << "_iceWriteMemberImpl(ostr)"; + _out << sb; + writeMarshalDataMembers(dataMembers, optionalMembers); + _out << eb; + + _out << sp; + _out << nl << "_iceReadMemberImpl(istr)"; + _out << sb; + writeUnmarshalDataMembers(dataMembers, optionalMembers); + _out << eb; } } - _out << (fixId((*q)->name()) + (value.empty() ? value : (" = " + value))); } + _out << eb << ";"; - _out << epar << sb; - if(!p->isLocal() || hasBaseClass) + _out << sp; + if(!p->isLocal()) { - _out << nl << "super" << spar << baseParamNames << epar << ';'; - } - writeInitDataMembers(dataMembers, scope); - _out << eb; - } + bool preserved = p->hasMetaData("preserve-slice") && !p->inheritsMetaData("preserve-slice"); - _out << sp; - _out << nl << "static get _iceParent()"; - _out << sb; - if(!p->isLocal() || hasBaseClass) - { - _out << nl << "return " << baseRef << ";"; - } - else - { - _out << nl << "return undefined;"; + _out << nl << "Slice.defineValue(" << localScope << "." << name << ", " + << "iceC_" << getLocalScope(scoped, "_") << "_ids[" << scopedPos << "], " + << (preserved ? "true" : "false") ; + if(p->compactId() >= 0) + { + _out << ", " << p->compactId(); + } + _out << ");"; + } } - _out << eb; + // + // Define servant an proxy types for non local classes + // if(!p->isLocal()) { _out << sp; - _out << nl << "static get _iceIds()"; - _out << sb; - _out << nl << "return iceC_" << getLocalScope(scoped, "_") << "_ids;"; - _out << eb; - - _out << sp; - _out << nl << "static get _iceId()"; - _out << sb; - _out << nl << "return iceC_" << getLocalScope(scoped, "_") << "_ids[" << scopedPos << "];"; - _out << eb; - - _out << sp; - _out << nl << "_iceMostDerivedType()"; + writeDocComment(p, getDeprecateReason(p, 0, "type")); + _out << nl << localScope << "._" << p->name() << "Disp" << " = class extends "; + if(hasBaseClass) + { + _out << getLocalScope(base->scope()) << "._" << base->name() << "Disp"; + } + else + { + _out << "Ice.Object"; + } _out << sb; - _out << nl << "return " << localScope << "." << name << ";"; - _out << eb; - if(!bases.empty()) { @@ -1078,7 +1105,7 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) ClassDefPtr base = *q; if(base->isInterface()) { - _out << nl << getLocalScope(base->scope()) << "." << base->name(); + _out << nl << getLocalScope(base->scope()) << "._" << base->name()<< "Disp" ; if(++q != bases.end()) { _out << ", "; @@ -1093,36 +1120,8 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) _out << nl << "];"; _out << eb; } + _out << eb << ";"; - if(p->compactId() != -1) - { - _out << sp; - _out << nl << "static get _iceCompactId()"; - _out << sb; - _out << nl << "return " << p->compactId() << ";"; - _out << eb; - } - - if(!dataMembers.empty()) - { - _out << sp; - _out << nl << "_iceWriteMemberImpl(ostr)"; - _out << sb; - writeMarshalDataMembers(dataMembers, optionalMembers); - _out << eb; - - _out << sp; - _out << nl << "_iceReadMemberImpl(istr)"; - _out << sb; - writeUnmarshalDataMembers(dataMembers, optionalMembers); - _out << eb; - } - } - _out << eb << ";"; - - - if(!p->isLocal()) - { const string baseProxy = !p->isInterface() && base ? (getLocalScope(base->scope()) + "." + base->name() + "Prx") : "Ice.ObjectPrx"; @@ -1130,18 +1129,14 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) _out << nl << localScope << '.' << prxName << " = class extends " << baseProxy; _out << sb; - _out << sp; - _out << nl << "static ice_staticId()"; - _out << sb; - _out << nl << "return " << localScope << "." << name << "._iceId;"; - _out << eb; - _out << sp; - _out << nl << "static get _implements()"; - _out << sb; - _out << nl << "return ["; if(!bases.empty()) { + _out << sp; + _out << nl << "static get _implements()"; + _out << sb; + _out << nl << "return ["; + _out.inc(); for(ClassList::const_iterator q = bases.begin(); q != bases.end();) { @@ -1160,32 +1155,17 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) } } _out.dec(); + _out << "];"; + _out << eb; } - _out << "];"; - _out << eb; _out << eb << ";"; - if(p->hasMetaData("preserve-slice") && !p->inheritsMetaData("preserve-slice")) - { - _out << sp; - _out << nl << "Slice.PreservedObject(" << localScope << "." << name << ");"; - } - - // - // Register the compact id - // - if(p->compactId() >= 0) - { - // - // Also register the type using the stringified compact ID. - // - _out << nl << "Ice.CompactIdRegistry.set(" << p->compactId() << ", " << localScope << "." - << name << ".ice_staticId());"; - } - - _out << sp << nl << "Slice.defineOperations(" << localScope << '.' << name << ", " << localScope << '.' - << prxName; + _out << sp << nl << "Slice.defineOperations(" + << localScope << "._" << p->name() << "Disp, " + << localScope << '.' << prxName << ", " + << "iceC_" << getLocalScope(scoped, "_") << "_ids, " + << scopedPos; const OperationList ops = p->operations(); if(!ops.empty()) @@ -1773,17 +1753,18 @@ Slice::Gen::TypesVisitor::encodeTypeForOperation(const TypePtr& type) static const char* builtinTable[] = { - "0", // byte - "1", // bool - "2", // short - "3", // int - "4", // long - "5", // float - "6", // double - "7", // string - "8", // Ice.Object - "9", // Ice.ObjectPrx - "??" // LocalObject + "0", // byte + "1", // bool + "2", // short + "3", // int + "4", // long + "5", // float + "6", // double + "7", // string + "8", // Ice.Object + "9", // Ice.ObjectPrx + "??", // LocalObject + "10", // Ice.Value }; BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); @@ -1825,7 +1806,14 @@ Slice::Gen::TypesVisitor::encodeTypeForOperation(const TypePtr& type) ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); if(cl) { - return "\"" + fixId(cl->scoped()) + "\""; + if(cl->isInterface()) + { + return "\"Ice.Value\""; + } + else + { + return "\"" + fixId(cl->scoped()) + "\""; + } } return "???"; |