simplify AST (idea like)

This commit is contained in:
develar
2012-10-25 09:43:19 +04:00
parent d23bca091e
commit ca016fcb32
44 changed files with 50 additions and 323 deletions
@@ -39,11 +39,6 @@ public class ChameleonJsExpression implements JsExpression {
return expression.makeStmt();
}
@Override
public NodeKind getKind() {
return expression.getKind();
}
@Override
public void accept(JsVisitor visitor, JsContext context) {
expression.accept(visitor, context);
@@ -61,9 +61,4 @@ public final class JsArrayAccess extends JsExpressionImpl {
arrayExpression = visitor.accept(arrayExpression);
indexExpression = visitor.accept(indexExpression);
}
@Override
public NodeKind getKind() {
return NodeKind.ARRAY_ACCESS;
}
}
@@ -65,9 +65,4 @@ public final class JsArrayLiteral extends JsLiteral {
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.acceptWithInsertRemove(expressions);
}
@Override
public NodeKind getKind() {
return NodeKind.ARRAY;
}
}
@@ -83,9 +83,4 @@ public final class JsBinaryOperation extends JsExpressionImpl {
}
arg2 = visitor.accept(arg2);
}
@Override
public NodeKind getKind() {
return NodeKind.BINARY_OP;
}
}
@@ -52,9 +52,4 @@ public class JsBlock extends JsNodeImpl implements JsStatement {
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.acceptWithInsertRemove(statements);
}
@Override
public NodeKind getKind() {
return NodeKind.BLOCK;
}
}
@@ -16,11 +16,6 @@ public final class JsBreak extends JsContinue {
super(label);
}
@Override
public NodeKind getKind() {
return NodeKind.BREAK;
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitBreak(this, context);
@@ -32,9 +32,4 @@ public final class JsCase extends JsSwitchMember {
caseExpression = visitor.accept(caseExpression);
super.acceptChildren(visitor, context);
}
@Override
public NodeKind getKind() {
return NodeKind.CASE;
}
}
@@ -60,9 +60,4 @@ public class JsCatch extends JsNodeImpl implements HasCondition {
}
body = visitor.accept(body);
}
@Override
public NodeKind getKind() {
return NodeKind.CATCH;
}
}
@@ -71,9 +71,4 @@ public final class JsConditional extends JsExpressionImpl {
thenExpr = visitor.accept(thenExpr);
elseExpr = visitor.accept(elseExpr);
}
@Override
public NodeKind getKind() {
return NodeKind.CONDITIONAL;
}
}
@@ -31,9 +31,4 @@ public class JsContinue extends JsNodeImpl implements JsStatement {
public void acceptChildren(JsVisitor visitor, JsContext context) {
}
@Override
public NodeKind getKind() {
return NodeKind.CONTINUE;
}
}
@@ -8,22 +8,16 @@ package com.google.dart.compiler.backend.js.ast;
* Represents a JavaScript debugger statement.
*/
public class JsDebugger extends JsNodeImpl implements JsStatement {
public JsDebugger() {
}
public JsDebugger() {
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDebugger(this, context);
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDebugger(this, context);
}
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
}
@Override
public NodeKind getKind() {
return NodeKind.DEBUGGER;
}
}
@@ -8,13 +8,8 @@ package com.google.dart.compiler.backend.js.ast;
* Represents the default option in a JavaScript swtich statement.
*/
public final class JsDefault extends JsSwitchMember {
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDefault(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.DEFAULT;
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDefault(this, context);
}
}
@@ -15,11 +15,6 @@ public class JsDoWhile extends JsWhile {
super(condition, body);
}
@Override
public NodeKind getKind() {
return NodeKind.DO;
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDoWhile(this, context);
@@ -22,11 +22,6 @@ public class JsDocComment extends JsExpressionImpl {
tags = Collections.<String, Object>singletonMap(tagName, tagValue);
}
@Override
public NodeKind getKind() {
throw new UnsupportedOperationException();
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitDocComment(this, context);
@@ -16,9 +16,4 @@ public class JsEmpty extends JsNodeImpl implements JsStatement {
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
}
@Override
public NodeKind getKind() {
return NodeKind.EMPTY;
}
}
@@ -25,11 +25,6 @@ public final class JsExpressionStatement extends AbstractNode implements JsState
expression = visitor.accept(expression);
}
@Override
public NodeKind getKind() {
return NodeKind.EXPRESSION_STMT;
}
@Override
public Object getSourceInfo() {
return null;
@@ -95,9 +95,4 @@ public class JsFor extends JsNodeImpl implements JsStatement {
}
body = visitor.accept(body);
}
@Override
public NodeKind getKind() {
return NodeKind.FOR;
}
}
@@ -64,9 +64,4 @@ public class JsForIn extends JsNodeImpl implements JsStatement {
objectExpression = visitor.accept(objectExpression);
body = visitor.accept(body);
}
@Override
public NodeKind getKind() {
return NodeKind.FOR_IN;
}
}
@@ -99,9 +99,4 @@ public final class JsFunction extends JsLiteral implements HasName {
visitor.acceptWithInsertRemove(params);
body = visitor.accept(body);
}
@Override
public NodeKind getKind() {
return NodeKind.FUNCTION;
}
}
@@ -63,9 +63,4 @@ public final class JsIf extends JsNodeImpl implements JsStatement {
elseStatement = visitor.accept(elseStatement);
}
}
@Override
public NodeKind getKind() {
return NodeKind.IF;
}
}
@@ -76,9 +76,4 @@ public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArgument
qualifier = visitor.accept(qualifier);
visitor.acceptList(arguments);
}
@Override
public NodeKind getKind() {
return NodeKind.INVOKE;
}
}
@@ -45,14 +45,9 @@ public class JsLabel extends JsNodeImpl implements JsStatement, HasName {
public void accept(JsVisitor v, JsContext context) {
v.visitLabel(this, context);
}
@Override
public void acceptChildren(JsVisitor visitor, JsContext context) {
statement = visitor.accept(statement);
}
@Override
public NodeKind getKind() {
return NodeKind.LABEL;
public void acceptChildren(JsVisitor visitor, JsContext context) {
statement = visitor.accept(statement);
}
}
@@ -46,11 +46,6 @@ public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEv
public void accept(JsVisitor v, JsContext context) {
v.visitThis(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.THIS;
}
}
public static final class JsBooleanLiteral extends JsValueLiteral {
@@ -89,11 +84,6 @@ public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEv
public void accept(JsVisitor v, JsContext context) {
v.visitBoolean(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.BOOLEAN;
}
}
/**
@@ -104,9 +104,4 @@ public final class JsNameRef extends JsExpressionImpl implements CanBooleanEval,
qualifier = visitor.accept(qualifier);
}
}
@Override
public NodeKind getKind() {
return NodeKind.NAME_REF;
}
}
@@ -51,9 +51,4 @@ public final class JsNew extends JsExpressionImpl.JsExpressionHasArguments {
constructorExpression = visitor.accept(constructorExpression);
visitor.acceptList(arguments);
}
@Override
public NodeKind getKind() {
return NodeKind.NEW;
}
}
@@ -7,8 +7,6 @@ package com.google.dart.compiler.backend.js.ast;
import com.google.dart.compiler.common.HasSourceInfo;
public interface JsNode extends HasSourceInfo {
NodeKind getKind();
/**
* Causes this object to have the visitor visit itself and its children.
*
@@ -32,9 +32,4 @@ public final class JsNullLiteral extends JsLiteral.JsValueLiteral {
public void accept(JsVisitor v, JsContext context) {
v.visitNull(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.NULL;
}
}
@@ -15,11 +15,6 @@ public abstract class JsNumberLiteral extends JsLiteral.JsValueLiteral {
return false;
}
@Override
public NodeKind getKind() {
return NodeKind.NUMBER;
}
public static final class JsDoubleLiteral extends JsNumberLiteral {
public final double value;
@@ -77,9 +77,4 @@ public final class JsObjectLiteral extends JsLiteral {
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.acceptWithInsertRemove(properties);
}
@Override
public NodeKind getKind() {
return NodeKind.OBJECT;
}
}
@@ -35,9 +35,4 @@ public final class JsParameter extends JsNodeImpl implements HasName {
public void acceptChildren(JsVisitor visitor, JsContext context) {
}
@Override
public NodeKind getKind() {
return NodeKind.PARAMETER;
}
}
@@ -31,9 +31,4 @@ public final class JsPostfixOperation extends JsUnaryOperation {
public void accept(JsVisitor v, JsContext context) {
v.visitPostfixOperation(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.POSTFIX_OP;
}
}
@@ -6,52 +6,47 @@ package com.google.dart.compiler.backend.js.ast;
public final class JsPrefixOperation extends JsUnaryOperation implements CanBooleanEval {
public JsPrefixOperation(JsUnaryOperator op) {
this(op, null);
}
public JsPrefixOperation(JsUnaryOperator op, JsExpression arg) {
super(op, arg);
}
@Override
public boolean isBooleanFalse() {
if (getOperator() == JsUnaryOperator.VOID) {
return true;
public JsPrefixOperation(JsUnaryOperator op) {
this(op, null);
}
if (getOperator() == JsUnaryOperator.NOT && getArg() instanceof CanBooleanEval) {
CanBooleanEval eval = (CanBooleanEval) getArg();
return eval.isBooleanTrue();
public JsPrefixOperation(JsUnaryOperator op, JsExpression arg) {
super(op, arg);
}
return false;
}
@Override
public boolean isBooleanTrue() {
if (getOperator() == JsUnaryOperator.NOT && getArg() instanceof CanBooleanEval) {
CanBooleanEval eval = (CanBooleanEval) getArg();
return eval.isBooleanFalse();
@Override
public boolean isBooleanFalse() {
if (getOperator() == JsUnaryOperator.VOID) {
return true;
}
if (getOperator() == JsUnaryOperator.NOT && getArg() instanceof CanBooleanEval) {
CanBooleanEval eval = (CanBooleanEval) getArg();
return eval.isBooleanTrue();
}
return false;
}
return getOperator() == JsUnaryOperator.TYPEOF;
}
@Override
public boolean isDefinitelyNotNull() {
return getOperator() == JsUnaryOperator.TYPEOF || getOperator() != JsUnaryOperator.VOID;
}
@Override
public boolean isBooleanTrue() {
if (getOperator() == JsUnaryOperator.NOT && getArg() instanceof CanBooleanEval) {
CanBooleanEval eval = (CanBooleanEval) getArg();
return eval.isBooleanFalse();
}
return getOperator() == JsUnaryOperator.TYPEOF;
}
@Override
public boolean isDefinitelyNull() {
return getOperator() == JsUnaryOperator.VOID;
}
@Override
public boolean isDefinitelyNotNull() {
return getOperator() == JsUnaryOperator.TYPEOF || getOperator() != JsUnaryOperator.VOID;
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitPrefixOperation(this, context);
}
@Override
public boolean isDefinitelyNull() {
return getOperator() == JsUnaryOperator.VOID;
}
@Override
public NodeKind getKind() {
return NodeKind.PREFIX_OP;
}
@Override
public void accept(JsVisitor v, JsContext context) {
v.visitPrefixOperation(this, context);
}
}
@@ -119,9 +119,4 @@ public final class JsProgram extends JsNodeImpl {
visitor.accept(fragment);
}
}
@Override
public NodeKind getKind() {
return NodeKind.PROGRAM;
}
}
@@ -27,9 +27,4 @@ public class JsProgramFragment extends JsNodeImpl {
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.accept(globalBlock);
}
@Override
public NodeKind getKind() {
return NodeKind.PROGRAM_FRAGMENT;
}
}
@@ -48,9 +48,4 @@ public class JsPropertyInitializer extends JsNodeImpl {
labelExpr = visitor.accept(labelExpr);
valueExpr = visitor.accept(valueExpr);
}
@Override
public NodeKind getKind() {
return NodeKind.PROPERTY_INIT;
}
}
@@ -54,9 +54,4 @@ public final class JsRegExp extends JsLiteral.JsValueLiteral {
public void accept(JsVisitor v, JsContext context) {
v.visitRegExp(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.REGEXP;
}
}
@@ -33,12 +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);
}
}
@Override
public NodeKind getKind() {
return NodeKind.RETURN;
expression = visitor.accept(expression);
}
}
}
@@ -44,9 +44,4 @@ public final class JsStringLiteral extends JsLiteral.JsValueLiteral {
public void accept(JsVisitor v, JsContext context) {
v.visitString(this, context);
}
@Override
public NodeKind getKind() {
return NodeKind.STRING;
}
}
@@ -41,9 +41,4 @@ public class JsSwitch extends JsNodeImpl implements JsStatement {
expr = visitor.accept(expr);
visitor.acceptWithInsertRemove(cases);
}
@Override
public NodeKind getKind() {
return NodeKind.SWITCH;
}
}
@@ -31,9 +31,4 @@ public class JsThrow extends JsNodeImpl implements JsStatement {
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.accept(expression);
}
@Override
public NodeKind getKind() {
return NodeKind.THROW;
}
}
@@ -60,9 +60,4 @@ public class JsTry extends JsNodeImpl implements JsStatement {
finallyBlock = visitor.accept(finallyBlock);
}
}
@Override
public NodeKind getKind() {
return NodeKind.TRY;
}
}
@@ -91,11 +91,6 @@ public class JsVars extends JsNodeImpl implements JsStatement, Iterable<JsVars.J
initExpression = visitor.accept(initExpression);
}
}
@Override
public NodeKind getKind() {
return NodeKind.VAR;
}
}
public void add(JsVar var) {
@@ -126,9 +121,4 @@ public class JsVars extends JsNodeImpl implements JsStatement, Iterable<JsVars.J
public void acceptChildren(JsVisitor visitor, JsContext context) {
visitor.acceptWithInsertRemove(vars);
}
@Override
public NodeKind getKind() {
return NodeKind.VARS;
}
}
@@ -45,9 +45,4 @@ public class JsWhile extends JsNodeImpl implements JsStatement {
condition = visitor.accept(condition);
body = visitor.accept(body);
}
@Override
public NodeKind getKind() {
return NodeKind.WHILE;
}
}
}
@@ -1,50 +0,0 @@
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.google.dart.compiler.backend.js.ast;
enum NodeKind {
ARRAY_ACCESS,
ARRAY,
BINARY_OP,
BLOCK,
BOOLEAN,
BREAK,
CASE,
CATCH,
CONDITIONAL,
CONTINUE,
DEBUGGER,
DEFAULT,
DO,
EMPTY,
EXPRESSION_STMT,
FOR,
FOR_IN,
FUNCTION,
IF,
INVOKE,
LABEL,
NAME_REF,
NEW,
NULL,
NUMBER,
OBJECT,
PARAMETER,
POSTFIX_OP,
PREFIX_OP,
PROGRAM,
PROGRAM_FRAGMENT,
PROPERTY_INIT,
REGEXP,
RETURN,
STRING,
SWITCH,
THIS,
THROW,
TRY,
VARS,
VAR,
WHILE
}