blob: ebb9a5b6067f924476f806868f7c309cad635a31 [file] [log] [blame]
// Copyright (c) 2012, 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.
part of dart.core;
/// Runtime representation of a type.
///
/// Type objects represent types.
/// A type object can be created in several ways:
/// * By a *type literal*, a type name occurring as an expression,
/// like `Type type = int;`,
/// or a type variable occurring as an expression, like `Type type = T;`.
/// * By reading the run-time type of an object,
/// like `Type type = o.runtimeType;`.
/// * Through `dart:mirrors`.
///
/// A type object is intended as an entry point for using `dart:mirrors`.
/// The only operations supported are comparing to other type objects
/// for equality, and converting it to a string for debugging.
abstract class Type {
/// A hash code for the type which is compatible with [operator==].
int get hashCode;
/// Whether [other] is a [Type] instance representing an equivalent type.
///
/// The language specification dictates which types are considered
/// to be the equivalent.
/// If two types are equivalent, it's guaranteed that they are subtypes
/// of each other,
/// but there are also types which are subtypes of each other,
/// and which are not equivalent (for example `dynamic` and `void`,
/// or `FutureOr<Object>` and `Object`).
bool operator ==(Object other);
/// Returns a string which represents the underlying type.
///
/// The string is only intended for providing information to a reader
/// while debugging.
/// There is no guaranteed format,
/// the string value returned for a [Type] instances is entirely
/// implementation dependent.
///
/// The string should be consistent, so a `Type` object for the *same* type
/// returns the same string throughout a program execution.
/// The string may or may not contain parts corresponding to the
/// source name of declaration of the type, if the type has a source name
/// at all (some types reachable through `dart:mirrors` may not).
String toString();
}