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

/*element: method1:params=0*/
@pragma('dart2js:noInline')
method1([a]) => /*access=[a],params=0*/ () => a;

class Class {
  /*element: Class.f:emitted*/
  @pragma('dart2js:noElision')
  var f;

  /*element: Class.capture:params=0*/
  @pragma('dart2js:noInline')
  Class.capture([a]) : f = (/*access=[a],params=0*/ () => a);

  // TODO(johnniwinther): Remove the redundant assignment of elided boxed
  // parameters.
  /*element: Class.box:assign=[a,a],params=0*/
  @pragma('dart2js:noInline')
  Class.box([a])
      : f = (/*access=[_box_0],assign=[a],params=0*/ () {
          a = 42;
        });

  Class.internal(this.f);
}

class Subclass extends Class {
  /*element: Subclass.capture:params=0*/
  @pragma('dart2js:noInline')
  Subclass.capture([a]) : super.internal(/*access=[a],params=0*/ () => a);

  /*element: Subclass.box:assign=[a,a],params=0*/
  @pragma('dart2js:noInline')
  Subclass.box([a])
      : super.internal(/*access=[_box_0],assign=[a],params=0*/ () {
          a = 42;
        });
}

/*element: main:calls=*,params=0*/
main() {
  method1();
  new Class.capture();
  new Class.box();
  new Subclass.capture();
  new Subclass.box();
}
