// 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.

/// Constants for use in metadata annotations to provide hints to dart2js,
/// which is the compiler used by `dart compile js`.
///
/// This is an experimental feature and not expected to be useful except for low
/// level framework authors.
// ignore: unnecessary_library_name
library meta_dart2js;

/// An annotation for methods to request that dart2js does not inline the
/// method.
///
/// ```dart
/// import 'package:meta/dart2js.dart' as dart2js;
///
/// @dart2js.noInline
/// String text() => 'A String of unusual size';
/// ```
///
/// It is an error to use both `@noInline` and `@tryInline` on the same method.
const noInline = pragma('dart2js:noInline');

/// An annotation for methods to request that dart2js always inline the
/// method.
///
/// dart2js will attempt to inline the method regardless of its size. Even with
/// this annotation, there are conditions that can prevent dart2js from inlining
/// a method, including complex control flow.
///
/// ```dart
/// import 'package:meta/dart2js.dart' as dart2js;
///
/// @dart2js.tryInline
/// String bigMethod() {
///   for (int i in "Hello".runes) print(i);
/// }
/// ```
///
/// It is an error to use both `@noInline` and `@tryInline` on the same method.
const tryInline = pragma('dart2js:tryInline');
