mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 12:57:42 +00:00
[cfe] Handle function calls and null shorting on record types
Closes #50135 Change-Id: If25f01cf1c1749d48c05550df7de8bb381cbb245 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/265740 Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
37be66028b
commit
b11dc51c0d
|
@ -6148,46 +6148,37 @@ class InferenceVisitorImpl extends InferenceVisitorBase
|
|||
|
||||
ExpressionInferenceResult visitPropertyGet(
|
||||
PropertyGet node, DartType typeContext) {
|
||||
ExpressionInferenceResult result =
|
||||
ExpressionInferenceResult receiverResult =
|
||||
inferNullAwareExpression(node.receiver, const UnknownType(), true);
|
||||
|
||||
Link<NullAwareGuard> nullAwareGuards = result.nullAwareGuards;
|
||||
Expression receiver = result.nullAwareAction;
|
||||
DartType receiverType = result.nullAwareActionType;
|
||||
Link<NullAwareGuard> nullAwareGuards = receiverResult.nullAwareGuards;
|
||||
Expression receiver = receiverResult.nullAwareAction;
|
||||
DartType receiverType = receiverResult.nullAwareActionType;
|
||||
|
||||
node.receiver = receiver..parent = node;
|
||||
|
||||
DartType recordType = resolveTypeParameter(receiverType);
|
||||
if (recordType is RecordType) {
|
||||
// TODO(johnniwinther): Handle nullable record types and null shorting.
|
||||
String name = node.name.text;
|
||||
if (name.startsWith('\$')) {
|
||||
int? index = int.tryParse(name.substring(1));
|
||||
if (index != null) {
|
||||
if (index < recordType.positional.length) {
|
||||
DartType fieldType = recordType.positional[index];
|
||||
return new ExpressionInferenceResult(
|
||||
fieldType,
|
||||
new RecordIndexGet(receiver, recordType, index)
|
||||
..fileOffset = node.fileOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (NamedType field in recordType.named) {
|
||||
if (field.name == name) {
|
||||
return new ExpressionInferenceResult(
|
||||
field.type,
|
||||
new RecordNameGet(receiver, recordType, name)
|
||||
..fileOffset = node.fileOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
ExpressionInferenceResult? recordFieldAccessResult =
|
||||
resolveRecordFieldAccess(
|
||||
receiver, receiverType, node.name, node.fileOffset);
|
||||
|
||||
PropertyGetInferenceResult propertyGetInferenceResult = _computePropertyGet(
|
||||
node.fileOffset, receiver, receiverType, node.name, typeContext,
|
||||
isThisReceiver: node.receiver is ThisExpression, propertyGetNode: node);
|
||||
ExpressionInferenceResult readResult =
|
||||
propertyGetInferenceResult.expressionInferenceResult;
|
||||
ExpressionInferenceResult readResult;
|
||||
if (recordFieldAccessResult != null) {
|
||||
readResult = recordFieldAccessResult;
|
||||
// TODO(johnniwinther,paulberry): Should we call
|
||||
// `flowAnalysis.propertyGet` for record field access?
|
||||
} else {
|
||||
PropertyGetInferenceResult propertyGetInferenceResult =
|
||||
_computePropertyGet(
|
||||
node.fileOffset, receiver, receiverType, node.name, typeContext,
|
||||
isThisReceiver: node.receiver is ThisExpression,
|
||||
propertyGetNode: node);
|
||||
readResult = propertyGetInferenceResult.expressionInferenceResult;
|
||||
// TODO(johnniwinther,paulberry): Should the we pass the resulting node
|
||||
// as the "whole-expression" instead of [node] ? (We do this for field
|
||||
// invocation).
|
||||
flowAnalysis.propertyGet(node, node.receiver, node.name.text,
|
||||
propertyGetInferenceResult.member, readResult.inferredType);
|
||||
}
|
||||
ExpressionInferenceResult expressionInferenceResult =
|
||||
createNullAwareExpressionInferenceResult(
|
||||
readResult.inferredType, readResult.expression, nullAwareGuards);
|
||||
|
|
|
@ -3187,6 +3187,26 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
// ignore: unnecessary_null_comparison
|
||||
assert(isImplicitCall != null);
|
||||
|
||||
ExpressionInferenceResult? recordFieldAccessResult =
|
||||
resolveRecordFieldAccess(receiver, receiverType, name, fileOffset);
|
||||
if (recordFieldAccessResult != null) {
|
||||
// TODO(johnniwinther,paulberry): Should we call
|
||||
// `flowAnalysis.propertyGet` for record field access?
|
||||
// This is a record field access followed by a function invocation.
|
||||
return inferMethodInvocation(
|
||||
visitor,
|
||||
arguments.fileOffset,
|
||||
nullAwareGuards,
|
||||
recordFieldAccessResult.expression,
|
||||
recordFieldAccessResult.inferredType,
|
||||
callName,
|
||||
arguments,
|
||||
typeContext,
|
||||
isExpressionInvocation: false,
|
||||
isImplicitCall: true,
|
||||
hoistedExpressions: hoistedExpressions);
|
||||
}
|
||||
|
||||
target ??= findInterfaceMember(receiverType, name, fileOffset,
|
||||
instrumented: true,
|
||||
includeExtensionMethods: true,
|
||||
|
@ -4095,6 +4115,55 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
length);
|
||||
}
|
||||
|
||||
/// Resolve access of [name] on [receiver] with the given receiver type, if
|
||||
/// it is either an indexed or named record access, and returns the
|
||||
/// corresponding [ExpressionInferenceResult]. Otherwise returns `null`.
|
||||
ExpressionInferenceResult? resolveRecordFieldAccess(
|
||||
Expression receiver, DartType receiverType, Name name, int fileOffset) {
|
||||
ExpressionInferenceResult? result;
|
||||
DartType recordType = resolveTypeParameter(receiverType);
|
||||
if (recordType is RecordType) {
|
||||
// TODO(johnniwinther): Handle nullable record types and null shorting.
|
||||
String text = name.text;
|
||||
if (text.startsWith('\$')) {
|
||||
int? index = int.tryParse(text.substring(1));
|
||||
if (index != null) {
|
||||
if (index < recordType.positional.length) {
|
||||
DartType fieldType = recordType.positional[index];
|
||||
result = new ExpressionInferenceResult(
|
||||
fieldType,
|
||||
new RecordIndexGet(receiver, recordType, index)
|
||||
..fileOffset = fileOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
for (NamedType field in recordType.named) {
|
||||
if (field.name == text) {
|
||||
result = new ExpressionInferenceResult(
|
||||
field.type,
|
||||
new RecordNameGet(receiver, recordType, text)
|
||||
..fileOffset = fileOffset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result != null && !isTopLevel && receiverType.isPotentiallyNullable) {
|
||||
result = wrapExpressionInferenceResultInProblem(
|
||||
result,
|
||||
templateNullablePropertyAccessError.withArguments(
|
||||
name.text, receiverType, isNonNullableByDefault),
|
||||
fileOffset,
|
||||
name.text.length,
|
||||
context: getWhyNotPromotedContext(
|
||||
flowAnalysis.whyNotPromoted(receiver)(),
|
||||
result.expression,
|
||||
(type) => !type.isPotentiallyNullable));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// The client of type inference should call this method after asking
|
||||
/// inference to visit a node. This performs assertions to make sure that
|
||||
/// temporary type inference state has been properly cleaned up.
|
||||
|
|
15
pkg/front_end/testcases/records/issue50135.dart
Normal file
15
pkg/front_end/testcases/records/issue50135.dart
Normal file
|
@ -0,0 +1,15 @@
|
|||
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
void foo() => print('foo');
|
||||
|
||||
class Bar {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
main() {
|
||||
var r = (foo, Bar());
|
||||
r.$0();
|
||||
r.$1();
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
static method foo() → void
|
||||
return core::print("foo");
|
||||
static method main() → dynamic {
|
||||
(() → void, self::Bar) r = (#C1, new self::Bar::•());
|
||||
r.$0{() → void}(){() → void};
|
||||
r.$1{self::Bar}.{self::Bar::call}(){() → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = static-tearoff self::foo
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
static method foo() → void
|
||||
return core::print("foo");
|
||||
static method main() → dynamic {
|
||||
(() → void, self::Bar) r = (#C1, new self::Bar::•());
|
||||
r.$0{() → void}(){() → void};
|
||||
r.$1{self::Bar}.{self::Bar::call}(){() → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = static-tearoff self::foo
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
void foo() => print('foo');
|
||||
|
||||
class Bar {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,6 @@
|
|||
class Bar {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
main() {}
|
||||
void foo() => print('foo');
|
21
pkg/front_end/testcases/records/issue50135.dart.weak.expect
Normal file
21
pkg/front_end/testcases/records/issue50135.dart.weak.expect
Normal file
|
@ -0,0 +1,21 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
static method foo() → void
|
||||
return core::print("foo");
|
||||
static method main() → dynamic {
|
||||
(() → void, self::Bar) r = (#C1, new self::Bar::•());
|
||||
r.$0{() → void}(){() → void};
|
||||
r.$1{self::Bar}.{self::Bar::call}(){() → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = static-tearoff self::foo
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
static method foo() → void
|
||||
return core::print("foo");
|
||||
static method main() → dynamic {
|
||||
(() → void, self::Bar) r = (#C1, new self::Bar::•());
|
||||
r.$0{() → void}(){() → void};
|
||||
r.$1{self::Bar}.{self::Bar::call}(){() → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = static-tearoff self::foo
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
;
|
||||
method call() → void
|
||||
;
|
||||
}
|
||||
static method foo() → void
|
||||
;
|
||||
static method main() → dynamic
|
||||
;
|
|
@ -0,0 +1,21 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Bar extends core::Object {
|
||||
synthetic constructor •() → self::Bar
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
static method foo() → void
|
||||
return core::print("foo");
|
||||
static method main() → dynamic {
|
||||
(() → void, self::Bar) r = (#C1, new self::Bar::•());
|
||||
r.$0{() → void}(){() → void};
|
||||
r.$1{self::Bar}.{self::Bar::call}(){() → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = static-tearoff self::foo
|
||||
}
|
67
pkg/front_end/testcases/records/null_shorting.dart
Normal file
67
pkg/front_end/testcases/records/null_shorting.dart
Normal file
|
@ -0,0 +1,67 @@
|
|||
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
test((int, String, {double d, void Function() f, Class c})? record,
|
||||
List<(int, String, {double d, void Function() f, Class c})>? list) {
|
||||
record.$0; // Error
|
||||
record.$1; // Error
|
||||
record.d; // Error
|
||||
record.f; // Error
|
||||
record.c; // Error
|
||||
record.$0(); // Error
|
||||
record.$1(); // Error
|
||||
record.d(); // Error
|
||||
record.f(); // Error
|
||||
record.c(); // Error
|
||||
|
||||
record?.$0; // Ok
|
||||
record?.$1; // Ok
|
||||
record?.d; // Ok
|
||||
record?.f; // Ok
|
||||
record?.c; // Ok
|
||||
record?.$0(); // Ok
|
||||
record?.$1(); // Ok
|
||||
record?.d(); // Ok
|
||||
record?.f(); // Ok
|
||||
record?.c(); // Ok
|
||||
|
||||
record?.$0.isEven; // Ok
|
||||
record?.$1.length; // Ok
|
||||
record?.d.isNaN; // Ok
|
||||
record?.f.call; // Ok
|
||||
record?.c.call; // Ok
|
||||
|
||||
list?.first.$0; // Ok
|
||||
list?.first.$1; // Ok
|
||||
list?.first.d; // Ok
|
||||
list?.first.f; // Ok
|
||||
list?.first.c; // Ok
|
||||
list?.first.$0(); // Ok
|
||||
list?.first.$1(); // Ok
|
||||
list?.first.d(); // Ok
|
||||
list?.first.f(); // Ok
|
||||
list?.first.c(); // Ok
|
||||
|
||||
list?.first.$0.isEven; // Ok
|
||||
list?.first.$1.length; // Ok
|
||||
list?.first.d.isNaN; // Ok
|
||||
list?.first.f.call; // Ok
|
||||
list?.first.c.call; // Ok
|
||||
}
|
||||
|
||||
extension on int {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
extension on String {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
extension on double {
|
||||
void call() {}
|
||||
}
|
||||
|
||||
class Class {
|
||||
void call() {}
|
||||
}
|
176
pkg/front_end/testcases/records/null_shorting.dart.strong.expect
Normal file
176
pkg/front_end/testcases/records/null_shorting.dart.strong.expect
Normal file
|
@ -0,0 +1,176 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c(); // Error
|
||||
// ^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic {
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0; // Error
|
||||
^^" in record.$0{core::int};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1; // Error
|
||||
^^" in record.$1{core::String};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d; // Error
|
||||
^" in record.d{core::double};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f; // Error
|
||||
^" in record.f{() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c; // Error
|
||||
^" in record.c{self::Class};
|
||||
self::_extension#0|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0(); // Error
|
||||
^^" in record.$0{core::int});
|
||||
self::_extension#1|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1(); // Error
|
||||
^^" in record.$1{core::String});
|
||||
self::_extension#2|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d(); // Error
|
||||
^" in record.d{core::double});
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f(); // Error
|
||||
^" in record.f{() → void}(){() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c(); // Error
|
||||
^" in record.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t1 = record in #t1 == null ?{core::int?} null : #t1{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t2 = record in #t2 == null ?{core::String?} null : #t2{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t3 = record in #t3 == null ?{core::double?} null : #t3{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t4 = record in #t4 == null ?{() →? void} null : #t4{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t5 = record in #t5 == null ?{self::Class?} null : #t5{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t6 = record in #t6 == null ?{void} null : self::_extension#0|call(#t6{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t7 = record in #t7 == null ?{void} null : self::_extension#1|call(#t7{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t8 = record in #t8 == null ?{void} null : self::_extension#2|call(#t8{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t9 = record in #t9 == null ?{void} null : #t9{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t10 = record in #t10 == null ?{void} null : #t10{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t11 = record in #t11 == null ?{core::bool?} null : #t11{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t12 = record in #t12 == null ?{core::int?} null : #t12{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t13 = record in #t13 == null ?{core::bool?} null : #t13{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t14 = record in #t14 == null ?{() →? void} null : #t14{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t15 = record in #t15 == null ?{() →? void} null : #t15{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t16 = list in #t16 == null ?{core::int?} null : #t16{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t17 = list in #t17 == null ?{core::String?} null : #t17{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t18 = list in #t18 == null ?{core::double?} null : #t18{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t19 = list in #t19 == null ?{() →? void} null : #t19{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t20 = list in #t20 == null ?{self::Class?} null : #t20{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t21 = list in #t21 == null ?{void} null : self::_extension#0|call(#t21{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t22 = list in #t22 == null ?{void} null : self::_extension#1|call(#t22{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t23 = list in #t23 == null ?{void} null : self::_extension#2|call(#t23{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t24 = list in #t24 == null ?{void} null : #t24{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t25 = list in #t25 == null ?{void} null : #t25{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t26 = list in #t26 == null ?{core::bool?} null : #t26{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t27 = list in #t27 == null ?{core::int?} null : #t27{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t28 = list in #t28 == null ?{core::bool?} null : #t28{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t29 = list in #t29 == null ?{() →? void} null : #t29{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t30 = list in #t30 == null ?{() →? void} null : #t30{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
}
|
||||
static method _extension#0|call(lowered final core::int #this) → void {}
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void {}
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void {}
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -0,0 +1,176 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c(); // Error
|
||||
// ^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic {
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0; // Error
|
||||
^^" in record.$0{core::int};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1; // Error
|
||||
^^" in record.$1{core::String};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d; // Error
|
||||
^" in record.d{core::double};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f; // Error
|
||||
^" in record.f{() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c; // Error
|
||||
^" in record.c{self::Class};
|
||||
self::_extension#0|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0(); // Error
|
||||
^^" in record.$0{core::int});
|
||||
self::_extension#1|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1(); // Error
|
||||
^^" in record.$1{core::String});
|
||||
self::_extension#2|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d(); // Error
|
||||
^" in record.d{core::double});
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f(); // Error
|
||||
^" in record.f{() → void}(){() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c(); // Error
|
||||
^" in record.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t1 = record in #t1 == null ?{core::int?} null : #t1{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t2 = record in #t2 == null ?{core::String?} null : #t2{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t3 = record in #t3 == null ?{core::double?} null : #t3{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t4 = record in #t4 == null ?{() →? void} null : #t4{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t5 = record in #t5 == null ?{self::Class?} null : #t5{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t6 = record in #t6 == null ?{void} null : self::_extension#0|call(#t6{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t7 = record in #t7 == null ?{void} null : self::_extension#1|call(#t7{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t8 = record in #t8 == null ?{void} null : self::_extension#2|call(#t8{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t9 = record in #t9 == null ?{void} null : #t9{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t10 = record in #t10 == null ?{void} null : #t10{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t11 = record in #t11 == null ?{core::bool?} null : #t11{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t12 = record in #t12 == null ?{core::int?} null : #t12{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t13 = record in #t13 == null ?{core::bool?} null : #t13{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t14 = record in #t14 == null ?{() →? void} null : #t14{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t15 = record in #t15 == null ?{() →? void} null : #t15{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t16 = list in #t16 == null ?{core::int?} null : #t16{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t17 = list in #t17 == null ?{core::String?} null : #t17{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t18 = list in #t18 == null ?{core::double?} null : #t18{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t19 = list in #t19 == null ?{() →? void} null : #t19{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t20 = list in #t20 == null ?{self::Class?} null : #t20{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t21 = list in #t21 == null ?{void} null : self::_extension#0|call(#t21{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t22 = list in #t22 == null ?{void} null : self::_extension#1|call(#t22{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t23 = list in #t23 == null ?{void} null : self::_extension#2|call(#t23{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t24 = list in #t24 == null ?{void} null : #t24{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t25 = list in #t25 == null ?{void} null : #t25{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t26 = list in #t26 == null ?{core::bool?} null : #t26{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t27 = list in #t27 == null ?{core::int?} null : #t27{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t28 = list in #t28 == null ?{core::bool?} null : #t28{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t29 = list in #t29 == null ?{() →? void} null : #t29{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t30 = list in #t30 == null ?{() →? void} null : #t30{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
}
|
||||
static method _extension#0|call(lowered final core::int #this) → void {}
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void {}
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void {}
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -0,0 +1,13 @@
|
|||
test((int, String, {double d, void Function() f, Class c})? record, List<(int, String, {double d, void Function() f, Class c})>? list) {}
|
||||
extension on int {
|
||||
void call() {}
|
||||
}
|
||||
extension on String {
|
||||
void call() {}
|
||||
}
|
||||
extension on double {
|
||||
void call() {}
|
||||
}
|
||||
class Class {
|
||||
void call() {}
|
||||
}
|
176
pkg/front_end/testcases/records/null_shorting.dart.weak.expect
Normal file
176
pkg/front_end/testcases/records/null_shorting.dart.weak.expect
Normal file
|
@ -0,0 +1,176 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c(); // Error
|
||||
// ^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic {
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0; // Error
|
||||
^^" in record.$0{core::int};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1; // Error
|
||||
^^" in record.$1{core::String};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d; // Error
|
||||
^" in record.d{core::double};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f; // Error
|
||||
^" in record.f{() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c; // Error
|
||||
^" in record.c{self::Class};
|
||||
self::_extension#0|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0(); // Error
|
||||
^^" in record.$0{core::int});
|
||||
self::_extension#1|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1(); // Error
|
||||
^^" in record.$1{core::String});
|
||||
self::_extension#2|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d(); // Error
|
||||
^" in record.d{core::double});
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f(); // Error
|
||||
^" in record.f{() → void}(){() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c(); // Error
|
||||
^" in record.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t1 = record in #t1 == null ?{core::int?} null : #t1{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t2 = record in #t2 == null ?{core::String?} null : #t2{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t3 = record in #t3 == null ?{core::double?} null : #t3{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t4 = record in #t4 == null ?{() →? void} null : #t4{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t5 = record in #t5 == null ?{self::Class?} null : #t5{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t6 = record in #t6 == null ?{void} null : self::_extension#0|call(#t6{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t7 = record in #t7 == null ?{void} null : self::_extension#1|call(#t7{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t8 = record in #t8 == null ?{void} null : self::_extension#2|call(#t8{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t9 = record in #t9 == null ?{void} null : #t9{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t10 = record in #t10 == null ?{void} null : #t10{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t11 = record in #t11 == null ?{core::bool?} null : #t11{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t12 = record in #t12 == null ?{core::int?} null : #t12{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t13 = record in #t13 == null ?{core::bool?} null : #t13{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t14 = record in #t14 == null ?{() →? void} null : #t14{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t15 = record in #t15 == null ?{() →? void} null : #t15{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t16 = list in #t16 == null ?{core::int?} null : #t16{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t17 = list in #t17 == null ?{core::String?} null : #t17{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t18 = list in #t18 == null ?{core::double?} null : #t18{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t19 = list in #t19 == null ?{() →? void} null : #t19{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t20 = list in #t20 == null ?{self::Class?} null : #t20{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t21 = list in #t21 == null ?{void} null : self::_extension#0|call(#t21{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t22 = list in #t22 == null ?{void} null : self::_extension#1|call(#t22{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t23 = list in #t23 == null ?{void} null : self::_extension#2|call(#t23{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t24 = list in #t24 == null ?{void} null : #t24{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t25 = list in #t25 == null ?{void} null : #t25{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t26 = list in #t26 == null ?{core::bool?} null : #t26{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t27 = list in #t27 == null ?{core::int?} null : #t27{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t28 = list in #t28 == null ?{core::bool?} null : #t28{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t29 = list in #t29 == null ?{() →? void} null : #t29{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t30 = list in #t30 == null ?{() →? void} null : #t30{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
}
|
||||
static method _extension#0|call(lowered final core::int #this) → void {}
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void {}
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void {}
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -0,0 +1,176 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c(); // Error
|
||||
// ^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic {
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0; // Error
|
||||
^^" in record.$0{core::int};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1; // Error
|
||||
^^" in record.$1{core::String};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d; // Error
|
||||
^" in record.d{core::double};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f; // Error
|
||||
^" in record.f{() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c; // Error
|
||||
^" in record.c{self::Class};
|
||||
self::_extension#0|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0(); // Error
|
||||
^^" in record.$0{core::int});
|
||||
self::_extension#1|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1(); // Error
|
||||
^^" in record.$1{core::String});
|
||||
self::_extension#2|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d(); // Error
|
||||
^" in record.d{core::double});
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f(); // Error
|
||||
^" in record.f{() → void}(){() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c(); // Error
|
||||
^" in record.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t1 = record in #t1 == null ?{core::int?} null : #t1{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t2 = record in #t2 == null ?{core::String?} null : #t2{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t3 = record in #t3 == null ?{core::double?} null : #t3{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t4 = record in #t4 == null ?{() →? void} null : #t4{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t5 = record in #t5 == null ?{self::Class?} null : #t5{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t6 = record in #t6 == null ?{void} null : self::_extension#0|call(#t6{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t7 = record in #t7 == null ?{void} null : self::_extension#1|call(#t7{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t8 = record in #t8 == null ?{void} null : self::_extension#2|call(#t8{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t9 = record in #t9 == null ?{void} null : #t9{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t10 = record in #t10 == null ?{void} null : #t10{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t11 = record in #t11 == null ?{core::bool?} null : #t11{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t12 = record in #t12 == null ?{core::int?} null : #t12{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t13 = record in #t13 == null ?{core::bool?} null : #t13{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t14 = record in #t14 == null ?{() →? void} null : #t14{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t15 = record in #t15 == null ?{() →? void} null : #t15{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t16 = list in #t16 == null ?{core::int?} null : #t16{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t17 = list in #t17 == null ?{core::String?} null : #t17{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t18 = list in #t18 == null ?{core::double?} null : #t18{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t19 = list in #t19 == null ?{() →? void} null : #t19{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t20 = list in #t20 == null ?{self::Class?} null : #t20{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t21 = list in #t21 == null ?{void} null : self::_extension#0|call(#t21{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t22 = list in #t22 == null ?{void} null : self::_extension#1|call(#t22{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t23 = list in #t23 == null ?{void} null : self::_extension#2|call(#t23{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t24 = list in #t24 == null ?{void} null : #t24{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t25 = list in #t25 == null ?{void} null : #t25{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t26 = list in #t26 == null ?{core::bool?} null : #t26{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t27 = list in #t27 == null ?{core::int?} null : #t27{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t28 = list in #t28 == null ?{core::bool?} null : #t28{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t29 = list in #t29 == null ?{() →? void} null : #t29{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t30 = list in #t30 == null ?{() →? void} null : #t30{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
}
|
||||
static method _extension#0|call(lowered final core::int #this) → void {}
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void {}
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void {}
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -0,0 +1,36 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
;
|
||||
method call() → void
|
||||
;
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic
|
||||
;
|
||||
static method _extension#0|call(lowered final core::int #this) → void
|
||||
;
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void
|
||||
;
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void
|
||||
;
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -0,0 +1,176 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1; // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c; // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$0(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.$1(); // Error
|
||||
// ^^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.d(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.f(); // Error
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
// - 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
// Try accessing using ?. instead.
|
||||
// record.c(); // Error
|
||||
// ^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method call() → void {}
|
||||
}
|
||||
extension /* unnamed */ _extension#0 on core::int {
|
||||
method call = self::_extension#0|call;
|
||||
tearoff call = self::_extension#0|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#1 on core::String {
|
||||
method call = self::_extension#1|call;
|
||||
tearoff call = self::_extension#1|get#call;
|
||||
}
|
||||
extension /* unnamed */ _extension#2 on core::double {
|
||||
method call = self::_extension#2|call;
|
||||
tearoff call = self::_extension#2|get#call;
|
||||
}
|
||||
static method test((core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? record, core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? list) → dynamic {
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:7:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0; // Error
|
||||
^^" in record.$0{core::int};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:8:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1; // Error
|
||||
^^" in record.$1{core::String};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:9:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d; // Error
|
||||
^" in record.d{core::double};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:10:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f; // Error
|
||||
^" in record.f{() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:11:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c; // Error
|
||||
^" in record.c{self::Class};
|
||||
self::_extension#0|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:12:10: Error: Property '\$0' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$0(); // Error
|
||||
^^" in record.$0{core::int});
|
||||
self::_extension#1|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:13:10: Error: Property '\$1' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.\$1(); // Error
|
||||
^^" in record.$1{core::String});
|
||||
self::_extension#2|call(invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:14:10: Error: Property 'd' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.d(); // Error
|
||||
^" in record.d{core::double});
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:15:10: Error: Property 'f' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.f(); // Error
|
||||
^" in record.f{() → void}(){() → void};
|
||||
invalid-expression "pkg/front_end/testcases/records/null_shorting.dart:16:10: Error: Property 'c' cannot be accessed on '(int, String, {Class c, double d, void Function() f})?' because it is potentially null.
|
||||
- 'Class' is from 'pkg/front_end/testcases/records/null_shorting.dart'.
|
||||
Try accessing using ?. instead.
|
||||
record.c(); // Error
|
||||
^" in record.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t1 = record in #t1 == null ?{core::int?} null : #t1{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t2 = record in #t2 == null ?{core::String?} null : #t2{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t3 = record in #t3 == null ?{core::double?} null : #t3{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t4 = record in #t4 == null ?{() →? void} null : #t4{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t5 = record in #t5 == null ?{self::Class?} null : #t5{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t6 = record in #t6 == null ?{void} null : self::_extension#0|call(#t6{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t7 = record in #t7 == null ?{void} null : self::_extension#1|call(#t7{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t8 = record in #t8 == null ?{void} null : self::_extension#2|call(#t8{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t9 = record in #t9 == null ?{void} null : #t9{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t10 = record in #t10 == null ?{void} null : #t10{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t11 = record in #t11 == null ?{core::bool?} null : #t11{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t12 = record in #t12 == null ?{core::int?} null : #t12{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t13 = record in #t13 == null ?{core::bool?} null : #t13{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t14 = record in #t14 == null ?{() →? void} null : #t14{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})? #t15 = record in #t15 == null ?{() →? void} null : #t15{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t16 = list in #t16 == null ?{core::int?} null : #t16{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t17 = list in #t17 == null ?{core::String?} null : #t17{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t18 = list in #t18 == null ?{core::double?} null : #t18{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t19 = list in #t19 == null ?{() →? void} null : #t19{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t20 = list in #t20 == null ?{self::Class?} null : #t20{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t21 = list in #t21 == null ?{void} null : self::_extension#0|call(#t21{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t22 = list in #t22 == null ?{void} null : self::_extension#1|call(#t22{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t23 = list in #t23 == null ?{void} null : self::_extension#2|call(#t23{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double});
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t24 = list in #t24 == null ?{void} null : #t24{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t25 = list in #t25 == null ?{void} null : #t25{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}(){() → void};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t26 = list in #t26 == null ?{core::bool?} null : #t26{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$0{core::int}.{core::int::isEven}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t27 = list in #t27 == null ?{core::int?} null : #t27{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.$1{core::String}.{core::String::length}{core::int};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t28 = list in #t28 == null ?{core::bool?} null : #t28{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.d{core::double}.{core::num::isNaN}{core::bool};
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t29 = list in #t29 == null ?{() →? void} null : #t29{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.f{() → void}.call;
|
||||
let final core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>? #t30 = list in #t30 == null ?{() →? void} null : #t30{core::List<(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})>}.{core::Iterable::first}{(core::int, core::String, {required c: self::Class, required d: core::double, required f: () → void})}.c{self::Class}.{self::Class::call}{() → void};
|
||||
}
|
||||
static method _extension#0|call(lowered final core::int #this) → void {}
|
||||
static method _extension#0|get#call(lowered final core::int #this) → () → void
|
||||
return () → void => self::_extension#0|call(#this);
|
||||
static method _extension#1|call(lowered final core::String #this) → void {}
|
||||
static method _extension#1|get#call(lowered final core::String #this) → () → void
|
||||
return () → void => self::_extension#1|call(#this);
|
||||
static method _extension#2|call(lowered final core::double #this) → void {}
|
||||
static method _extension#2|get#call(lowered final core::double #this) → () → void
|
||||
return () → void => self::_extension#2|call(#this);
|
|
@ -148,6 +148,7 @@ records/access_through_type_variable: FormatterCrash
|
|||
records/const_record_literal: FormatterCrash
|
||||
records/duplicated_name_errors: FormatterCrash
|
||||
records/issue50133: FormatterCrash
|
||||
records/null_shorting: FormatterCrash
|
||||
records/record_literal_errors: FormatterCrash
|
||||
records/record_type: FormatterCrash
|
||||
records/record_type_errors: FormatterCrash
|
||||
|
|
Loading…
Reference in a new issue