Skip to content

Commit 8f7d55e

Browse files
committed
Fix SyntaxError due to function declarations
1 parent 1950f5e commit 8f7d55e

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/js/instrument/esnstrument.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,9 +1819,19 @@ if (typeof J$ === 'undefined') {
18191819
}
18201820
}
18211821
for (var i = startIndex; i < ast.body.length; i++) {
1822-
18231822
if (ast.body[i].type === 'FunctionDeclaration') {
1824-
newBody.push(ast.body[i]);
1823+
var name = ast.body[i].id.name;
1824+
var params = ast.body[i].params.map(function (param) { return param.name; }).join(', ');
1825+
var assignStmt;
1826+
if (ast.body[i].body === null) {
1827+
assignStmt = acorn.parse(
1828+
"var " + name + " = function " + name + "(" + params + ") {}").body;
1829+
} else {
1830+
assignStmt = replaceInStatement(
1831+
"var " + name + " = function " + name + "(" + params + ") { " + RP + "1 }",
1832+
ast.body[i].body.body);
1833+
}
1834+
newBody.push(assignStmt[0]);
18251835
if (newBody.length !== i + 1) {
18261836
hoisteredFunctions.push(ast.body[i].id.name);
18271837
}
@@ -1835,9 +1845,7 @@ if (typeof J$ === 'undefined') {
18351845
while (ast.body.length > 0) {
18361846
ast.body.pop();
18371847
}
1838-
for (var i = 0; i < newBody.length; i++) {
1839-
ast.body.push(newBody[i]);
1840-
}
1848+
Array.prototype.push.apply(ast.body, newBody);
18411849
} else {
18421850
//console.log(typeof ast.body);
18431851
}

tests/unit/es2015_syntax.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* This code is syntactically correct,
3+
* but not when placed in a block.
4+
*/
5+
function f() {}
6+
var f = 42;

tests/unit/unitTests.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,5 @@ issue78
6464
issue78b
6565
catch1
6666
scope
67-
typeofUndef
67+
typeofUndef
68+
es2015_syntax

0 commit comments

Comments
 (0)