From 5ef9df7feba3116f8cd32ced8e1508ed65708a53 Mon Sep 17 00:00:00 2001 From: TomyLobo Date: Tue, 22 Nov 2011 16:56:41 +0100 Subject: [PATCH] Made it possible to leave parts of a for statement empty. --- .../worldedit/expression/parser/Parser.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/expression/parser/Parser.java b/src/main/java/com/sk89q/worldedit/expression/parser/Parser.java index 0f9ee2fb4..07ae7ee68 100644 --- a/src/main/java/com/sk89q/worldedit/expression/parser/Parser.java +++ b/src/main/java/com/sk89q/worldedit/expression/parser/Parser.java @@ -92,14 +92,6 @@ public class Parser { final Token current = peek(); switch (current.id()) { - case ';': - ++position; - - if (singleStatement) { - break loop; - } - break; - case '{': consumeCharacter('{'); @@ -159,11 +151,11 @@ public class Parser { case 'f': { // for ++position; consumeCharacter('('); - final RValue init = parseExpression(); + final RValue init = parseExpression(true); consumeCharacter(';'); - final RValue condition = parseExpression(); + final RValue condition = parseExpression(true); consumeCharacter(';'); - final RValue increment = parseExpression(); + final RValue increment = parseExpression(true); consumeCharacter(')'); final RValue body = parseStatements(true); @@ -181,7 +173,7 @@ public class Parser { break; default: - statements.add(parseExpression()); + statements.add(parseExpression(true)); if (peek().id() == ';') { ++position; @@ -212,7 +204,7 @@ public class Parser { } } - private final RValue parseExpression() throws ParserException { + private final RValue parseExpression(boolean canBeEmpty) throws ParserException { LinkedList halfProcessed = new LinkedList(); // process brackets, numbers, functions, variables and detect prefix operators @@ -279,6 +271,10 @@ public class Parser { } } + if (halfProcessed.isEmpty() && canBeEmpty) { + return new Sequence(peek().getPosition()); + } + return ParserProcessors.processExpression(halfProcessed); } @@ -302,7 +298,7 @@ public class Parser { List args = new ArrayList(); loop: while (true) { - args.add(parseExpression()); + args.add(parseExpression(false)); final Token current = peek(); ++position; @@ -328,7 +324,7 @@ public class Parser { private final RValue parseBracket() throws ParserException { consumeCharacter('('); - final RValue ret = parseExpression(); + final RValue ret = parseExpression(false); consumeCharacter(')');