Support spread operator in call expressions#1931
Merged
ahejlsberg merged 3 commits intomasterfrom Feb 10, 2015
Merged
Conversation
Contributor
There was a problem hiding this comment.
This class C/D can be pull out into its own test cases
ahejlsberg
added a commit
that referenced
this pull request
Feb 10, 2015
Support spread operator in call expressions
Closed
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds support for the spread (
...) operator in call expressions with down-level code generation for ES3/5. For example:The function calls are emitted unchanged for ES6, but when the target is ES3 or ES5, the calls are rewritten as follows:
Type checking requires spread elements to match up with a rest parameter. Thus, in a typed function call it is not possible to use a spread element for non-rest parameters. For example:
A temporary variable may be injected to ensure the
thisargument is only evaluated once. For example:This generates the code: