does Babel with the `es2016` preset implement tail call optimization?
<p>I used the following example to test tail call recursion with Babel and the <code>es2016</code> preset:</p>

<pre><code>'use strict';

try {
    function r(n) {
        if (n%5000===0)
            console.log(`reached a depth of ${n}`);
        r(n+1);
    }
    r(0);
} catch (e) {
    if (!(e instanceof RangeError))
        throw e;
    else
        console.log('stack blown');
}
</code></pre>

<p>My <code>package.json</code> file is:</p>

<pre><code>{
    "name": "tail-call-optimization",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "build": "babel es6 --out-dir es5 --source-maps",
        "watch": "babel es6 --out-dir es5 --source-maps --watch",
        "start": "node es5/app.js"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "babel-cli": "^6.6.5",
        "babel-core": "^6.7.4",
        "babel-loader": "^6.2.4",
        "babel-polyfill": "^6.7.4",
        "babel-preset-es2016": "^6.0.10",
        "babel-runtime": "^6.6.1"
    },
    "dependencies": {
        "babel-polyfill": "^6.7.4",
        "source-map-support": "^0.4.0"
    }
}
</code></pre>

<p>... and the <code>.babelrc</code> is simply:</p>

<pre><code>{
    "presets": ["es2016"]
}
</code></pre>

<p>Running the above with:</p>

<pre><code>npm run build &amp;&amp; npm run start
</code></pre>

<p>... results in the following console output:</p>

<pre><code>reached a depth of 0
reached a depth of 5000
reached a depth of 10000
reached a depth of 15000
stack blown
</code></pre>

<p>Indeed, looking at the transpiled file in the <code>es5</code> directory, there's nothing to suggest that TCO has been implemented.</p>

<p>Am I missing something?</p>

<p>My node version is <code>4.3.2</code>.</p>