Bug 687669 - Calling toSource on a parsed script omits any empty expression

Add EmptyStatement node to represent a statement consisting of a single semi-colon. This node directly relates to the EmptyStatement production from ES5 (12.3). Before this patch, empty statements were represented by the EmptyExpression node which led to issues when calling toSource() [bug 687669]. Wrapping EmptyExpression with ExpressionStatement to form a statement node does not work in this case, because it interferes with the rest of the system.
Bug 688018 - Calling toSource on a parsed script containing 'void' throws exception

add test case for Bug688018
Bug 688021 - Calling toSource on a parsed script containing debugger omits semi-colon

Although the production DebuggerStatement is handled internally as KeywordLiteral, it is in fact a statement and therefore should have the same toSource() representation as other statement, i.e. it should end with a semi-colon and a newline.
Bug 689308 - Calling toSource on a parsed script containing array of undefined elements returns smaller array

Elided elements in an array literal are represented by the EmptyExpression node. And the toSource() representation of EmptyExpression is the empty string. That means elided elements may not be visible when calling toSource() on ArrayLiteral if they appear at the end of the array literal [bug 689308]. This case is now handled in AstNode#printList(). Other callers of printList() do not pass EmptyExpression nodes to the method, so special-casing EmptyExpression is safe.
Bug 689314 - Calling toSource on a parsed script containing lambda returns extra return and semi-colon

Expression closures should not emit the implicit "return" statement when toSource() is called.
Fix bug 737431 - Destructuring assignment doesn't work in expression closures parameters.

This creates a body node for expression closures, allowing extra code for destructuring parameters to be handled properly.
Fix bug 491621 - VariableDeclaration.toSource() sometimes returns invalid source code

This adds a `isStatement()` flag to VariableDeclaration. The flag is set by the Parser depending on context, which is much more reliable than the previous solution.
Major update of Rhino RegExp implementation.

The major part of this consists of a backport of the improvements made to
Spidermonkey's jsregexp.c code over the years (before being replaced by
YARR in 2010), with some additional optimizations strewn in.
Optimize flat character matching
Avoid pushing program state in RegExp disjunction

The trade-off is to add two ints for current
continuation index and op to the backtrack object.
Remove quasi-duplicate constant.
Make some optimizer classes and methods public to simplify testing.
Fix bug 708801: Boolean converted to number when optimising

This patch from André Bargull fixes a ton of bugs in optimizer type flow analysis.
Add support for pulling out object and array creation in to separate methods.

This helps reduce the code size for large functions and makes coffeescript
work in compiled mode. Backport of cdc4a6dfa61f46aa6c33b84bbb8d07c3f2b59b73
from rhino_1_8 branch.
Use 1.7 as default language version in Rhino shell
Remove dead workaround code reportedly working in JDK 1.1.7
Fix bug 351066 - Incorrect DST for dates after 2038 when January 1st falls on a Tuesday
Add static imports for access modifier constants
Fix bug 509036 - ArrayIndexOutOfBoundsException thrown in regexp.NativeRegExp.parseTerm when regex pattern includes a group (()) and ends with brace ({)
Move code out of the main interpreter loop into dedicated methods.

Main interpreter loop performance has shown to suffer from its size and monolithic
structure. In the past, small additions to the main loop code have resulted in
dramatic declines in performance (e.g. the regexp commit that will follow this one).
 Also see  commit 97b6d162833218b603f2b667fcdbeda95cfdae75 which dealt with
 the same problem.

As it is, this commit improves interpreter performance by roughly 10% in various
benchmarks.