simplify AST (idea like)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user