Make ASI work regardless of next line's indentation

pull/70/head
Max Brunsfeld 2014-08-05 12:54:56 +07:00
parent 55f7177ae5
commit 161fafedf9
2 changed files with 18 additions and 13 deletions

@ -12,6 +12,8 @@ module.exports = compiler.grammar
ubiquitous: ["comment", "_line_break"]
separators: [' ', '\t', '\r']
rules:
program: -> repeat(@statement)
@ -27,7 +29,7 @@ module.exports = compiler.grammar
@var_declaration)
expression_statement: -> seq(
optional(@expression), terminator())
@expression, terminator())
if_statement: -> seq(
keyword("if"),
@ -61,8 +63,8 @@ module.exports = compiler.grammar
for_statement: -> seq(
keyword("for"),
"(",
@expression_statement,
@expression_statement,
optional(@expression), ";"
optional(@expression), ";"
optional(@expression),
")",
@statement)

@ -38,14 +38,12 @@ for (;;) {
(program
(for_statement
(expression_statement (assignment (identifier) (number)))
(expression_statement (rel_op (identifier) (number)))
(assignment (identifier) (number))
(rel_op (identifier) (number))
(math_op (identifier))
(expression_statement (function_call (identifier) (identifier))))
(for_statement
(expression_statement)
(expression_statement)
(statement_block
(expression_statement (function_call (identifier) (identifier))))))
@ -125,16 +123,21 @@ Comments
Automatic semicolon insertion
============================================
stuff()
return 5
var x = y
if (a) {
var b = c
d()
e()
return f
}
---
(program
(expression_statement (function_call (identifier)))
(return_statement (number))
(var_declaration (identifier) (identifier)))
(if_statement (identifier) (statement_block
(var_declaration (identifier) (identifier))
(expression_statement (function_call (identifier)))
(expression_statement (function_call (identifier)))
(return_statement (identifier)))))
============================================
Switch statements