3ba5aa8ba7
After https://github.com/dart-lang/sdk/commit/609d2770bea3d4c9dc76b515a52ee325dfb5c50d constant evaluator produces SymbolConstant nodes. This CL adds handling of SymbolConstant nodes to bytecode generator by emitting a new constant pool entry. Constant pool reader is adjusted to read new constant pool entry. Change-Id: Idc1e91e765014b3290d80e5a3743448b8a0f472c Reviewed-on: https://dart-review.googlesource.com/74322 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Régis Crelier <regis@google.com>
93 lines
1.7 KiB
Dart
93 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);
|
|
print(#_private_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() {}
|