simplify AST
This commit is contained in:
@@ -1,13 +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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An interface that describes the boolean evaluation of an expression.
|
|
||||||
*/
|
|
||||||
public interface CanBooleanEval {
|
|
||||||
boolean isBooleanFalse();
|
|
||||||
boolean isBooleanTrue();
|
|
||||||
}
|
|
||||||
@@ -14,21 +14,6 @@ public class ChameleonJsExpression implements JsExpression {
|
|||||||
this.expression = expression;
|
this.expression = expression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return expression.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return expression.isDefinitelyNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return expression.isDefinitelyNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLeaf() {
|
public boolean isLeaf() {
|
||||||
return expression.isLeaf();
|
return expression.isLeaf();
|
||||||
|
|||||||
@@ -28,21 +28,6 @@ public final class JsArrayAccess extends JsExpressionImpl {
|
|||||||
return indexExpression;
|
return indexExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return arrayExpression.hasSideEffects() || indexExpression.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setArrayExpression(JsExpression arrayExpression) {
|
public void setArrayExpression(JsExpression arrayExpression) {
|
||||||
this.arrayExpression = arrayExpression;
|
this.arrayExpression = arrayExpression;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,36 +26,6 @@ public final class JsArrayLiteral extends JsLiteral {
|
|||||||
return expressions;
|
return expressions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
for (JsExpression expr : expressions) {
|
|
||||||
if (expr.hasSideEffects()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitArray(this, context);
|
v.visitArray(this, context);
|
||||||
|
|||||||
@@ -33,38 +33,6 @@ public final class JsBinaryOperation extends JsExpressionImpl {
|
|||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return op.isAssignment() || arg1.hasSideEffects() || arg2.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
// Precarious coding, but none of these can have null results.
|
|
||||||
if (op.getPrecedence() > 5) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (op == JsBinaryOperator.OR) {
|
|
||||||
if (arg1 instanceof CanBooleanEval) {
|
|
||||||
if (((CanBooleanEval) arg1).isBooleanTrue()) {
|
|
||||||
assert arg1.isDefinitelyNotNull();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// AND and OR can return nulls
|
|
||||||
if (op.isAssignment()) {
|
|
||||||
return op != JsBinaryOperator.ASG || arg2.isDefinitelyNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
return op == JsBinaryOperator.COMMA && arg2.isDefinitelyNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return op == JsBinaryOperator.AND && arg1.isDefinitelyNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitBinaryExpression(this, context);
|
v.visitBinaryExpression(this, context);
|
||||||
|
|||||||
@@ -30,21 +30,6 @@ public final class JsConditional extends JsExpressionImpl {
|
|||||||
return thenExpression;
|
return thenExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return testExpression.hasSideEffects() || thenExpression.hasSideEffects() || elseExpression.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return thenExpression.isDefinitelyNotNull() && elseExpression.isDefinitelyNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return thenExpression.isDefinitelyNull() && elseExpression.isDefinitelyNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setElseExpression(JsExpression elseExpression) {
|
public void setElseExpression(JsExpression elseExpression) {
|
||||||
this.elseExpression = elseExpression;
|
this.elseExpression = elseExpression;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,19 +26,4 @@ public class JsDocComment extends JsExpressionImpl {
|
|||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitDocComment(this, context);
|
v.visitDocComment(this, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,21 +3,6 @@ package com.google.dart.compiler.backend.js.ast;
|
|||||||
import com.google.dart.compiler.common.HasSourceInfo;
|
import com.google.dart.compiler.common.HasSourceInfo;
|
||||||
|
|
||||||
public interface JsExpression extends JsNode, HasSourceInfo {
|
public interface JsExpression extends JsNode, HasSourceInfo {
|
||||||
/**
|
|
||||||
* Determines whether the expression can cause side effects.
|
|
||||||
*/
|
|
||||||
boolean hasSideEffects();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* True if the target expression is definitely not null.
|
|
||||||
*/
|
|
||||||
boolean isDefinitelyNotNull();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* True if the target expression is definitely null.
|
|
||||||
*/
|
|
||||||
boolean isDefinitelyNull();
|
|
||||||
|
|
||||||
boolean isLeaf();
|
boolean isLeaf();
|
||||||
|
|
||||||
JsStatement makeStmt();
|
JsStatement makeStmt();
|
||||||
|
|||||||
@@ -55,32 +55,6 @@ public final class JsFunction extends JsLiteral implements HasName {
|
|||||||
return scope;
|
return scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
// If there's a name, the name is assigned to.
|
|
||||||
return name != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBody(JsBlock body) {
|
public void setBody(JsBlock body) {
|
||||||
this.body = body;
|
this.body = body;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,21 +47,6 @@ public final class JsInvocation extends JsExpressionImpl.JsExpressionHasArgument
|
|||||||
return qualifier;
|
return qualifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setQualifier(JsExpression qualifier) {
|
public void setQualifier(JsExpression qualifier) {
|
||||||
this.qualifier = qualifier;
|
this.qualifier = qualifier;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package com.google.dart.compiler.backend.js.ast;
|
package com.google.dart.compiler.backend.js.ast;
|
||||||
|
|
||||||
public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEval {
|
public abstract class JsLiteral extends JsExpressionImpl {
|
||||||
public static final JsValueLiteral THIS = new JsThisRef();
|
public static final JsValueLiteral THIS = new JsThisRef();
|
||||||
public static final JsNameRef UNDEFINED = new JsNameRef("undefined");
|
public static final JsNameRef UNDEFINED = new JsNameRef("undefined");
|
||||||
|
|
||||||
@@ -22,26 +22,6 @@ public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEv
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitThis(this, context);
|
v.visitThis(this, context);
|
||||||
@@ -60,26 +40,6 @@ public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEv
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return !value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitBoolean(this, context);
|
v.visitBoolean(this, context);
|
||||||
@@ -93,11 +53,6 @@ public abstract class JsLiteral extends JsExpressionImpl implements CanBooleanEv
|
|||||||
protected JsValueLiteral() {
|
protected JsValueLiteral() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final boolean hasSideEffects() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isLeaf() {
|
public final boolean isLeaf() {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import com.google.dart.compiler.common.Symbol;
|
|||||||
/**
|
/**
|
||||||
* Represents a JavaScript expression that references a name.
|
* Represents a JavaScript expression that references a name.
|
||||||
*/
|
*/
|
||||||
public final class JsNameRef extends JsExpressionImpl implements CanBooleanEval, HasName {
|
public final class JsNameRef extends JsExpressionImpl implements HasName {
|
||||||
private String ident;
|
private String ident;
|
||||||
private JsName name;
|
private JsName name;
|
||||||
private JsExpression qualifier;
|
private JsExpression qualifier;
|
||||||
@@ -54,31 +54,6 @@ public final class JsNameRef extends JsExpressionImpl implements CanBooleanEval,
|
|||||||
return qualifier;
|
return qualifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return qualifier != null && (!qualifier.isDefinitelyNotNull() || qualifier.hasSideEffects());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return isDefinitelyNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return name != null && (JsLiteral.UNDEFINED.getName() == name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLeaf() {
|
public boolean isLeaf() {
|
||||||
return qualifier == null;
|
return qualifier == null;
|
||||||
|
|||||||
@@ -24,23 +24,6 @@ public final class JsNew extends JsExpressionImpl.JsExpressionHasArguments {
|
|||||||
return constructorExpression;
|
return constructorExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
// Sadly, in JS it can be!
|
|
||||||
// TODO: analysis could probably determine most instances cannot be null.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitNew(this, context);
|
v.visitNew(this, context);
|
||||||
|
|||||||
@@ -8,26 +8,6 @@ public final class JsNullLiteral extends JsLiteral.JsValueLiteral {
|
|||||||
JsNullLiteral() {
|
JsNullLiteral() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitNull(this, context);
|
v.visitNull(this, context);
|
||||||
|
|||||||
@@ -5,16 +5,6 @@
|
|||||||
package com.google.dart.compiler.backend.js.ast;
|
package com.google.dart.compiler.backend.js.ast;
|
||||||
|
|
||||||
public abstract class JsNumberLiteral extends JsLiteral.JsValueLiteral {
|
public abstract class JsNumberLiteral extends JsLiteral.JsValueLiteral {
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class JsDoubleLiteral extends JsNumberLiteral {
|
public static final class JsDoubleLiteral extends JsNumberLiteral {
|
||||||
public final double value;
|
public final double value;
|
||||||
|
|
||||||
@@ -22,16 +12,6 @@ public abstract class JsNumberLiteral extends JsLiteral.JsValueLiteral {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return value == 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return value != 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitDouble(this, context);
|
v.visitDouble(this, context);
|
||||||
@@ -49,16 +29,6 @@ public abstract class JsNumberLiteral extends JsLiteral.JsValueLiteral {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return value == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return value != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitInt(this, context);
|
v.visitInt(this, context);
|
||||||
|
|||||||
@@ -38,36 +38,6 @@ public final class JsObjectLiteral extends JsLiteral {
|
|||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
for (JsPropertyInitializer prop : properties) {
|
|
||||||
if (prop.hasSideEffects()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitObjectLiteral(this, context);
|
v.visitObjectLiteral(this, context);
|
||||||
|
|||||||
@@ -13,16 +13,6 @@ public final class JsPostfixOperation extends JsUnaryOperation {
|
|||||||
super(op, arg);
|
super(op, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitPostfixOperation(this, context);
|
v.visitPostfixOperation(this, context);
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
package com.google.dart.compiler.backend.js.ast;
|
package com.google.dart.compiler.backend.js.ast;
|
||||||
|
|
||||||
public final class JsPrefixOperation extends JsUnaryOperation implements CanBooleanEval {
|
public final class JsPrefixOperation extends JsUnaryOperation {
|
||||||
|
|
||||||
public JsPrefixOperation(JsUnaryOperator op) {
|
public JsPrefixOperation(JsUnaryOperator op) {
|
||||||
this(op, null);
|
this(op, null);
|
||||||
}
|
}
|
||||||
@@ -14,37 +13,6 @@ public final class JsPrefixOperation extends JsUnaryOperation implements CanBool
|
|||||||
super(op, arg);
|
super(op, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 isDefinitelyNotNull() {
|
|
||||||
return getOperator() == JsUnaryOperator.TYPEOF || getOperator() != JsUnaryOperator.VOID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return getOperator() == JsUnaryOperator.VOID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitPrefixOperation(this, context);
|
v.visitPrefixOperation(this, context);
|
||||||
|
|||||||
@@ -30,10 +30,6 @@ public class JsPropertyInitializer extends SourceInfoAwareJsNode {
|
|||||||
return valueExpr;
|
return valueExpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasSideEffects() {
|
|
||||||
return labelExpr.hasSideEffects() || valueExpr.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValueExpr(@NotNull JsExpression valueExpr) {
|
public void setValueExpr(@NotNull JsExpression valueExpr) {
|
||||||
this.valueExpr = valueExpr;
|
this.valueExpr = valueExpr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,26 +22,6 @@ public final class JsRegExp extends JsLiteral.JsValueLiteral {
|
|||||||
return pattern;
|
return pattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFlags(String suffix) {
|
public void setFlags(String suffix) {
|
||||||
flags = suffix;
|
flags = suffix;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,6 @@
|
|||||||
|
|
||||||
package com.google.dart.compiler.backend.js.ast;
|
package com.google.dart.compiler.backend.js.ast;
|
||||||
|
|
||||||
/**
|
|
||||||
* A JavaScript string literal expression.
|
|
||||||
*/
|
|
||||||
public final class JsStringLiteral extends JsLiteral.JsValueLiteral {
|
public final class JsStringLiteral extends JsLiteral.JsValueLiteral {
|
||||||
|
|
||||||
private final String value;
|
private final String value;
|
||||||
@@ -20,26 +17,6 @@ public final class JsStringLiteral extends JsLiteral.JsValueLiteral {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanFalse() {
|
|
||||||
return value.length() == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBooleanTrue() {
|
|
||||||
return value.length() != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNotNull() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDefinitelyNull() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(JsVisitor v, JsContext context) {
|
public void accept(JsVisitor v, JsContext context) {
|
||||||
v.visitString(this, context);
|
v.visitString(this, context);
|
||||||
|
|||||||
@@ -28,11 +28,6 @@ public abstract class JsUnaryOperation extends JsExpressionImpl {
|
|||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final boolean hasSideEffects() {
|
|
||||||
return op.isModifying() || arg.hasSideEffects();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setArg(JsExpression arg) {
|
public void setArg(JsExpression arg) {
|
||||||
this.arg = arg;
|
this.arg = arg;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user