// 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;

/// The reserved word `null` denotes an object that is the sole instance of
/// this class.
///
/// The `Null` class is the only class which does not implement `Object`.
/// It is a compile-time error for a class to attempt to extend or implement
/// [Null].
///
/// The language contains a number of specialized operators for working with
/// `null` value. Examples:
/// ```dart
/// e1!       // Throws if e1 is null.
/// e2 ?? e3  // Same as e2, unless e2 is null, then use value of e3
/// x ??= e4  // Same as x unless x is null, then same as `x = e4`.
/// e5?.foo() // call `foo` on e5, unless e5 is null.
/// [...? e6] // spreads e6 into the list literal, unless e6 is null.
/// ```
@pragma("vm:entry-point")
class Null {
  factory Null._uninstantiable() {
    throw UnsupportedError('class Null cannot be instantiated');
  }

  external int get hashCode;

  /// Returns the string `"null"`.
  String toString() => "null";
}
