//===--- Mirrors.swift.gyb - Common _Mirror implementations ---*- swift -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

%{

from SwiftIntTypes import all_integer_types

# Number of bits in the Builtin.Word type
word_bits = int(CMAKE_SIZEOF_VOID_P) * 8

Types = [
    ('Float', '.float', 'self'),
    ('Double', '.double', 'self'),
    ('Bool', '.bool', 'self'),
    ('String', '.text', 'self'),
    ('Character', '.text', 'String(self)'),
    ('Unicode.Scalar', '.uInt', 'UInt64(self)'),
]

for self_ty in all_integer_types(word_bits):
  Self = self_ty.stdlib_name
  if self_ty.is_signed:
    Types.append( (Self, '.int', 'Int64(self)') )
  else:
    Types.append( (Self, '.uInt', 'UInt64(self)') )

}%

%for Type in Types:

extension ${Type[0]} : CustomReflectable {
  /// A mirror that reflects the `${Type[0]}` instance.
  public var customMirror: Mirror {
    return Mirror(self, unlabeledChildren: EmptyCollection<Void>())
  }
}

extension ${Type[0]} : _CustomPlaygroundQuickLookable {
  /// A custom playground Quick Look for the `${Type[0]}` instance.
  @available(*, deprecated, message: "${Type[0]}.customPlaygroundQuickLook will be removed in a future Swift version")
  public var customPlaygroundQuickLook: _PlaygroundQuickLook {
    return ${Type[1]}(${Type[2]})
  }
}
% end

#if !os(Windows) && (arch(i386) || arch(x86_64))
extension Float80 : CustomReflectable {
  /// A mirror that reflects the Float80 instance.
  public var customMirror: Mirror {
    return Mirror(self, unlabeledChildren: EmptyCollection<Void>())
  }
}
#endif

// ${'Local Variables'}:
// eval: (read-only-mode 1)
// End: