[Maildev] Fwd: PSA: nsISimpleEnumerator now works as a JS iterator

Philipp Kewisch kewisch at thunderbird.net
Fri Aug 24 06:11:09 EDT 2018


This is great, we should go and see if we can simplify the code, maybe there is an automatic script to clean up as well!

Philipp 

Begin forwarded message:

> From: Kris Maglione <kmaglione at mozilla.com>
> Date: 24. August 2018 at 12:19:55 AM CEST
> To: Firefox Dev <firefox-dev at mozilla.org>
> Subject: PSA: nsISimpleEnumerator now works as a JS iterator
> 
> As of bug 1484496, any C++-implemented nsISimpleEnumertor instance can be used as a JS iterator. And, when used this way, the iterators now have intrinsic type information, and therefore do not require QIing their elements.
> 
> Which is to say, now you can simply do:
> 
> for (let window of Services.wm.getEnumerator("navigator:browser")) {
>   ...;
> }
> 
> for (let docShell of docShellEnum) {
>   ...;
> }
> 
> rather than:
> 
> let winEnum = Services.wm.getEnumerator("navigator:browser");
> while (winEnum.hasMoreElements()) {
>   let window = winEnum.getNext();
>   ...
> }
> 
> while (docShellEnum.hasMoreElements()) {
>   let docShell = winEnum.getNext().QueryInterface(Ci.nsIDocShell);
>   ...
> }
> 
> If you happen to be using an nsIArray from directly from JavaScript, you unfortunately still need to specify the expected types, since nsIArray has no idea what types it can contain:
> 
> for (let thing of array.enumerate(Ci.nsIThing)) {
>   ...
> }
> 
> Aside from being easier to maintain, these forms should also be somewhat faster than the old protocol, since they only require one XPConnect call per iteration rather than 3(+).
> 
> -Kris
> _______________________________________________
> firefox-dev mailing list
> firefox-dev at mozilla.org
> https://mail.mozilla.org/listinfo/firefox-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.thunderbird.net/pipermail/maildev_lists.thunderbird.net/attachments/20180824/25a57a9e/attachment.html>


More information about the Maildev mailing list