On 2015/09/01 03:55:02, caitp wrote:
https://codereview.chromium.org/1272673003/diff/150001/src/parser.cc
File src/parser.cc (right):


https://codereview.chromium.org/1272673003/diff/150001/src/parser.cc#newcode4415
src/parser.cc:4415: // for (var $argument_index = $rest_index;
On 2015/09/01 03:09:10, Benedikt Meurer wrote:
> I guess there was some discussion about this desugaring; so do we have any
plans
> how to make this work with inlining? esp. inlining in TurboFan?

I don't think there are plans per se (but you might have seen there was some
TF
code previously for this, not sure how complete it was in terms of inlining).

There are at least some ideas about how the runtime call could be changed into something relatively quick. The spec'd algorithm uses CreateDataProperty(O, P, V) to add the element to the array. For rest parameters, we can make a lot of
assumptions which lend themselves well to inlining:

- the rest array's own "length" property is always writable, never
configurable
- the rest array is always extensible
- the rest array's own indexed properties are always writable and configurable
(they aren't present until the rest parameter algorithm sets them up)

Based on this, yes, the current implementation probably isn't doing the right
thing, but it's pretty close.

I guess there are also statistical guesses about the size of the array to
allocate, and whether or not to perform the loop at all, after a bit of
profiling. But maybe compiler-folks are better for talking about that stuff.

I'm more worried about the %_ArgumentsLength and %_Argument intrinsics. Not sure
if
and how we can support that with inlining, esp. %_Argument(i) with non-constant
i will
probably need to be turned into some kind of switch during inlining. From a
compiler
perspective (and without deep understanding of rest parameters, yet), I'd think
that a
dedicated RestParameter AST node, which is then turned into a
JSCreateRestParameters
graph node is easiest to optimize wrt. inlining; as soon as the inliner
discovers a
JSCreateRestParameters (which should hang off the Start node), it will replace
it with a
JSArray containing all the (then statically) known rest parameters. Otherwise
the rest
parameters are lowered to a runtime call or a stub call, which is responsible to
allocate
the JSArray.

https://codereview.chromium.org/1272673003/

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to