Skip to content

Commit c3ac97d

Browse files
ultramiraculousChris Williams
authored andcommitted
SE-0080 - Failable Float->Int initializers
1 parent 1d6c3b8 commit c3ac97d

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

stdlib/public/core/FixedPoint.swift.gyb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ extension ${Self} {
542542
// Construction of integers from floating point numbers.
543543
% for srcBits in allFloatBits:
544544
% Src = floatName[srcBits]
545-
% (lower, upper) = getFtoIBounds(srcBits, int(bits), signed)
545+
% (lower, upper) = getFtoIBounds(floatBits=srcBits, intBits=int(bits), signed=signed)
546546

547547
% if srcBits == 80:
548548
#if !os(Windows) && (arch(i386) || arch(x86_64))
@@ -560,6 +560,14 @@ extension ${Self} {
560560
self._value = Builtin.fpto${sign}i_FPIEEE${srcBits}_${BuiltinName}(value._value)
561561
}
562562

563+
/// Creates a ${Self} whose value is `value`
564+
/// if no rounding is necessary, nil otherwise.
565+
@inline(__always)
566+
public init?(exactly value: ${Src}) {
567+
self._value = Builtin.fpto${sign}i_FPIEEE${srcBits}_${BuiltinName}(value._value)
568+
if ${Src}(self) != value {
569+
return nil
570+
}
563571
}
564572
% if srcBits == 80:
565573
#endif

0 commit comments

Comments
 (0)