[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:
Johnni Winther 2022-10-26 14:44:56 +00:00 committed by Commit Queue
parent 37be66028b
commit b11dc51c0d
20 changed files with 1238 additions and 34 deletions

View file

@ -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);

View file

@ -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.

View 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();
}

View 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
}

View 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
}

View file

@ -0,0 +1,7 @@
void foo() => print('foo');
class Bar {
void call() {}
}
main() {}

View file

@ -0,0 +1,6 @@
class Bar {
void call() {}
}
main() {}
void foo() => print('foo');

View 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
}

View 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
}

View file

@ -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
;

View 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
}

View 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() {}
}

View 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);

View 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);

View file

@ -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() {}
}

View 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);

View 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);

View file

@ -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);

View 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);

View file

@ -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