<div dir="ltr">On Wed, Apr 18, 2018 at 12:37 PM Andrew McCreight <<a href="mailto:amccreight@mozilla.com">amccreight@mozilla.com</a>> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Apr 18, 2018 at 10:54 AM, Gijs Kruitbosch <span dir="ltr"><<a href="mailto:gijskruitbosch@gmail.com" target="_blank">gijskruitbosch@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Err, so it seems a side-effect of this (which wasn't very obvious to me when this was posted) is that it's now no longer possible to change a .idl file for a JS component in an artifact build and have it "work".<br>
<br>
Specifically, I ran into this when changing the return type of an extant idl method for nsBlocklistService.js from `unsigned long` to `jsval` (making the method async). I spent a good few hours being puzzled as to how callsites using `await` were getting 0 when the callee was (asynchronously) returning non-zero things, and why the logs from the caller and callee were out of order. Turns out, xpconnect and friends will happily silently convert things (in this case, a Promise object) to match the declared return type (ending up with NaN/0).<br>
<br>
TL;DR: the effect on artifact build users seems pretty unfortunate. Given that we're also not supposed to be making new JS-implemented webidl things, what's the long-term plan for artifact build support for changing JS-implemented interfaces?<br></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Sorry for the hassle. I guess we should at least produce some kind of error, or at least not run the XPIDL compilation stuff at all in artifact builds.<br></div></div></div></div></blockquote><div><br></div><div>I think in general it would be nice if we made it so making any changes that aren't supported in artifact builds (c++, webidl, idl, etc.) causes the artifact build to fail.<br></div></div></div>