| Index: tests/compiler/dart2js/array_tracing_mirror_test.dart
|
| ===================================================================
|
| --- tests/compiler/dart2js/array_tracing_mirror_test.dart (revision 0)
|
| +++ tests/compiler/dart2js/array_tracing_mirror_test.dart (revision 0)
|
| @@ -0,0 +1,41 @@
|
| +// 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.
|
| +
|
| +// Make sure that limiting mirrors through @MirrorsUsed does not
|
| +// affect optimizations done on arrays.
|
| +
|
| +import 'package:expect/expect.dart';
|
| +import "package:async_helper/async_helper.dart";
|
| +import 'memory_compiler.dart';
|
| +
|
| +const MEMORY_SOURCE_FILES = const {
|
| + 'main.dart': '''
|
| +
|
| +@MirrorsUsed(targets: 'main')
|
| +import 'dart:mirrors';
|
| +class A {
|
| + var field;
|
| +}
|
| +
|
| +main() {
|
| + var a = new A();
|
| + var mirror = reflect(a);
|
| + var array = [42, 42];
|
| + a.field = array;
|
| + var field = mirror.getField(#field);
|
| + field.invoke(#clear, []);
|
| + return array.length;
|
| +}
|
| +''',
|
| +};
|
| +
|
| +main() {
|
| + var compiler = compilerFor(MEMORY_SOURCE_FILES);
|
| + asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
|
| + var element = compiler.mainApp.findExported('main');
|
| + var code = compiler.backend.assembleCode(element);
|
| + Expect.isTrue(code.contains('return 2'));
|
| + }));
|
| +}
|
| +
|
|
|