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) { |