// 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.
// Dart test program for testing setting/getting of instance fields.

// @dart = 2.9

import "package:expect/expect.dart";

// dart2js used to have a bug where a local called '_' in the constructor
// shadowed the parameter named after a field. This lead to the field being
// initialized to 'this' (a cycle) rather than the correct initializer value.
//
// This test is in the language tests rather than dart2js specific tests since
// the dart2js specific tests are not run in all configurations that could
// tickle this issue.

int ii = 0;

class Thing {
  var _;
  var $_;
  // Extra fields to make use of local in constructor beneficial and to exhaust
  // single-character names.
  var a = ++ii, b = ++ii, c = ++ii, d = ++ii, e = ++ii;
  var f = ++ii, g = ++ii, h = ++ii, i = ++ii, j = ++ii;
  var k = ++ii, l = ++ii, m = ++ii, n = ++ii, o = ++ii;
  var p = ++ii, q = ++ii, r = ++ii, s = ++ii, t = ++ii;
  var u = ++ii, v = ++ii, w = ++ii, x = ++ii, y = ++ii;
  var z = ++ii;
  var A = ++ii, B = ++ii, C = ++ii, D = ++ii, E = ++ii;
  var F = ++ii, G = ++ii, H = ++ii, I = ++ii, J = ++ii;
  var K = ++ii, L = ++ii, M = ++ii, N = ++ii, O = ++ii;
  var P = ++ii, Q = ++ii, R = ++ii, S = ++ii, T = ++ii;
  var U = ++ii, V = ++ii, W = ++ii, X = ++ii, Y = ++ii;
  var Z = ++ii;
  var $ = ++ii;

  var f30 = ++ii, f31 = ++ii, f32 = ++ii, f33 = ++ii, f34 = ++ii;
  var f35 = ++ii, f36 = ++ii, f37 = ++ii, f38 = ++ii, f39 = ++ii;
  var f40 = ++ii, f41 = ++ii, f42 = ++ii, f43 = ++ii, f44 = ++ii;
  var f45 = ++ii, f46 = ++ii, f47 = ++ii, f48 = ++ii, f49 = ++ii;
  var f50 = ++ii, f51 = ++ii, f52 = ++ii, f53 = ++ii, f54 = ++ii;
  var f55 = ++ii, f56 = ++ii, f57 = ++ii, f58 = ++ii, f59 = ++ii;

  @pragma('dart2js:noInline')
  Thing(this._, this.$_);
  toString() {
    if (depth > 0) return 'recursion!';
    try {
      ++depth;
      var sum = a +
          b +
          c +
          d +
          e +
          f +
          g +
          h +
          i +
          j +
          k +
          l +
          m +
          n +
          o +
          p +
          q +
          r +
          s +
          t +
          u +
          v +
          w +
          x +
          y +
          z +
          A +
          B +
          C +
          D +
          E +
          F +
          G +
          H +
          I +
          J +
          K +
          L +
          M +
          N +
          O +
          P +
          Q +
          R +
          S +
          T +
          U +
          V +
          W +
          X +
          Y +
          Z +
          $ +
          f30 +
          f31 +
          f32 +
          f33 +
          f34 +
          f35 +
          f36 +
          f37 +
          f38 +
          f39 +
          f40 +
          f41 +
          f42 +
          f43 +
          f44 +
          f45 +
          f46 +
          f47 +
          f48 +
          f49 +
          f50 +
          f51 +
          f52 +
          f53 +
          f54 +
          f55 +
          f56 +
          f57 +
          f58 +
          f59;
      return 'Thing(${_}, ${$_}, ${sum})';
    } finally {
      --depth;
    }
  }

  static int depth = 0;
}

main() {
  var t1 = new Thing(1, 2);
  var t2 = new Thing(3, 4);
  var t3 = [];

  Expect.equals(
      '[Thing(1, 2, 3486), Thing(3, 4, 10375), []]', '${[t1, t2, t3]}');
}
