|  | // 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. | 
|  |  | 
|  | part of dart.core; | 
|  |  | 
|  | /// Opaque name used by mirrors, invocations and [Function.apply]. | 
|  | abstract class Symbol { | 
|  | /** | 
|  | * Constructs a new Symbol. | 
|  | * | 
|  | * The name must be a valid public Dart member name, | 
|  | * public constructor name, or library name, optionally qualified. | 
|  | * | 
|  | * A qualified name is a valid name preceded by a public identifier name | 
|  | * and a '`.`', e.g., `foo.bar.baz=` is a qualified version of `baz=`. | 
|  | * That means that the content of the [name] String must be either | 
|  | * | 
|  | * * a valid public Dart identifier | 
|  | *   (that is, an identifier not starting with "`_`"), | 
|  | * * such an identifier followed by "=" (a setter name), | 
|  | * * the name of a declarable operator | 
|  | *   (one of "`+`", "`-`", "`*`", "`/`", "`%`", "`~/`", "`&`", "`|`", | 
|  | *   "`^`", "`~`", "`<<`", "`>>`", "`<`", "`<=`", "`>`", "`>=`", "`==`", | 
|  | *   "`[]`", "`[]=`", or "`unary-`"), | 
|  | * * any of the above preceded by any number of qualifiers, | 
|  | *   where a qualifier is a non-private identifier followed by '`.`', | 
|  | * * or the empty string (the default name of a library with no library | 
|  | *   name declaration). | 
|  | * | 
|  | * The following text is non-normative: | 
|  | * | 
|  | * Creating non-const Symbol instances may result in larger output.  If | 
|  | * possible, use `MirrorsUsed` from "dart:mirrors" to specify which names | 
|  | * might be passed to this constructor. | 
|  | */ | 
|  | const factory Symbol(String name) = internal.Symbol; | 
|  |  | 
|  | /** | 
|  | * Returns a hash code compatible with [operator==]. | 
|  | * | 
|  | * Equal symbols have the same hash code. | 
|  | */ | 
|  | int get hashCode; | 
|  |  | 
|  | /** | 
|  | * Symbols are equal to other symbols that correspond to the same member name. | 
|  | * | 
|  | * Qualified member names, like `#foo.bar` are equal only if they have the | 
|  | * same identifiers before the same final member name. | 
|  | */ | 
|  | bool operator ==(other); | 
|  | } |