/*
 * Copyright (c) 2011, 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.
 */
/**
 * @assertion A bitwise expression of the form super op e2 is
 * equivalent to the method invocation super.op(e2).
 * @description Checks that an expression of the form super ^ e2
 * is equivalent to the method invocation super.operator^(e2).
 * @author msyabro
 * @reviewer kaigorodov
 */
import "../../Utils/expect.dart";

class S {
  var val;
  operator ^ (var arg) {
    val=arg;
  }
}

class A extends S {
  test(var arg) {
    super ^ arg;
  }
}

main() {
  A a = new A();
  int arg=123;
  a.test(arg);
  Expect.isTrue(a.val==arg);
}
