Problem sending a Map over captp
Thomas Leonard <[email protected]>
| Newsgroups | gmane.comp.lang.e.general |
|---|---|
| Message-ID | <[email protected]> |
This updoc fails (I get the same problem when not using updoc too):
?? in new vat A
? introducer.onTheAir()
? var x := null
? def sr := makeSturdyRef.temp(&x)
? <file:tmp>.setText(introducer.sturdyToURI(sr))
?? in new vat B
? introducer.onTheAir()
? def sr := introducer.sturdyFromURI(<file:tmp>.getText())
? def foo
? bind foo := ["a" => "b"]
? def done := sr.getRcvr()<-put(foo)
# value: <Promise>
? interp.waitAtTop(done)
?? in vat A
? E.toString(x)
# value: ["a" => "b"]
It prints:
updoc: started
at: <file:....updoc#:span::18:2::18:14>
expr: E.toString(x)
missing new value
original value: ["a" => "b"]
missing original problem
new problem: <NullPointerException>
# # While printing an class org.erights.e.elib.tables.ConstMapImpl
# - static E4E#toString(Object)
# # Problem reporting
(org.erights.e.develop.exception.EBacktraceException: # While quoting
an class org.erights.e.elib.tables.ConstMapImpl)
# @ toString/1: <file:...updoc#:span::18:4::18:11>
# - EExpr#evalToPair(Scope)
# . e`E.toString(x)`.evalToPair(<a Scope>)
# @ evalToPair/1:
<file:.../e/src/esrc/org/erights/e/elang/cmd/cmdMakerMaker.emaker#:span::128:57::128:66>
If I call put(Ref.resolution(foo)) instead then it works as expected.
The immediate cause is that ConstMapImpl.myTable is null, but I think
this is due to the magic deserialisation code setting (or not setting)
the field directly. It doesn't seem to use the constructor, and the
field says:
/**
* This class should never be directly unserialized, so this instance
* variable need not be declared serial.
*/
private final transient FlexMap myTable;
But I don't know how captp works. Any suggestions?
--
Dr Thomas Leonard ROX desktop / Zero Install
GPG: 9242 9807 C985 3C07 44A6 8B9A AE07 8280 59A5 3CC1
GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA