blob: f79e3155e4e9c7e05a77f3312b3e515f6b2eaa5a [file] [log] [blame]
// Copyright (c) 2013, 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.
// @dart = 2.9
// Regression test for dart2js code generation in checked mode. See
// last part of
import "package:expect/expect.dart";
class A {
final finalField;
final otherFinalField;
: finalField = 42,
otherFinalField = 54;
expectFinalField(arg1, arg2) {
Expect.equals(arg1, arg2);
Expect.equals(finalField, arg1);
expectOtherFinalField(_, arg1, arg2) {
Expect.equals(arg1, arg2);
Expect.equals(otherFinalField, arg1);
var array = [new A()];
main() {
// [untypedReceiver] is made so that the compiler does not know
// what it is.
var untypedReceiver = array[0];
// [typedReceiver] is made so that the compiler knows what it is.
var typedReceiver = new A();
// Using [: finalField :] twice will make the compiler want to
// allocate one temporary for it.
var a = untypedReceiver.expectFinalField(
typedReceiver.finalField, typedReceiver.finalField);
// Having a check instruction in between two allocations of
// temporary variables used to trigger a bug in the compiler.
int b = a;
// Using [: otherFinalField :] twice will make the compiler want to
// allocate one temporary for it. The compiler used to assign the
// same temporary for [: otherFinalField :] and [: finalField :].
b, typedReceiver.otherFinalField, typedReceiver.otherFinalField);