|
|
|
|
|
by notSorella
5426 days ago
|
|
That's not a problem with the line joining stuff. Both `return' and `{ foo: bar }' are ENTIRE VALID statements in their own right. returnStmt ::= "return" [ expression ] (";" or EOL) Note that expression is optional, so it's the choice of `return' by itself being a valid statement on its own that "causes problems". Plus, this is not really a problem that can be solved by simply putting semicolons everywhere. You can't change the parser rules by including or not semicolons. Also, same thing with break/continue: breakStmt ::= "break" [ label ] (";" or EOL) continueStmt ::= "continue" [ label ] (";" or EOL) |
|
A standalone object literal would likely be interpreted as a block and would throw a syntax error unless it were a simple identifier and a statement `{ foo: <statement> }`, in which case it would not interpret it as an object but exactly what it is, a label and a statement.
This is why JSON parsers which use eval must first wrap the object literal with parens, to make it an expression rather than a statement.