summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2017-07-05 12:10:49 +0200
committerBenoit Foucher <benoit@zeroc.com>2017-07-05 12:10:49 +0200
commite706fb2ceb23b1ee3c225f6d9569c58359b4ee72 (patch)
tree56d6d90d0a079d89ee7b2ab1c1013055cdca6e29 /js
parentICE-8218 - Windows OpenSSL test build failure with parallel builds (diff)
downloadice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.tar.bz2
ice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.tar.xz
ice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.zip
Fixed ICE-8217 - added ice_getSlicedData method to Ice values and Ice::SlicedData::clear method to break cyclic references
Diffstat (limited to 'js')
-rw-r--r--js/src/Ice/UnknownSlicedValue.js5
-rw-r--r--js/src/Ice/Value.js17
-rw-r--r--js/test/Ice/slicing/objects/Client.js9
3 files changed, 25 insertions, 6 deletions
diff --git a/js/src/Ice/UnknownSlicedValue.js b/js/src/Ice/UnknownSlicedValue.js
index ad084ce406e..ae059194f7e 100644
--- a/js/src/Ice/UnknownSlicedValue.js
+++ b/js/src/Ice/UnknownSlicedValue.js
@@ -68,6 +68,11 @@ class UnknownSlicedValue extends Ice.Value
return this._unknownTypeId;
}
+ ice_getSlicedData()
+ {
+ return this._slicedData;
+ }
+
_iceWrite(os)
{
os.startValue(this._slicedData);
diff --git a/js/src/Ice/Value.js b/js/src/Ice/Value.js
index 064516441dd..844221bd4f7 100644
--- a/js/src/Ice/Value.js
+++ b/js/src/Ice/Value.js
@@ -31,6 +31,11 @@ Ice.Value = class
{
}
+ ice_getSlicedData()
+ {
+ return null;
+ }
+
_iceWrite(os)
{
os.startValue(null);
@@ -174,13 +179,12 @@ function readPreserved(is)
this._iceSlicedData = is.endValue(true);
}
-const Slice = Ice.Slice;
-
-Slice.PreservedObject = function(obj)
+function ice_getSlicedData()
{
- obj.prototype._iceWrite = writePreserved;
- obj.prototype._iceRead = readPreserved;
-};
+ return this._iceSlicedData;
+}
+
+const Slice = Ice.Slice;
Slice.defineValue = function(valueType, id, preserved, compactId = 0)
{
@@ -201,6 +205,7 @@ Slice.defineValue = function(valueType, id, preserved, compactId = 0)
if(preserved)
{
+ valueType.prototype.ice_getSlicedData = ice_getSlicedData;
valueType.prototype._iceWrite = writePreserved;
valueType.prototype._iceRead = readPreserved;
}
diff --git a/js/test/Ice/slicing/objects/Client.js b/js/test/Ice/slicing/objects/Client.js
index b4ba746704b..c17c79613c8 100644
--- a/js/test/Ice/slicing/objects/Client.js
+++ b/js/test/Ice/slicing/objects/Client.js
@@ -137,6 +137,7 @@
test(!prx.ice_getEncodingVersion().equals(Ice.Encoding_1_0));
test(obj instanceof Ice.UnknownSlicedValue);
test(obj.getUnknownTypeId() == "::Test::SUnknown");
+ test(obj.ice_getSlicedData() != null);
return prx.checkSUnknown(obj);
},
ex =>
@@ -791,8 +792,16 @@
{
if(!prx.ice_getEncodingVersion().equals(Ice.Encoding_1_0))
{
+ let slicedData = p.ice_getSlicedData();
+ test(slicedData !== null);
+ test(slicedData.slices.length === 1);
+ test(slicedData.slices[0].typeId == "::Test::PSUnknown");
return prx.ice_encodingVersion(Ice.Encoding_1_0).checkPBSUnknown(p);
}
+ else
+ {
+ test(p.ice_getSlicedData() === null);
+ }
});
}
).then(() =>