blob: c76d2394d79f51bb3003b764b5ff783abce04105 [file] [log] [blame]
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// f1a(42, 87); // error
// ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
// f2a(87); // error
// ^
//
import self as self;
import "dart:core" as core;
class Class1 extends core::Object {
final field core::int field;
constructor •([core::int field = #C1]) → self::Class1
: self::Class1::field = field, super core::Object::•()
;
static method _#new#tearOff([core::int field = #C1]) → self::Class1
return new self::Class1::•(field);
}
class Class2 extends core::Object {
final field core::int field;
constructor •({core::int field = #C1}) → self::Class2
: self::Class2::field = field, super core::Object::•()
;
static method _#new#tearOff({core::int field = #C1}) → self::Class2
return new self::Class2::•(field: field);
}
static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
static method main() dynamic {
core::print("inSoundMode: ${self::inSoundMode}");
self::testDefaultValues();
}
static method testDefaultValues() void {
([core::int]) self::Class1 f1a = #C2;
self::Class1 c1a = f1a(){([core::int]) self::Class1};
self::expect(42, c1a.{self::Class1::field}{core::int});
self::Class1 c1b = f1a(87){([core::int]) self::Class1};
self::expect(87, c1b.{self::Class1::field}{core::int});
() Null {
let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
f1a(42, 87); // error
^" in f1a{<inapplicable>}.(42, 87);
};
dynamic f1b = #C2;
dynamic c1c = f1b{dynamic}.call();
self::expect(42, c1c{dynamic}.field);
dynamic c1d = f1b{dynamic}.call(87);
self::expect(87, c1d{dynamic}.field);
self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
({field: core::int}) → self::Class2 f2a = #C3;
self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
self::expect(42, c2a.{self::Class2::field}{core::int});
self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
self::expect(87, c2b.{self::Class2::field}{core::int});
() → Null {
let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
Try removing the extra positional arguments.
f2a(87); // error
^" in f2a{<inapplicable>}.(87);
};
dynamic f2b = #C3;
dynamic c2c = f2b{dynamic}.call();
self::expect(42, c2c{dynamic}.field);
dynamic c2d = f2b{dynamic}.call(field: 87);
self::expect(87, c2d{dynamic}.field);
self::throws(() → dynamic => f2b{dynamic}.call(87));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C4}) → dynamic {
try {
f(){() → dynamic};
}
on core::Object catch(final core::Object e) {
core::print("Thrown: ${e}");
return;
}
if(!self::inSoundMode && inSoundModeOnly) {
return;
}
throw "Expected exception";
}
constants {
#C1 = 42
#C2 = static-tearoff self::Class1::_#new#tearOff
#C3 = static-tearoff self::Class2::_#new#tearOff
#C4 = false
}