// Expectation for test: 
// // TODO(sigmund): change this to check method "function(Sub#+)" once we provide
// // a way to disable inlining of Sub#+, which is compiled to something like:
// // 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);
// // }
// 
// 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;
// }

function() {
  var v0 = V.Sub$();
  V.Base.prototype.$add.call(v0, v0, 10000 + 1);
}
