blob: f367c3ea6de8f6e1334e8f26f5f86625ca3b5f32 [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 {}
abstract class Interface {
void takePositional(
int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedNonNullableIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX);
dynamic returnUnboxedSmi(X? ignored);
dynamic returnUnboxedInt(X? ignored);
dynamic returnUnboxedDouble(X? ignored);
dynamic returnBoxedNullableInt(X? ignored);
dynamic returnBoxedNullableDouble(X? ignored);
dynamic returnBoxedIntOrDouble(X? ignored);
dynamic returnBoxedNullableIntOrDouble(X? ignored);
dynamic returnBoxedNullableX(X? ignored);
dynamic returnBoxedX(X? ignored);
}
class Impl1 implements Interface {
void takePositional(
int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedNonNullableIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedNonNullableIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
dynamic returnUnboxedSmi(X? ignored) => 1;
dynamic returnUnboxedInt(X? ignored) => 1;
dynamic returnUnboxedDouble(X? ignored) => 1.1;
dynamic returnBoxedNullableInt(X? ignored) => null;
dynamic returnBoxedNullableDouble(X? ignored) => null;
dynamic returnBoxedIntOrDouble(X? ignored) => 1;
dynamic returnBoxedNullableIntOrDouble(X? ignored) => null;
dynamic returnBoxedNullableX(X? ignored) => null;
dynamic returnBoxedX(X? ignored) => X();
}
class BaseImpl2 {
void takePositional(
int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedNonNullableIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedNonNullableIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
dynamic returnUnboxedSmi(X? ignored) => 2;
dynamic returnUnboxedInt(X? ignored) => mint;
dynamic returnUnboxedDouble(X? ignored) => 2.2;
dynamic returnBoxedNullableInt(X? ignored) => 2;
dynamic returnBoxedNullableDouble(X? ignored) => 2.2;
dynamic returnBoxedIntOrDouble(X? ignored) => 2.2;
dynamic returnBoxedNullableIntOrDouble(X? ignored) => 2;
dynamic returnBoxedNullableX(X? ignored) => X();
dynamic returnBoxedX(X? ignored) => X();
}
class SubImpl3 extends BaseImpl2 implements Interface {
void takePositional(
int? unboxedSmi,
dynamic unboxedInt,
dynamic unboxedDouble,
dynamic boxedNullableInt,
dynamic boxedNullableDouble,
dynamic boxedNonNullableIntOrDouble,
dynamic boxedNullableIntOrDouble,
dynamic boxedNullableX,
dynamic boxedX) {
use(unboxedInt);
use(unboxedDouble);
use(boxedNullableInt);
use(boxedNullableDouble);
use(boxedNonNullableIntOrDouble);
use(boxedNullableIntOrDouble);
use(boxedNullableX);
use(boxedX);
}
dynamic returnUnboxedSmi(X? ignored) => 3;
dynamic returnUnboxedInt(X? ignored) => mint;
dynamic returnUnboxedDouble(X? ignored) => 3.3;
dynamic returnBoxedNullableInt(X? ignored) => mint;
dynamic returnBoxedNullableDouble(X? ignored) => 3.3;
dynamic returnBoxedIntOrDouble(X? ignored) => 3.3;
dynamic returnBoxedNullableIntOrDouble(X? ignored) => 3.3;
dynamic returnBoxedNullableX(X? ignored) => X();
dynamic returnBoxedX(X? ignored) => X();
}
main() {
final values = [Impl1(), BaseImpl2(), SubImpl3()];
final a = values[int.parse('0')] as Impl1;
final b = values[int.parse('1')] as BaseImpl2;
final c = values[int.parse('2')] as SubImpl3;
final d = values[int.parse('2')] as Interface;
a.takePositional(1, 1, 1.1, null, null, 1, null, null, X());
b.takePositional(2, 2, 2.2, 2, 2.2, 2.2, 2, X(), X());
c.takePositional(3, mint, 3.3, mint, 3.3, 3.3, 3.3, X(), X());
d.takePositional(3, mint, 3.3, mint, 3.3, 3.3, 3.3, X(), X());
use(a.returnUnboxedSmi(null));
use(a.returnUnboxedInt(null));
use(a.returnUnboxedDouble(null));
use(a.returnBoxedNullableInt(null));
use(a.returnBoxedNullableDouble(null));
use(a.returnBoxedIntOrDouble(null));
use(a.returnBoxedNullableIntOrDouble(null));
use(a.returnBoxedNullableX(null));
use(a.returnBoxedX(null));
use(b.returnUnboxedSmi(null));
use(b.returnUnboxedInt(null));
use(b.returnUnboxedDouble(null));
use(b.returnBoxedNullableInt(null));
use(b.returnBoxedNullableDouble(null));
use(b.returnBoxedIntOrDouble(null));
use(b.returnBoxedNullableIntOrDouble(null));
use(b.returnBoxedNullableX(null));
use(b.returnBoxedX(null));
use(c.returnUnboxedSmi(null));
use(c.returnUnboxedInt(null));
use(c.returnUnboxedDouble(null));
use(c.returnBoxedNullableInt(null));
use(c.returnBoxedNullableDouble(null));
use(c.returnBoxedIntOrDouble(null));
use(c.returnBoxedNullableIntOrDouble(null));
use(c.returnBoxedNullableX(null));
use(c.returnBoxedX(null));
use(d.returnUnboxedSmi(null));
use(d.returnUnboxedInt(null));
use(d.returnUnboxedDouble(null));
use(d.returnBoxedNullableInt(null));
use(d.returnBoxedNullableDouble(null));
use(d.returnBoxedIntOrDouble(null));
use(d.returnBoxedNullableIntOrDouble(null));
use(d.returnBoxedNullableX(null));
use(d.returnBoxedX(null));
}