// 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 Execution of a generative constructor k is always done with
/// respect to a set of bindings for its formal parameters and with this bound
/// to a fresh instance i and the type parameters of the immediately enclosing
/// class bound to a set of actual type arguments V1, ... , Vm.
/// If k is redirecting then its redirect clause has the form
///   this.g(a1, ..., an, xn+1: an+1, ..., xn+k: an+k)
/// where g identifies another generative constructor of the immediately
/// surrounding class. Then execution of k proceeds by evaluating the argument
/// list (a1, ..., an, xn+1: an+1, ..., xn+k: an+k) and then executing g with
/// respect to the bindings resulting from the evaluation of (a1, ..., an, xn+1:
/// an+1, ..., xn+k: an+k) and with this bound to i and the type parameters of
/// the immediately enclosing class bound to V1, ... , Vm.
/// Otherwise, execution  proceeds as follows:
/// Any initializing formals declared in k's parameter list are executed in the
/// order they appear in the program text. Then, k's initializers are executed
/// in the order they appear in the program.
/// After all the initializers have completed, the body of k is executed in a
/// scope where this is bound to i. Execution of the body begins with execution
/// of the body of the superconstructor with this bound to i, the type
/// parameters of the immediately enclosing class bound to a set of actual type
/// arguments V1, ... , Vm and the formal parameter bindings determined by the
/// argument list of the superinitializer of k.
/// @description Checks that the constructor body is executed after all
/// initializers and 'this' reference as well as all instance fields are
/// accessible in the constructor body.
/// @author iefremov
/// @needsreview It seems to be impossible to verify the order initialized
/// variable declarations are processed because we can't invoke any methods
/// there which would help observe the exact sequence. Same about the
/// initializing formals.

import "../../../../Utils/expect.dart";

class C {
  C(this.f) : c = "c", d = "d", e = "e" {
    Expect.equals(1, a, "Instance variable should already be initialized!");
    Expect.equals("You are not paid to think!", this.b,
        "Instance variable should already be initialized!");
    Expect.equals("c", this.c,
        "Instance variable should already be initialized!");
    Expect.equals("d", d, "Instance variable should already be initialized!");
    Expect.equals("e", e, "Instance variable should already be initialized!");
    Expect.equals("f", f, "Instance variable should already be initialized!");
  }

  var e, d, c;
  var f;
  var a = 1;
  final b = "You are not paid to think!";
}

main() {
  new C("f");
}
