124f19a793
Review URL: https://codereview.chromium.org//12087101 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@18121 260f80e4-7a28-3924-810f-c04153c831b5
55 lines
1.7 KiB
Dart
55 lines
1.7 KiB
Dart
// 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.
|
|
|
|
import 'compiler_helper.dart';
|
|
|
|
const String TEST_ONE = r"""
|
|
foo(a) {
|
|
// Make sure there is a bailout version.
|
|
foo(a);
|
|
// This will make a one shot interceptor that will be optimized in
|
|
// the non-bailout version because we know a is a number.
|
|
return (a + 42).toString;
|
|
}
|
|
""";
|
|
|
|
const String TEST_TWO = r"""
|
|
foo(a) {
|
|
var myVariableName = a + 42;
|
|
print(myVariableName);
|
|
print(myVariableName);
|
|
}
|
|
""";
|
|
|
|
const String TEST_THREE = r"""
|
|
class A {
|
|
var length;
|
|
}
|
|
foo(a) {
|
|
print([]); // Make sure the array class is instantiated.
|
|
return new A().length + a.length;
|
|
}
|
|
""";
|
|
|
|
main() {
|
|
var generated = compile(TEST_ONE, entry: 'foo');
|
|
// Check that the one shot interceptor got converted to a direct
|
|
// call to the interceptor object.
|
|
Expect.isTrue(generated.contains('CONSTANT.get\$toString(a + 42);'));
|
|
|
|
// Check that one-shot interceptors preserve variable names, see
|
|
// https://code.google.com/p/dart/issues/detail?id=8106.
|
|
generated = compile(TEST_TWO, entry: 'foo');
|
|
Expect.isTrue(generated.contains('\$.\$\$add(a, 42)'));
|
|
Expect.isTrue(generated.contains('myVariableName'));
|
|
|
|
// Check that an intercepted getter that does not need to be
|
|
// intercepted, is turned into a regular getter call or field
|
|
// access.
|
|
generated = compile(TEST_THREE, entry: 'foo');
|
|
Expect.isFalse(generated.contains(r'get$length'));
|
|
Expect.isTrue(generated.contains(r'$.A$().length'));
|
|
Expect.isTrue(generated.contains(r'length(a)'));
|
|
}
|