blob: 65cef39d3980c002e00601c235de389cddeb95e0 [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();
}