Hello,

I'm a student at the university of Freiburg.

I write my master thesis about transparency of JavaScript proxies.

The topic is, that the proxies are not really transparent, because the 
Equal-Operators (== and ===) compare the references of the proxies and not of 
the targets. Also the WeakMap uses the proxy as key and don't allow the target 
also as key, if a proxy was inserted.

First Question:
---------------
I should implement an addition for the Proxy API in form of a new Handler Trap, 
which says if a proxy is really transparent or not.

The trap should look like this:

var handler = {
    isTransparent: function(){
        return true;
    }
};

With this trap I should change the operators for comparing either the target or 
the proxy, dependent of the result of the trap.

I've implemented the following Methods for the BaseProxyHandler and Proxy:

bool
BaseProxyHandler::isTransparent(JSContext *cx, HandleObject proxy, bool *bp)
{
    return Proxy::isTransparent(cx, proxy, bp);
}

bool
Proxy::isTransparent(JSContext *cx, HandleObject proxy, bool *bp)
{
        JS_CHECK_RECURSION(cx, return false);
        return proxy->as<ProxyObject>().handler()->isTransparent(cx, proxy, bp);
}

How can I integrate the new trap into the proxy?
I've found the "const Class js::ObjectProxyObject::class_" must I do an new 
entry for the trap?


Second Question:
---------------
I've found the "static JSObject * proxy_WeakmapKeyDelegate(JSObject *obj)". Can 
I make a trap to use a Proxy as key in a WeakMap but use the target to get the 
value with this method?

Third Question:
---------------
Is there a documentation for the Proxy API specific to the C++ implementation?

Thanks a lot

Andreas Schlegel
_______________________________________________
dev-tech-js-engine-internals mailing list
dev-tech-js-engine-internals@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

Reply via email to