[js_runtime] NullError always reports as a failed null check

Bug: b/244438673
Change-Id: Iaccfe428b4db2a8d0f910d5028aed77ac5d5ea80
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/306912
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
This commit is contained in:
Stephen Adams 2023-09-01 00:05:09 +00:00 committed by Commit Queue
parent 4038b4f9df
commit 42fbb693f3
3 changed files with 12 additions and 16 deletions

View file

@ -1599,14 +1599,11 @@ class TypeErrorDecoder {
class NullError extends TypeError implements NoSuchMethodError {
final String _message;
final String? _method;
NullError(this._message, match)
: _method = match == null ? null : JS('', '#.method', match);
NullError(this._message);
String toString() {
if (_method == null) return 'NoSuchMethodError: $_message';
return "NoSuchMethodError: method not found: '$_method' on null";
return 'Null check operator used on a null value';
}
}
@ -1727,8 +1724,7 @@ Object _unwrapNonDartException(Object ex) {
ex, JsNoSuchMethodError('$message (Error $ieErrorCode)', null));
case 445:
case 5007:
return saveStackTrace(
ex, NullError('$message (Error $ieErrorCode)', null));
return saveStackTrace(ex, NullError('$message (Error $ieErrorCode)'));
}
}
}
@ -1762,7 +1758,7 @@ Object _unwrapNonDartException(Object ex) {
(match = nullLiteralCall.matchTypeError(message)) != null ||
(match = undefProperty.matchTypeError(message)) != null ||
(match = undefLiteralProperty.matchTypeError(message)) != null) {
return saveStackTrace(ex, NullError(message, match));
return saveStackTrace(ex, NullError(message));
}
// If we cannot determine what kind of error this is, we fall back

View file

@ -94,8 +94,8 @@ test2() {
gA = null;
gB = null;
Expect.throws(call2a, checkNSME(r'$and'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'$xor'), 'foo2($gA, $gB) NSME');
Expect.throws(call2a, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
gA = 1;
gB = null;
@ -104,8 +104,8 @@ test2() {
gA = null;
gB = 2;
Expect.throws(call2a, checkNSME(r'$and'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'$xor'), 'foo2($gA, $gB) NSME');
Expect.throws(call2a, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
}
main() {

View file

@ -96,8 +96,8 @@ test2() {
gA = null;
gB = null;
Expect.throws(call2a, checkNSME(r'$and'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'$xor'), 'foo2($gA, $gB) NSME');
Expect.throws(call2a, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
gA = 1;
gB = null;
@ -106,8 +106,8 @@ test2() {
gA = null;
gB = 2;
Expect.throws(call2a, checkNSME(r'$and'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'$xor'), 'foo2($gA, $gB) NSME');
Expect.throws(call2a, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
Expect.throws(call2b, checkNSME(r'Null check'), 'foo2($gA, $gB) NSME');
}
main() {