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 a56197896785725423da2add3721501023f16a5c..c1da79408d90be49b8ce1ae94e9299471e7d4858 100644 |
| --- a/pkg/analyzer/lib/src/generated/constant.dart |
| +++ b/pkg/analyzer/lib/src/generated/constant.dart |
| @@ -1616,7 +1616,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); |
| @@ -1665,6 +1667,9 @@ 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); |
| } else { |
| // TODO(brianwilkerson) Figure out which error to report. |
| _error(node, null); |
| @@ -2307,6 +2312,15 @@ class DartObjectComputer { |
| return null; |
| } |
| + DartObjectImpl questionQuestion(Expression node, DartObjectImpl leftOperand, |
| + DartObjectImpl rightOperand) { |
| + if (leftOperand != null && rightOperand != null) { |
| + if (leftOperand.isNull) return rightOperand; |
|
Brian Wilkerson
2016/01/14 14:55:26
nit: As a matter of style, we always use blocks in
Lasse Reichstein Nielsen
2016/01/15 07:11:51
Consider it done.
|
| + return leftOperand; |
| + } |
| + return null; |
| + } |
| + |
| DartObjectImpl greaterThan(BinaryExpression node, DartObjectImpl leftOperand, |
| DartObjectImpl rightOperand) { |
| if (leftOperand != null && rightOperand != null) { |