On 06/03/2015 12:12 AM, Seth Fowler wrote:
On Jun 2, 2015, at 1:59 PM, L. David Baron <[email protected]> wrote:
Remember that if 'auto' is forbidden, people might get around it by
not using a variable at all (and instead repeating the expression)
rather than by writing the type explicitly on the variable... and
this doesn't provide type information.
This is a point that’s worth calling out explicitly. When you write this:
Foo(Bar());
You do not have to explicitly specify the return type of Bar(), and if you
change both the return type of Bar() and the type of Foo()’s first parameter,
you don’t have to update this callsite.
If you write this:
Baz val = Bar();
Foo(val);
Now you’ve been forced to explicitly write out the return type of Bar()
And this might not always be easy to write it down, or it might be
redundant, especially if this return type is constructed based on the type
of the arguments of the function.
This pattern is used to build a variadic list of argument in the
CodeGenerator of IonMonkey. The type is mostly uninteresting, as this is
the repeated type of the arguments.
Taking a real example [1], this code:
OutOfLineCode* ool =
oolCallVM(…, (ArgList(), ImmGCPtr(info.fun), scopeChain), …);
would become:
ArgSeq<ArgSeq<ArgSeq<void,void>, ImmGCPtr>, Register>& args =
(ArgList(), ImmGCPtr(info.fun), scopeChain);
OutOfLineCode* ool = oolCallVM(…, args, …);
which is way too verbose for repeated type information.
[1]
https://dxr.mozilla.org/mozilla-central/source/js/src/jit/CodeGenerator.cpp#1704
PS: Yes, we can use variadic templates now … Bug 1168500
--
Nicolas B. Pierron
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform