| Index: runtime/vm/ast.cc
|
| diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
|
| index 48bd0534e0b425094f3e700caaeeb38ae81486c7..6ce0703e7141d3324c69b5b5dd24acc24e350578 100644
|
| --- a/runtime/vm/ast.cc
|
| +++ b/runtime/vm/ast.cc
|
| @@ -312,6 +312,7 @@ bool BinaryOpNode::IsPotentiallyConst() const {
|
| case Token::kBIT_AND:
|
| case Token::kSHL:
|
| case Token::kSHR:
|
| + case Token::kIFNULL:
|
| return this->left()->IsPotentiallyConst() &&
|
| this->right()->IsPotentiallyConst();
|
| default:
|
| @@ -326,7 +327,8 @@ const Instance* BinaryOpNode::EvalConstExpr() const {
|
| if (left_val == NULL) {
|
| return NULL;
|
| }
|
| - if (!left_val->IsNumber() && !left_val->IsBool() && !left_val->IsString()) {
|
| + if (!left_val->IsNumber() && !left_val->IsBool() && !left_val->IsString() &&
|
| + kind_ != Token::kIFNULL) {
|
| return NULL;
|
| }
|
| const Instance* right_val = this->right()->EvalConstExpr();
|
| @@ -371,6 +373,9 @@ const Instance* BinaryOpNode::EvalConstExpr() const {
|
| return left_val;
|
| }
|
| return NULL;
|
| + case Token::kIFNULL:
|
| + if (left_val->IsNull()) return right_val;
|
| + return left_val;
|
| default:
|
| UNREACHABLE();
|
| return NULL;
|
|
|