< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java
Print this page
@@ -1102,16 +1102,18 @@
try {
init = assignmentExpression(!isStatement);
} finally {
defaultNames.pop();
}
- } else if (varType == CONST) {
+ } else if (varType == CONST && isStatement) {
throw error(AbstractParser.message("missing.const.assignment", name.getName()));
}
+ // Only set declaration flag on lexically scoped let/const as it adds runtime overhead.
+ final IdentNode actualName = varType == LET || varType == CONST ? name.setIsDeclaredHere() : name;
// Allocate var node.
- final VarNode var = new VarNode(varLine, varToken, sourceOrder, finish, name.setIsDeclaredHere(), init, varFlags);
+ final VarNode var = new VarNode(varLine, varToken, sourceOrder, finish, actualName, init, varFlags);
vars.add(var);
appendStatement(var);
if (type != COMMARIGHT) {
break;
@@ -1245,11 +1247,10 @@
next();
}
expect(LPAREN);
-
switch (type) {
case VAR:
// Var declaration captured in for outer block.
vars = variableStatement(type, false, forStart);
break;
< prev index next >