2013/1/22 David Bruant <bruan...@gmail.com> > Just realizing now, but how does the membrane do the symbol unwrapping > if private symbols pierces it? > 2 contexts A and B share a symbol, the symbol initially has to go through > a public channel (get trap with a string name for instance) and if A > created a symbol a, the membrane can provide a symbol b to the B context, > but when A does "someObject[a] = 2" and B does "someObject[b]", both > accesses pierce proxies, so the membrane can't do its unwrapping job. >
The membrane doesn't need to unwrap. Evaluating "someObject[a]" in A, and "someObject[b]" in B will result in different values. In the context of membranes, "someObject" is actually a "Harvey Two-Face" type of object (its split across two worlds, one in A, and a proxy representation in B). Symbol-keyed indexing on the A face is distinct from symbol-keyed indexing on the B face. But that's OK: it's the job of the membrane to separate the A and the B face in the first place. > Also, in some cases, the membrane can't switch a value. > // in context A > > var s = new PrivateSymbol() > var o = Object.freeze({s:s}); > // send o across the membrane > > In B, invariants checks make that the membrane can't answer anything else > than the original symbol when b retrieves the "s" property > This is independent of private symbols. The same issue occurs if s were a String. That's what requires the shadow-target work-around in membrane proxies in general. Cheers, Tom
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss