if as expression with control statements support

This commit is contained in:
Pavel Talanov
2012-01-30 21:17:32 +04:00
parent ed0d5a8b06
commit 7a61a7520d
11 changed files with 437 additions and 353 deletions
@@ -7,6 +7,7 @@ package com.google.dart.compiler.util;
import com.google.dart.compiler.InternalCompilerException;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.common.SourceInfo;
import com.sun.istack.internal.NotNull;
import java.util.List;
@@ -357,6 +358,9 @@ public class AstUtil {
if (node instanceof JsBlock) {
JsBlock block = (JsBlock) node;
List<JsStatement> statements = block.getStatements();
if (statements.isEmpty()) return block;
int size = statements.size();
statements.set(size - 1,
AstUtil.convertToStatement(mutateLastExpression(statements.get(size - 1), mutator)));
@@ -376,4 +380,23 @@ public class AstUtil {
}
return mutator.mutate(node);
}
public static final class SaveLastExpressionMutator implements Mutator {
@NotNull
private final JsExpression toAssign;
public SaveLastExpressionMutator(@NotNull JsExpression toAssign) {
this.toAssign = toAssign;
}
@Override
public JsNode mutate(JsNode node) {
if (!(node instanceof JsExpression)) {
return node;
}
return AstUtil.assignment(toAssign, (JsExpression) node);
}
}
}