Nashorn throws a StackOverflowError if there are a few hundred if else statements in a function.
function whyDoesThisThrowStackOverflowError(x) { if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } else if (true) { print(x); } <snip> else if (true) { print(x); } } whyDoesThisThrowStackOverflowError(1); java.lang.StackOverflowError at jdk.nashorn.internal.parser.Lexer.valueOfIdent(Lexer.java:756) at jdk.nashorn.internal.parser.Lexer.getValueOf(Lexer.java:1661) at jdk.nashorn.internal.parser.AbstractParser.getValue(AbstractParser.java:391) at jdk.nashorn.internal.parser.AbstractParser.getValue(AbstractParser.java:379) at jdk.nashorn.internal.parser.AbstractParser.expectValue(AbstractParser.java:366) at jdk.nashorn.internal.parser.AbstractParser.getIdent(AbstractParser.java:431) at jdk.nashorn.internal.parser.Parser.primaryExpression(Parser.java:1956) at jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511) at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372) at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147) at jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353) at jdk.nashorn.internal.parser.Parser.argumentList(Parser.java:2588) at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2375) at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147) at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282) at jdk.nashorn.internal.parser.Parser.expressionStatement(Parser.java:1150) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:967) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:863) at jdk.nashorn.internal.parser.Parser.statementList(Parser.java:1013) at jdk.nashorn.internal.parser.Parser.getBlock(Parser.java:531) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:555) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1187) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) at jdk.nashorn.internal.parser.Parser.statement(Parser.java:890) at jdk.nashorn.internal.parser.Parser.getStatement(Parser.java:560) at jdk.nashorn.internal.parser.Parser.ifStatement(Parser.java:1192) <snip>