aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/parse.js6
-rw-r--r--test/compress/loops.js24
2 files changed, 27 insertions, 3 deletions
diff --git a/lib/parse.js b/lib/parse.js
index de27d987..4d06ae05 100644
--- a/lib/parse.js
+++ b/lib/parse.js
@@ -724,9 +724,9 @@ function parse($TEXT, options) {
);
};
- function semicolon() {
+ function semicolon(optional) {
if (is("punc", ";")) next();
- else if (!can_insert_semicolon()) unexpected();
+ else if (!optional && !can_insert_semicolon()) unexpected();
};
function parenthesised() {
@@ -814,7 +814,7 @@ function parse($TEXT, options) {
case "do":
return new AST_Do({
body : in_loop(statement),
- condition : (expect_token("keyword", "while"), tmp = parenthesised(), semicolon(), tmp)
+ condition : (expect_token("keyword", "while"), tmp = parenthesised(), semicolon(true), tmp)
});
case "while":
diff --git a/test/compress/loops.js b/test/compress/loops.js
index cdf1f045..91aa1c5f 100644
--- a/test/compress/loops.js
+++ b/test/compress/loops.js
@@ -121,3 +121,27 @@ drop_if_else_break_4: {
for (; bar() && (x(), y(), foo());) baz(), z(), k();
}
}
+
+parse_do_while_with_semicolon: {
+ options = { loops: false };
+ input: {
+ do {
+ x();
+ } while (false);y()
+ }
+ expect: {
+ do x(); while (false);y();
+ }
+}
+
+parse_do_while_without_semicolon: {
+ options = { loops: false };
+ input: {
+ do {
+ x();
+ } while (false)y()
+ }
+ expect: {
+ do x(); while (false);y();
+ }
+} \ No newline at end of file