diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-07-05 12:10:49 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-07-05 12:10:49 +0200 |
commit | e706fb2ceb23b1ee3c225f6d9569c58359b4ee72 (patch) | |
tree | 56d6d90d0a079d89ee7b2ab1c1013055cdca6e29 /js | |
parent | ICE-8218 - Windows OpenSSL test build failure with parallel builds (diff) | |
download | ice-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.js | 5 | ||||
-rw-r--r-- | js/src/Ice/Value.js | 17 | ||||
-rw-r--r-- | js/test/Ice/slicing/objects/Client.js | 9 |
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(() => |