// 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:[]*/
main() {
  forceInlineDynamic();
  forceInlineOptional();
}

////////////////////////////////////////////////////////////////////////////////
// Force inline a dynamic call.
////////////////////////////////////////////////////////////////////////////////

class Class1 {
  /*member: Class1.:[]*/
  @pragma('dart2js:noInline')
  Class1();

  /*member: Class1.method:[forceInlineDynamic]*/
  @pragma('dart2js:tryInline')
  method() {}
}

/*member: forceInlineDynamic:[]*/
@pragma('dart2js:noInline')
forceInlineDynamic() {
  new Class1().method();
}

////////////////////////////////////////////////////////////////////////////////
// Force inline a instance method with optional argument.
////////////////////////////////////////////////////////////////////////////////

class Class2 {
  /*member: Class2.:[]*/
  @pragma('dart2js:noInline')
  Class2();

  /*member: Class2.method:[forceInlineOptional]*/
  @pragma('dart2js:tryInline')
  method([x]) {}
}

/*member: forceInlineOptional:[]*/
@pragma('dart2js:noInline')
forceInlineOptional() {
  new Class2().method();
}
