blob: 21788ee3db7901a52f3c2633c744bd3f4923a08b [file] [log] [blame]
// Copyright (c) 2020, 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.
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
int get smiOrMint => kTrue ? 1 : mint;
dynamic usedObject;
void use(dynamic object) {
usedObject ??= object;
}
class X {}
void takePositional(
int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
void takeOptional(
[int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX]) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
void takeNamed(
{int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX}) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
dynamic returnUnboxedSmi() => kTrue ? 1 : 2;
dynamic returnUnboxedInt() => kTrue ? smiOrMint : 2;
dynamic returnUnboxedDouble() => kTrue ? 1.1 : 2.2;
dynamic returnBoxedNullableInt() => kTrue ? smiOrMint : null;
dynamic returnBoxedNullableDouble() => kTrue ? 1.1 : null;
dynamic returnBoxedIntOrDouble() => kTrue ? smiOrMint : 1.1;
dynamic returnBoxedNullableIntOrDouble() =>
kTrue ? (kFalse ? smiOrMint : 1.1) : null;
dynamic returnBoxedNullableX() => kTrue ? X() : null;
dynamic returnBoxedX() => X();
main() {
takePositional(
kTrue ? 1 : 2,
kTrue ? smiOrMint : 2,
kTrue ? 1.1 : 2.2,
kTrue ? smiOrMint : null,
kTrue ? 1.1 : null,
kTrue ? smiOrMint : 1.1,
kTrue ? (kFalse ? smiOrMint : 1.1) : null,
kTrue ? X() : null,
X());
takeOptional(
kTrue ? 1 : 2,
kTrue ? smiOrMint : 2,
kTrue ? 1.1 : 2.2,
kTrue ? smiOrMint : null,
kTrue ? 1.1 : null,
kTrue ? smiOrMint : 1.1,
kTrue ? (kFalse ? smiOrMint : 1.1) : null,
kTrue ? X() : null,
X());
takeNamed(
unboxedSmi: kTrue ? 1 : 2,
unboxedInt: kTrue ? smiOrMint : 2,
unboxedDouble: kTrue ? 1.1 : 2.2,
boxedNullableInt: kTrue ? smiOrMint : null,
boxedNullableDouble: kTrue ? 1.1 : null,
boxedIntOrDouble: kTrue ? smiOrMint : 1.1,
boxedNullableIntOrDouble: kTrue ? (kFalse ? smiOrMint : 1.1) : null,
boxedNullableX: kTrue ? X() : null,
boxedX: X());
use(returnUnboxedSmi());
use(returnUnboxedInt());
use(returnUnboxedDouble());
use(returnBoxedNullableInt());
use(returnBoxedNullableDouble());
use(returnBoxedIntOrDouble());
use(returnBoxedNullableIntOrDouble());
use(returnBoxedNullableX());
use(returnBoxedX());
// Use as tear-offs.
use(takePositional);
use(takeOptional);
use(takeNamed);
use(returnUnboxedSmi);
use(returnUnboxedInt);
use(returnUnboxedDouble);
use(returnBoxedNullableInt);
use(returnBoxedNullableDouble);
use(returnBoxedIntOrDouble);
use(returnBoxedNullableIntOrDouble);
use(returnBoxedNullableX);
use(returnBoxedX);
}