/*
 * 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 final variable is a variable whose binding is fixed upon
 * initialization; a final variable v will always refer to the same object
 * after v has been initialized. The declaration of a final variable must
 * include the modifier final.
 * It is a static warning if a final instance variable that has been
 * initialized at its point of declaration  is  also initialized in a
 * constructor.
 * It is a compile-time error if a local variable v is final and v is not
 * initialized at its point of declaration.
 * @description Checks that it is a compile error to initialize final instance
 * variable both in initializing formal and initializer list
 * (Classes/Constructors/Generative Constructors)
 * @compile-error
 * @author rodionov
 */

class C {
  final v;
  
  C(this.v) : v = 1 {}
}

main() {
    new C(1);
}
