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

// @dart = 2.7

import 'dart:_foreign_helper' show JS;

import 'package:expect/expect.dart';

var x;

foo(c) {
  x = "in foo function";
  c.c_field = x;
}

@pragma('dart2js:noSideEffects')
@pragma('dart2js:noInline')
bar(d) {
  x = "in bar function";
  d.d_field = x;
}

class C {
  var c_field;
  m() => c_field;
}

class D {
  var d_field;
  m() => d_field;
}

@pragma('dart2js:noSideEffects')
@pragma('dart2js:noInline')
@pragma('dart2js:noThrows')
baz() {
  throw 'in baz function';
}

@pragma('dart2js:noInline')
geeNoInline() {
  // Use `gee` several times, so `gee` isn't used only once (and thus inlinable
  // independently of its size).
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
  gee();
}

@pragma('dart2js:tryInline')
// Big function that would normally not be inlinable.
gee([c]) {
  if (c != null) {
    x = "in gee function";
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
    geeNoInline();
  }
}

main() {
  JS('', 'String("in main function")');
  var c;
  if (new DateTime.now().millisecondsSinceEpoch != 42) {
    c = new C();
    print(c.m());
    foo(c);
    print(c.m());
  } else {
    var d = new D();
    print(d.m());
    bar(d);
    print(d.m());
  }
  print(c.m());
  simple();
  noinline();
  baz(); // This call should be eliminated by the optimizer.
  gee(new C());
  print(x);
  check(JS('', 'arguments.callee'));
}

@pragma('dart2js:noInline')
check(func) {
  JS('', 'String("in check function")');
  var source = JS('String', 'String(#)', func);
  print(source);
  Expect.isTrue(source.contains('"in main function"'), "should contain 'main'");
  Expect.isTrue(
      source.contains('"in simple function"'), "should inline 'simple'");
  Expect.isTrue(source.contains('"in foo function"'), "should inline 'foo'");
  Expect.isFalse(
      source.contains('"in bar function"'), "should not inline 'bar'");
  Expect.isFalse(
      source.contains('"in check function"'), "should not inline 'check'");
  Expect.isFalse(source.contains('"in noinline function"'),
      "should not inline 'noinline'");
  Expect.equals(2, new RegExp(r'\.c_field').allMatches(source).length,
      "should contain r'\.c_field' exactly twice");
  Expect.isFalse(
      source.contains('.d_field'), "should not contain r'\.d_field'");
  Expect.isTrue(source.contains('"in gee function"'), "must inline 'gee'");
}

simple() {
  JS('', 'String("in simple function")');
}

@pragma('dart2js:noInline')
noinline() {
  JS('', 'String("in noinline function")');
}
