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

import "split_constants_canonicalization_test.dart";

@pragma("vm:never-inline")
mint() => 0x7FFFFFFFFFFFF000;

@pragma("vm:never-inline")
string() => "We all have identical strings";

@pragma("vm:never-inline")
list() => const <String>["We all have identical lists"];

@pragma("vm:never-inline")
map() => const <String, String>{"We all have": "identical maps"};

@pragma("vm:never-inline")
box() => const Box("We all have identical boxes");

@pragma("vm:never-inline")
enumm() => Enum.GREEN;

@pragma("vm:never-inline")
type() => Box;

@pragma("vm:never-inline")
closure() => commonClosure;
