blob: afa0af376b2e3ef649732377727e8e141c70bd62 [file] [log] [blame]
// Copyright (c) 2012, 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.
// Test that dart2js gvns dynamic getters that don't have side
// effects.
import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
import 'compiler_helper.dart';
import 'parser_helper.dart';
const String TEST = r"""
class A {
var foo;
bar(a) {
return a.foo + a.foo;
}
}
main() {
new A().bar(new Object());
}
""";
main() {
Uri uri = new Uri(scheme: 'source');
var compiler = compilerFor(TEST, uri);
asyncTest(() => compiler.runCompiler(uri).then((_) {
String generated = compiler.assembledCode;
RegExp regexp = new RegExp(r"get\$foo");
Iterator matches = regexp.allMatches(generated).iterator;
checkNumberOfMatches(matches, 1);
var cls = findElement(compiler, 'A');
Expect.isNotNull(cls);
String name = 'foo';
var element = cls.lookupLocalMember(name);
Expect.isNotNull(element);
Selector selector = new Selector.getter(name, null);
Expect.isFalse(compiler.world.hasAnyUserDefinedGetter(selector));
}));
}