ae001707b7
Values of static fields with trivial initializers are pre-initialized at load time, so such static fields do not have implicit getters. Bytecode generator is fixed to treat double literal initializers as trivial and avoid calling getters for such fields. Also, this CL disables bytecode generation for static fields with trivial initializers as their bytecode is not used. Change-Id: I44b9d26ab2007e33d0d5b9f716e30848f0c38e8a Reviewed-on: https://dart-review.googlesource.com/68005 Reviewed-by: Zach Anderson <zra@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
92 lines
1.7 KiB
Dart
92 lines
1.7 KiB
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.
|
|
|
|
enum A {
|
|
elem1,
|
|
elem2,
|
|
elem3,
|
|
elem4,
|
|
}
|
|
|
|
class B {
|
|
final int i;
|
|
const B(this.i);
|
|
}
|
|
|
|
class C extends B {
|
|
final int j;
|
|
const C(int a, int b, int c)
|
|
: j = a + b,
|
|
super(c * 5);
|
|
}
|
|
|
|
class D {
|
|
final x;
|
|
final y;
|
|
const D(this.x, [this.y]);
|
|
}
|
|
|
|
const c1 = A.elem3;
|
|
const c2 = 'hello!';
|
|
const c3 = c2.length;
|
|
const c4 = const C(1, 2, 3);
|
|
const c5 = const D(const B(4));
|
|
|
|
void test_constants1() {
|
|
print(c1);
|
|
print(c2);
|
|
print(c3);
|
|
print(c4);
|
|
print(c5);
|
|
}
|
|
|
|
void test_constants2() {
|
|
print(42);
|
|
print('foo');
|
|
print(A.elem2);
|
|
print(const [42, 'foo', int]);
|
|
print(const <String, A>{'E2': A.elem2, 'E4': A.elem4});
|
|
print(
|
|
const D(const C(4, 5, 6), const {'foo': 42, 'bar': const B(c2.length)}));
|
|
}
|
|
|
|
void test_list_literal(int a) {
|
|
print([1, a, 3]);
|
|
print(<String>['a', a.toString(), 'b']);
|
|
}
|
|
|
|
void test_map_literal<T>(int a, int b, T c) {
|
|
print({1: a, b: 2});
|
|
print(<String, int>{'foo': a, b.toString(): 3});
|
|
print(<String, T>{});
|
|
print(<T, int>{c: 4});
|
|
}
|
|
|
|
void test_symbol() {
|
|
print(#test_symbol);
|
|
}
|
|
|
|
void test_type_literal<T>() {
|
|
print(String);
|
|
print(T);
|
|
}
|
|
|
|
class E<T> {
|
|
const E();
|
|
}
|
|
|
|
class F<P, Q> extends E<Map<P, Q>> {
|
|
const F();
|
|
}
|
|
|
|
testGenericConstInstance() => const F<int, String>();
|
|
|
|
typedef GenericFunctionType = X Function<X>(X);
|
|
testGenericFunctionTypeLiteral() => GenericFunctionType;
|
|
|
|
double fieldWithDoubleLiteralInitializer = 1.0;
|
|
testFieldWithDoubleLiteralInitializer() => fieldWithDoubleLiteralInitializer;
|
|
|
|
main() {}
|