//===--- StringInterpolation.swift.gyb - String Interpolation -*- swift -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://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 StreamableTypes = [ 'String', 'Character', 'UnicodeScalar', ] PrintableTypes = [ 'Bool', 'Float32', 'Float64' ] for int_ty in all_integer_types(word_bits): PrintableTypes.append(int_ty.stdlib_name) }% extension String : StringInterpolationConvertible { /// Create an instance by concatenating the elements of `strings`. @effects(readonly) public init(stringInterpolation strings: String...) { self.init() for str in strings { self += str } } /// Create an instance containing `expr`'s `print` representation. public init(stringInterpolationSegment expr: T) { self = String(expr) } % for Type in StreamableTypes: public init(stringInterpolationSegment expr: ${Type}) { self = _toStringReadOnlyStreamable(expr) } % end % for Type in PrintableTypes: public init(stringInterpolationSegment expr: ${Type}) { self = _toStringReadOnlyPrintable(expr) } % end } // ${'Local Variables'}: // eval: (read-only-mode 1) // End: