// 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.
//
// VMOptions=--verify-entry-points=true

// @dart = 2.9

import 'dart:io';
import 'dart:convert';
import 'dart:math';
import 'package:path/path.dart';
import 'package:expect/expect.dart';
import 'dart-ext:entrypoints_verification_test_extension';

void RunTest() native "RunTest";

main() {
  RunTest();

  new C();
  new D();
}

class C {}

@pragma("vm:entry-point")
class D {
  D();

  @pragma("vm:entry-point")
  D.defined();

  @pragma("vm:entry-point")
  factory D.fact() => E.ctor();

  void fn0() {}

  @pragma("vm:entry-point")
  void fn1() {}

  @pragma("vm:entry-point", "get")
  void fn1_get() {}

  @pragma("vm:entry-point", "call")
  void fn1_call() {}

  static void fn2() {}

  @pragma("vm:entry-point")
  static void fn3() {}

  @pragma("vm:entry-point", "call")
  static void fn3_call() {}

  @pragma("vm:entry-point", "get")
  static void fn3_get() {}

  void Function() fld0;

  @pragma("vm:entry-point")
  void Function() fld1;

  @pragma("vm:entry-point", "get")
  void Function() fld2;

  @pragma("vm:entry-point", "set")
  void Function() fld3;
}

void fn0() {}

@pragma("vm:entry-point")
void fn1() {}

@pragma("vm:entry-point", "get")
void fn1_get() {}

@pragma("vm:entry-point", "call")
void fn1_call() {}

class E extends D {
  E.ctor();
}

@pragma("vm:entry-point")
class F {
  static void Function() fld0;

  @pragma("vm:entry-point")
  static void Function() fld1;

  @pragma("vm:entry-point", "get")
  static void Function() fld2;

  @pragma("vm:entry-point", "set")
  static void Function() fld3;
}

void Function() fld0;

@pragma("vm:entry-point")
void Function() fld1;

@pragma("vm:entry-point", "get")
void Function() fld2;

@pragma("vm:entry-point", "set")
void Function() fld3;
