f81709c3e3
Type inference for final fields in precompiler.cc is limited and does not properly handle constant objects. This change hooks up field types inferred by TFA and removes the inference in precompiler.cc. Fixes: https://github.com/flutter/flutter/issues/22131 Change-Id: Ida65cd211074623928bb2a7d48dc58d5e53511b8 Reviewed-on: https://dart-review.googlesource.com/76562 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
31 lines
781 B
Dart
31 lines
781 B
Dart
// Copyright (c) 2018, 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.
|
|
|
|
// Verifies that inferred type of a final field takes constant objects into
|
|
// account. This is a regression test for
|
|
// https://github.com/flutter/flutter/issues/22131.
|
|
|
|
// VMOptions=--no_background_compilation --optimization_counter_threshold=10
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class X {
|
|
final Map<int, String> data;
|
|
const X(this.data);
|
|
}
|
|
|
|
const f = X({1: "ok-f"});
|
|
final g = X({1: "ok-g"});
|
|
|
|
void doTest() {
|
|
Expect.equals("ok-f", f.data[1]);
|
|
Expect.equals("ok-g", g.data[1]);
|
|
}
|
|
|
|
void main() {
|
|
for (int i = 0; i < 20; i++) {
|
|
doTest();
|
|
}
|
|
}
|