/// Constructs a new
///
/// as a copy of another
///
/// .
///
/// If
///
/// is also a
///
/// instance, the newly
/// constructed token will share a reference to the
///
/// field and
/// the
///
/// stored in
///
/// . Otherwise,
///
/// will
/// be assigned the result of calling
///
/// , and
///
/// will be constructed from the result of
///
/// and
///
/// .
///
///