anchor.diff:          listener.handleNativeFunctionBodySkipped(nativeToken, next);
           return token.next;
         }
  -      token = next;
  -      listener.handleNativeFunctionBodyIgnored(nativeToken, token);
  +      listener.handleNativeFunctionBodyIgnored(nativeToken, next);
         // Fall through to recover and skip function body
  -    } else {
  -      token = next;
  -    }
  +    }
  +    token = next;
       String value = token.stringValue;
       if (identical(value, ';')) {
         if (!allowAbstract) {
  
positive.code:             listener.endBinaryExpression(operator);
            } else if ((identical(type, TokenType.OPEN_PAREN)) ||
                (identical(type, TokenType.OPEN_SQUARE_BRACKET))) {
              // TODO(brianwilkerson): Remove the invocation of `previous` when
              // `parseArgumentOrIndexStar` returns the last consumed token.
              token =
                  parseArgumentOrIndexStar(token.next, typeArguments).previous;
              next = token.next;
            } else if ((identical(type, TokenType.PLUS_PLUS)) ||
                (identical(type, TokenType.MINUS_MINUS))) {
  
negative.code:           if (!allowCascades) {
              return token;
            }
            token = parseCascadeExpression(token);
          } else if (identical(tokenLevel, ASSIGNMENT_PRECEDENCE)) {
            // Right associative, so we recurse at the same precedence
            // level.
  