// Copyright (c) 2017, 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.

/*member: main:[null]*/
main() {
  assignPlus();
  assignAnd();
  instanceAssignPlus();
  instanceAssignAnd();
  assignIndexPlus();
  assignIndexAnd();
  assignIndexInc();
  assignIndexDec();
}

////////////////////////////////////////////////////////////////////////////////

/*member: assignPlus:[subclass=JSUInt32]*/
assignPlus() {
  var i = 87;
  return i /*invoke: [exact=JSUInt31]*/ += 42;
}

/*member: assignAnd:[exact=JSUInt31]*/
assignAnd() {
  var i = 87;
  return i /*invoke: [exact=JSUInt31]*/ &= 42;
}

/*member: Class1.:[exact=Class1]*/
class Class1 {
  /*member: Class1.field:[subclass=JSPositiveInt]*/
  var field = 87;
}

/*member: instanceAssignPlus:[subclass=JSPositiveInt]*/
instanceAssignPlus() {
  var c = Class1();
  return c. /*[exact=Class1]*/ /*update: [exact=Class1]*/ field /*invoke: [subclass=JSPositiveInt]*/ +=
      42;
}

/*member: Class2.:[exact=Class2]*/
class Class2 {
  /*member: Class2.field:[exact=JSUInt31]*/
  var field = 87;
}

/*member: instanceAssignAnd:[exact=JSUInt31]*/
instanceAssignAnd() {
  var c = Class2();
  return c. /*[exact=Class2]*/ /*update: [exact=Class2]*/ field /*invoke: [exact=JSUInt31]*/ &=
      42;
}

/*member: assignIndexPlus:[subclass=JSPositiveInt]*/
assignIndexPlus() {
  var i = [87];
  return i
      /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
      /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
      [0] /*invoke: [subclass=JSPositiveInt]*/ += 42;
}

/*member: assignIndexAnd:[exact=JSUInt31]*/
assignIndexAnd() {
  var i = [87];
  return i
      /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
      /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
      [0] /*invoke: [exact=JSUInt31]*/ &= 42;
}

/*member: assignIndexInc:[subclass=JSPositiveInt]*/
assignIndexInc() {
  var i = [87];
  return i
      /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
      /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
      [0] /*invoke: [subclass=JSPositiveInt]*/ ++;
}

/*member: assignIndexDec:[subclass=JSInt]*/
assignIndexDec() {
  var i = [87];
  return /*invoke: [subclass=JSInt]*/ --i
      /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
      /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
      [0];
}
