// 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 '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.fromComponents(scheme: 'source');
  var compiler = compilerFor(TEST, uri);
  compiler.runCompiler(uri);
  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);
  var element = cls.lookupLocalMember(buildSourceString('foo'));
  Expect.isNotNull(element);
  Expect.isFalse(compiler.world.userDefinedGetters.contains(element));
}

// 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 '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.fromComponents(scheme: 'source');
  var compiler = compilerFor(TEST, uri);
  compiler.runCompiler(uri);
  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);
  SourceString name = buildSourceString('foo');
  var element = cls.lookupLocalMember(name);
  Expect.isNotNull(element);
  Selector selector = new Selector.getter(name, null);
  Expect.isFalse(compiler.world.hasAnyUserDefinedGetter(selector));
}

Fix build by updating test to use different check for user-defined getters.
Fix build by updating test to use different check for user-defined getters.

TBR'ed.

R=ngeoffray@google.com
BUG=

Review URL: https://codereview.chromium.org//12295011

git-svn-id: c93d8a2297af3b929165606efe145742a534bc71@18625 260f80e4-7a28-3924-810f-c04153c831b5
