simplify AST (idea like)

This commit is contained in:
develar
2012-10-25 10:11:32 +04:00
parent 6307201006
commit c1cc409b29
25 changed files with 77 additions and 96 deletions
@@ -77,7 +77,7 @@ public class JsConstructExpressionVisitor extends RecursiveJsVisitor {
* We only look at nodes that would not normally be surrounded by parentheses.
*/
@Override
public <T extends JsNode> T accept(T node) {
public <T extends JsNode> void accept(T node) {
// Assign to Object to prevent 'inconvertible types' compile errors due
// to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6548436
// reproducible in jdk1.6.0_02.
@@ -87,9 +87,9 @@ public class JsConstructExpressionVisitor extends RecursiveJsVisitor {
// Only visit expressions that won't automatically be surrounded by
// parentheses
if (precedence < JsPrecedenceVisitor.PRECEDENCE_NEW) {
return node;
return;
}
}
return super.accept(node);
super.accept(node);
}
}
@@ -367,7 +367,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
// get parentheses around it.
printPair(x, x.getTestExpression());
spaceOpt();
questionMark();
p.print('?');
spaceOpt();
printPair(x, x.getThenExpression());
spaceOpt();
@@ -407,17 +407,17 @@ public class JsToStringGenerationVisitor extends JsVisitor {
leftParen();
accept(x.getCondition());
rightParen();
_nestedPush(x.getBody());
nestedPush(x.getBody());
accept(x.getBody());
_nestedPop(x.getBody());
nestedPop(x.getBody());
}
@Override
public void visitDoWhile(JsDoWhile x, JsContext context) {
p.print(CHARS_DO);
_nestedPush(x.getBody());
nestedPush(x.getBody());
accept(x.getBody());
_nestedPop(x.getBody());
nestedPop(x.getBody());
if (needSemi) {
semi();
newlineOpt();
@@ -483,9 +483,9 @@ public class JsToStringGenerationVisitor extends JsVisitor {
}
rightParen();
_nestedPush(x.getBody());
nestedPush(x.getBody());
accept(x.getBody());
_nestedPop(x.getBody());
nestedPop(x.getBody());
}
@Override
@@ -518,9 +518,9 @@ public class JsToStringGenerationVisitor extends JsVisitor {
accept(x.getObjectExpression());
rightParen();
_nestedPush(x.getBody());
nestedPush(x.getBody());
accept(x.getBody());
_nestedPop(x.getBody());
nestedPop(x.getBody());
}
@Override
@@ -554,9 +554,9 @@ public class JsToStringGenerationVisitor extends JsVisitor {
accept(x.getIfExpression());
rightParen();
JsStatement thenStmt = x.getThenStatement();
_nestedPush(thenStmt);
nestedPush(thenStmt);
accept(thenStmt);
_nestedPop(thenStmt);
nestedPop(thenStmt);
JsStatement elseStatement = x.getElseStatement();
if (elseStatement != null) {
if (needSemi) {
@@ -570,14 +570,14 @@ public class JsToStringGenerationVisitor extends JsVisitor {
p.print(CHARS_ELSE);
boolean elseIf = elseStatement instanceof JsIf;
if (!elseIf) {
_nestedPush(elseStatement);
nestedPush(elseStatement);
}
else {
space();
}
accept(elseStatement);
if (!elseIf) {
_nestedPop(elseStatement);
nestedPop(elseStatement);
}
}
}
@@ -617,7 +617,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
parenPop(x, q, false);
p.print('.');
}
_nameRef(x);
nameRef(x);
}
@Override
@@ -745,9 +745,9 @@ public class JsToStringGenerationVisitor extends JsVisitor {
@Override
public void visitRegExp(JsRegExp x, JsContext ctx) {
_slash();
slash();
p.print(x.getPattern());
_slash();
slash();
String flags = x.getFlags();
if (flags != null) {
p.print(flags);
@@ -774,12 +774,12 @@ public class JsToStringGenerationVisitor extends JsVisitor {
p.print(CHARS_SWITCH);
spaceOpt();
leftParen();
accept(x.getExpr());
accept(x.getExpression());
rightParen();
spaceOpt();
_blockOpen();
blockOpen();
acceptList(x.getCases());
_blockClose();
blockClose();
}
@Override
@@ -918,7 +918,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
boolean needBraces = !x.isGlobalBlock();
if (needBraces) {
_blockOpen();
blockOpen();
}
int count = 0;
@@ -1000,13 +1000,13 @@ public class JsToStringGenerationVisitor extends JsVisitor {
p.print('=');
}
private void _blockClose() {
private void blockClose() {
p.indentOut();
p.print('}');
newlineOpt();
}
private void _blockOpen() {
private void blockOpen() {
p.print('{');
p.indentIn();
newlineOpt();
@@ -1040,11 +1040,11 @@ public class JsToStringGenerationVisitor extends JsVisitor {
nameDef(hasName.getName());
}
private void _nameRef(JsNameRef nameRef) {
private void nameRef(JsNameRef nameRef) {
p.print(nameRef.getIdent());
}
private boolean _nestedPop(JsStatement statement) {
private boolean nestedPop(JsStatement statement) {
boolean pop = !(statement instanceof JsBlock);
if (pop) {
p.indentOut();
@@ -1052,7 +1052,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
return pop;
}
private boolean _nestedPush(JsStatement statement) {
private boolean nestedPush(JsStatement statement) {
boolean push = !(statement instanceof JsBlock);
if (push) {
newlineOpt();
@@ -1116,10 +1116,6 @@ public class JsToStringGenerationVisitor extends JsVisitor {
return doPush;
}
private void questionMark() {
p.print('?');
}
private void rightParen() {
p.print(')');
}
@@ -1140,7 +1136,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
return true;
}
private void _slash() {
private void slash() {
p.print('/');
}
@@ -58,7 +58,7 @@ public final class JsArrayAccess extends JsExpressionImpl {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
arrayExpression = visitor.accept(arrayExpression);
indexExpression = visitor.accept(indexExpression);
visitor.accept(arrayExpression);
visitor.accept(indexExpression);
}
}
@@ -6,9 +6,6 @@ package com.google.dart.compiler.backend.js.ast;
import org.jetbrains.annotations.Nullable;
/**
* Represents a JavaScript binary operation.
*/
public final class JsBinaryOperation extends JsExpressionImpl {
private JsExpression arg1;
private JsExpression arg2;
@@ -76,11 +73,11 @@ public final class JsBinaryOperation extends JsExpressionImpl {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
if (op.isAssignment()) {
arg1 = visitor.acceptLvalue(arg1);
visitor.acceptLvalue(arg1);
}
else {
arg1 = visitor.accept(arg1);
visitor.accept(arg1);
}
arg2 = visitor.accept(arg2);
visitor.accept(arg2);
}
}
@@ -29,7 +29,7 @@ public final class JsCase extends JsSwitchMember {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
caseExpression = visitor.accept(caseExpression);
visitor.accept(caseExpression);
super.acceptChildren(visitor, context);
}
}
@@ -54,10 +54,10 @@ public class JsCatch extends JsNodeImpl implements HasCondition {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
param = visitor.accept(param);
visitor.accept(param);
if (condition != null) {
condition = visitor.accept(condition);
visitor.accept(condition);
}
body = visitor.accept(body);
visitor.accept(body);
}
}
@@ -64,8 +64,8 @@ public final class JsConditional extends JsExpressionImpl {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
testExpression = visitor.accept(testExpression);
thenExpression = visitor.accept(thenExpression);
elseExpression = visitor.accept(elseExpression);
visitor.accept(testExpression);
visitor.accept(thenExpression);
visitor.accept(elseExpression);
}
}
@@ -22,7 +22,7 @@ public final class JsExpressionStatement extends AbstractNode implements JsState
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
expression = visitor.accept(expression);
visitor.accept(expression);
}
@Override
@@ -80,19 +80,19 @@ public class JsFor extends JsNodeImpl implements JsStatement {
assert (!(initExpression != null && initVars != null));
if (initExpression != null) {
initExpression = visitor.accept(initExpression);
visitor.accept(initExpression);
}
else if (initVars != null) {
initVars = visitor.accept(initVars);
visitor.accept(initVars);
}
if (condition != null) {
condition = visitor.accept(condition);
visitor.accept(condition);
}
if (incrementExpression != null) {
incrementExpression = visitor.accept(incrementExpression);
visitor.accept(incrementExpression);
}
body = visitor.accept(body);
visitor.accept(body);
}
}
@@ -4,9 +4,6 @@
package com.google.dart.compiler.backend.js.ast;
/**
* Represents a JavaScript for..in statement.
*/
public class JsForIn extends JsNodeImpl implements JsStatement {
private JsStatement body;
private JsExpression iterExpression;
@@ -59,9 +56,9 @@ public class JsForIn extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
if (iterExpression != null) {
iterExpression = visitor.acceptLvalue(iterExpression);
visitor.acceptLvalue(iterExpression);
}
objectExpression = visitor.accept(objectExpression);
body = visitor.accept(body);
visitor.accept(objectExpression);
visitor.accept(body);
}
}
@@ -97,6 +97,6 @@ public final class JsFunction extends JsLiteral implements HasName {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.acceptWithInsertRemove(params);
body = visitor.accept(body);
visitor.accept(body);
}
}
@@ -57,10 +57,10 @@ public final class JsIf extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
ifExpression = visitor.accept(ifExpression);
thenStatement = visitor.accept(thenStatement);
visitor.accept(ifExpression);
visitor.accept(thenStatement);
if (elseStatement != null) {
elseStatement = visitor.accept(elseStatement);
visitor.accept(elseStatement);
}
}
}
@@ -73,7 +73,7 @@ public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArgument
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
qualifier = visitor.accept(qualifier);
visitor.accept(qualifier);
visitor.acceptList(arguments);
}
}
@@ -48,6 +48,6 @@ public class JsLabel extends JsNodeImpl implements JsStatement, HasName {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
statement = visitor.accept(statement);
visitor.accept(statement);
}
}
@@ -101,7 +101,7 @@ public final class JsNameRef extends JsExpressionImpl implements CanBooleanEval,
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
if (qualifier != null) {
qualifier = visitor.accept(qualifier);
visitor.accept(qualifier);
}
}
}
@@ -48,7 +48,7 @@ public final class JsNew extends JsExpressionImpl.JsExpressionHasArguments {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
constructorExpression = visitor.accept(constructorExpression);
visitor.accept(constructorExpression);
visitor.acceptList(arguments);
}
}
@@ -4,11 +4,7 @@
package com.google.dart.compiler.backend.js.ast;
/**
* A JavaScript postfix operation.
*/
public final class JsPostfixOperation extends JsUnaryOperation {
public JsPostfixOperation(JsUnaryOperator op) {
this(op, null);
}
@@ -45,7 +45,7 @@ public class JsPropertyInitializer extends JsNodeImpl {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
labelExpr = visitor.accept(labelExpr);
valueExpr = visitor.accept(valueExpr);
visitor.accept(labelExpr);
visitor.accept(valueExpr);
}
}
@@ -33,7 +33,7 @@ public final class JsReturn extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
if (expression != null) {
expression = visitor.accept(expression);
visitor.accept(expression);
}
}
}
@@ -13,7 +13,7 @@ import java.util.List;
public class JsSwitch extends JsNodeImpl implements JsStatement {
private final List<JsSwitchMember> cases = new ArrayList<JsSwitchMember>();
private JsExpression expr;
private JsExpression expression;
public JsSwitch() {
super();
@@ -23,12 +23,12 @@ public class JsSwitch extends JsNodeImpl implements JsStatement {
return cases;
}
public JsExpression getExpr() {
return expr;
public JsExpression getExpression() {
return expression;
}
public void setExpr(JsExpression expr) {
this.expr = expr;
public void setExpression(JsExpression expression) {
this.expression = expression;
}
@Override
@@ -38,7 +38,7 @@ public class JsSwitch extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
expr = visitor.accept(expr);
visitor.accept(expression);
visitor.acceptWithInsertRemove(cases);
}
}
@@ -54,10 +54,10 @@ public class JsTry extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
tryBlock = visitor.accept(tryBlock);
visitor.accept(tryBlock);
visitor.acceptWithInsertRemove(catches);
if (finallyBlock != null) {
finallyBlock = visitor.accept(finallyBlock);
visitor.accept(finallyBlock);
}
}
}
@@ -4,9 +4,6 @@
package com.google.dart.compiler.backend.js.ast;
/**
* A JavaScript prefix or postfix operation.
*/
public abstract class JsUnaryOperation extends JsExpressionImpl {
private JsExpression arg;
@@ -45,10 +42,10 @@ public abstract class JsUnaryOperation extends JsExpressionImpl {
if (op.isModifying()) {
// The delete operator is practically like an assignment of undefined, so
// for practical purposes we're treating it as an lvalue.
arg = visitor.acceptLvalue(arg);
visitor.acceptLvalue(arg);
}
else {
arg = visitor.accept(arg);
visitor.accept(arg);
}
}
}
@@ -88,7 +88,7 @@ public class JsVars extends JsNodeImpl implements JsStatement, Iterable<JsVars.J
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
if (initExpression != null) {
initExpression = visitor.accept(initExpression);
visitor.accept(initExpression);
}
}
}
@@ -83,9 +83,8 @@ public abstract class JsVisitor {
}
};
public <T extends JsNode> T accept(T node) {
public <T extends JsNode> void accept(T node) {
doAccept(node, UNMODIFIABLE_CONTEXT);
return node;
}
public final <T extends JsNode> void acceptList(List<T> collection) {
@@ -94,9 +93,8 @@ public abstract class JsVisitor {
}
}
public JsExpression acceptLvalue(JsExpression expr) {
doAccept(expr, LVALUE_CONTEXT);
return expr;
public void acceptLvalue(JsExpression expression) {
doAccept(expression, LVALUE_CONTEXT);
}
public final <T extends JsNode> void acceptWithInsertRemove(List<T> collection) {
@@ -42,7 +42,7 @@ public class JsWhile extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
condition = visitor.accept(condition);
body = visitor.accept(body);
visitor.accept(condition);
visitor.accept(body);
}
}