Skip to content

Commit f314024

Browse files
authored
Merge pull request #7377 from kinke/format
Fix std.format FP printing for soft-float targets
2 parents b698b6a + f9c2b54 commit f314024

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

.dscanner.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ label_var_same_name_check="-std.algorithm.iteration,-std.algorithm.sorting,-std.
276276
; Checks for subtraction from .length properties
277277
length_subtraction_check="+disabled"
278278
;length_subtraction_check="-std.algorithm.internal,-std.algorithm.iteration,-std.algorithm.mutation,-std.algorithm.searching,-std.algorithm.sorting,-std.array,-std.concurrency,-std.container.array,-std.container.binaryheap,-std.conv,-std.datetime.timezone,-std.experimental.allocator.building_blocks.segregator,-std.experimental.logger.core,-std.file,-std.format,-std.getopt,-std.internal.math.biguintcore,-std.internal.math.biguintnoasm,-std.internal.math.biguintx86,-std.internal.scopebuffer,-std.math,-std.net.curl,-std.net.isemail,-std.numeric,-std.parallelism,-std.path,-std.process,-std.range,-std.regex,-std.regex.internal.parser,-std.regex.internal.tests,-std.string,-std.uni,-std.windows.charset,-std.windows.registry,-std.zip"
279+
; Checks for local imports that are too broad
280+
local_import_check="-std.format"
279281
; Checks for confusing logical operator precedence
280282
logical_precedence_check="+disabled"
281283
;logical_precedence_check="-std.algorithm.mutation,-std.algorithm.searching,-std.algorithm.setops,-std.algorithm.sorting,-std.array,-std.container.array,-std.conv,-std.experimental.checkedint,-std.file,-std.format,-std.getopt,-std.math,-std.net.isemail,-std.path,-std.range,-std.range.primitives,-std.stdio,-std.string"

std/format.d

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2659,27 +2659,31 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char))
26592659
{
26602660
static if (is(T == float) || is(T == double) || (is(T == real) && T.mant_dig == double.mant_dig))
26612661
{
2662-
import std.math : FloatingPointControl;
2662+
import std.math;
26632663

26642664
auto mode = RoundingMode.toNearestTiesToEven;
2665-
switch (FloatingPointControl.rounding)
2665+
2666+
// std.math's FloatingPointControl isn't available on all target platforms
2667+
static if (is(FloatingPointControl))
26662668
{
2667-
case FloatingPointControl.roundUp:
2668-
mode = RoundingMode.up;
2669-
break;
2670-
case FloatingPointControl.roundDown:
2671-
mode = RoundingMode.down;
2672-
break;
2673-
case FloatingPointControl.roundToZero:
2674-
mode = RoundingMode.toZero;
2675-
break;
2676-
case FloatingPointControl.roundToNearest:
2677-
mode = RoundingMode.toNearestTiesToEven;
2678-
break;
2679-
default: assert(false);
2669+
switch (FloatingPointControl.rounding)
2670+
{
2671+
case FloatingPointControl.roundUp:
2672+
mode = RoundingMode.up;
2673+
break;
2674+
case FloatingPointControl.roundDown:
2675+
mode = RoundingMode.down;
2676+
break;
2677+
case FloatingPointControl.roundToZero:
2678+
mode = RoundingMode.toZero;
2679+
break;
2680+
case FloatingPointControl.roundToNearest:
2681+
mode = RoundingMode.toNearestTiesToEven;
2682+
break;
2683+
default: assert(false);
2684+
}
26802685
}
26812686

2682-
26832687
buf = printFloat(val, fs, mode).dup;
26842688
len = buf.length;
26852689
}

0 commit comments

Comments
 (0)