blob: 4ad6e78a1409d7b3350d80d5fe21b8d8b4c50ac4 [file] [log] [blame]
// Copyright (c) 2014, 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.
// VMOptions=-DUSE_CPS_IR=true
// Tests of interceptors.
library supercall_test;
import 'js_backend_cps_ir.dart';
const List<TestEntry> tests = const [
const TestEntry.forMethod('function(Sub#m)', """
class Base {
m(x) {
print(x+1);
}
}
class Sub extends Base {
m(x) => super.m(x+10);
}
main() {
new Sub().m(100);
}""",
r"""
function(x) {
var v0, v1;
v0 = 10;
v1 = J.getInterceptor$ns(x).$add(x, v0);
return V.Base.prototype.m$1.call(this, v1);
}"""),
// Reenable when we support compiling functions that
// need interceptor calling convention.
// const TestEntry.forMethod('function(Sub#+)', """
// class Base {
// m(x) {
// print(x+1000);
// }
// operator+(x) => m(x+10);
// }
// class Sub extends Base {
// m(x) => super.m(x+100);
// operator+(x) => super + (x+1);
// }
// main() {
// new Sub() + 10000;
// }""",
// r"""
// function(x) {
// var v0, v1, v2;
// v0 = 1;
// v1 = J.getInterceptor$ns(x).$add(x, v0);
// v2 = this;
// return V.Base.prototype.$add.call(null, v2, v1);
// }"""),
const TestEntry.forMethod('function(Sub#m)', """
class Base {
var field;
}
class Sub extends Base {
m(x) => x + super.field;
}
main() {
print(new Sub().m(10));
}""",
r"""
function(x) {
var v0;
v0 = this.field;
return J.getInterceptor$ns(x).$add(x, v0);
}"""),
];
void main() {
runTests(tests);
}