So, I was reading the new Flow type strictness and noticed
https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/
Specifically, I wondered whether the `sum_all` example would copy the
arguments into an array, then loop over. Sadly, it does.
```js
function sum_all(...rest) {
let ret = 0;
for (let i = 0; i < rest.length; i++) { ret += rest[i]; }
return ret;
}
// output
function sum_all() {
var ret = 0;
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
for (var i = 0; i < rest.length; i++) { ret += rest[i]; }
return ret;
}
```
But then I noticed if I changed `let i = 0` to `let i: number = 0`, it
worked directly on `arguments`. That lead me down a rabbit hole to
`Path#_guessExecutionStatusRelativeTo`. When tracing through, the last
comparison made no sense to me. It was trying to find the index of
`"init"` in a list of `["declarations"]` and `"body"` in `["directives",
"body"]`. Red flags and such.
But it makes sense when you're trying to compare the visitor order of
the common ancestor path. Then we're trying to find `"init"` in a list
of `["init", "test", "update", "body"]`. Oh, and there's `"body"` in
there too! And now we know the `ForStatement`'s `init` is executed
before the `body`.
Arrow functions can't be entrly skipped while traversing because this
references inside of them needs to be transformed, so I added a check
which prevents return statements inside arrow functions from being
saved for the transformation.
Fixes#5817 (regression)
* Move babel-standalone into main Babel repo
* Don't try to gather coverage data for babel-standalone test
* Fix JSX test
* Always use npm v4 on Travis
* Include pull request number as part of version number
* Cherry-picking 5721b2e43e
Remove deprecated packages to prevent Babel v6 files from being pulled in
* Use RootMostResolvePlugin to dedupe packages
* Avoid destructuring so the build works on archaic Node.js versions
* - Fix version number
- Remove Babili packages (they should be in separate babili-standalone)
- Remove deprecated syntax-class-constructor-call
* - Remove more Babili packages
- Remove `babel-plugin-inline-replace-variables` for now as it pulls in Babel 6 stuff
* Actually remove reference to babel-plugin-undeclared-variables-check
* Add Babylon to root package.json so we hoist the right version. This fixes the tests.
* add transform-class-properties to stage 3, set spec mode to default
* update readme with examples; use `buildUndefinedNode()`; change behavior to always define both static and nonstatic class properties regardless of spec/loose mode; update tests
* Add babel-plugin-syntax-typescript and babel-plugin-transform-typescript
* Add babel-preset-typescript
* Remove unnecessary handler for JSXOpeningElement
* Use `t.isFoo(node)` instead of `node.type === "Foo"`
* Clean up parameter property assignment generation
* Don't use function for `isSuperCall`
* slice -> shift
* Calculate sourceFileHasJsx only if necessary
* Remove `export =` support
* remove some syntax readme newlines [skip ci]
* update lerna and lerna-changelog
* Lerna: enable yarn, yarn workspaces [skip ci]
* use older version of Babel since it matches on semver (cannot be the same version)
* install yarn version
* revert node engine change
* update flow
* circle ci on 8
* update lock