Chromium Code Reviews| Index: pkg/analyzer/lib/src/generated/constant.dart |
| diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart |
| index 24125064171085e4cfad5f3679f3da5839bd62cb..9f8e6bf56058a186b2ac276a36fac242f0c2340b 100644 |
| --- a/pkg/analyzer/lib/src/generated/constant.dart |
| +++ b/pkg/analyzer/lib/src/generated/constant.dart |
| @@ -1533,7 +1533,9 @@ class ConstantVisitor extends UnifyingAstVisitor<DartObjectImpl> { |
| DartObjectImpl rightResult = node.rightOperand.accept(this); |
| TokenType operatorType = node.operator.type; |
| // 'null' is almost never good operand |
| - if (operatorType != TokenType.BANG_EQ && operatorType != TokenType.EQ_EQ) { |
| + if (operatorType != TokenType.BANG_EQ && |
| + operatorType != TokenType.EQ_EQ && |
| + operatorType != TokenType.QUESTION_QUESTION) { |
| if (leftResult != null && leftResult.isNull || |
| rightResult != null && rightResult.isNull) { |
| _error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION); |
| @@ -1582,6 +1584,8 @@ class ConstantVisitor extends UnifyingAstVisitor<DartObjectImpl> { |
| return _dartObjectComputer.divide(node, leftResult, rightResult); |
| } else if (operatorType == TokenType.TILDE_SLASH) { |
| return _dartObjectComputer.integerDivide(node, leftResult, rightResult); |
| + } else if (operatorType == TokenType.QUESTION_QUESTION) { |
| + return _dartObjectComputer.questionQuestion(node, leftResult, rightResult); |
|
floitsch
2015/12/02 20:59:26
long line
Lasse Reichstein Nielsen
2015/12/04 12:11:46
Done.
|
| } else { |
| // TODO(brianwilkerson) Figure out which error to report. |
| _error(node, null); |
| @@ -2295,6 +2299,15 @@ class DartObjectComputer { |
| return null; |
| } |
| + DartObjectImpl questionQuestion(Expression node, DartObjectImpl leftOperand, |
| + DartObjectImpl rightOperand) { |
| + if (leftOperand != null && rightOperand != null) { |
| + if (leftOperand.isNull) return rightOperand; |
| + return leftOperand; |
| + } |
| + return null; |
| + } |
| + |
| DartObjectImpl greaterThan(BinaryExpression node, DartObjectImpl leftOperand, |
| DartObjectImpl rightOperand) { |
| if (leftOperand != null && rightOperand != null) { |