Skip to content

Commit a41193f

Browse files
committed
fix decimal parsing
1 parent fcc3cb7 commit a41193f

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

source/mir/bignum/decimal.d

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,6 @@ struct Decimal(size_t maxSize64)
349349
return true;
350350
}
351351
}
352-
key = cast(DecimalExponentKey)d;
353352
static if (allowUnderscores)
354353
{
355354
if (recentUnderscore)
@@ -358,6 +357,7 @@ struct Decimal(size_t maxSize64)
358357
switch (d)
359358
{
360359
case DecimalExponentKey.dot:
360+
key = DecimalExponentKey.dot;
361361
if (_expect(dot, false))
362362
break;
363363
dot = true;
@@ -388,6 +388,7 @@ struct Decimal(size_t maxSize64)
388388
case DecimalExponentKey.e:
389389
case DecimalExponentKey.E:
390390
import mir.parse: parse;
391+
key = cast(DecimalExponentKey)d;
391392
if (parse(str, exponent) && str.length == 0)
392393
goto E;
393394
break;
@@ -468,6 +469,10 @@ struct Decimal(size_t maxSize64)
468469
assert(key == DecimalExponentKey.e);
469470
assert(cast(double) decimal == 0.334e-5);
470471

472+
assert(decimal.fromStringImpl("100_000_000"w, key));
473+
assert(key == DecimalExponentKey.none);
474+
assert(cast(double) decimal == 1e8);
475+
471476
assert(decimal.fromStringImpl("-334D-5"d, key));
472477
assert(key == DecimalExponentKey.D);
473478
assert(cast(double) decimal == -334e-5);

source/mir/bignum/low_level_view.d

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2205,7 +2205,6 @@ struct DecimalView(W, WordEndian endian = TargetEndian, Exp = sizediff_t)
22052205

22062206
continue;
22072207
}
2208-
key = cast(DecimalExponentKey)d;
22092208
static if (allowUnderscores)
22102209
{
22112210
if (recentUnderscore)
@@ -2214,6 +2213,7 @@ struct DecimalView(W, WordEndian endian = TargetEndian, Exp = sizediff_t)
22142213
switch (d)
22152214
{
22162215
case DecimalExponentKey.dot:
2216+
key = DecimalExponentKey.dot;
22172217
if (_expect(dot, false))
22182218
break;
22192219
dot = true;
@@ -2244,6 +2244,7 @@ struct DecimalView(W, WordEndian endian = TargetEndian, Exp = sizediff_t)
22442244
case DecimalExponentKey.e:
22452245
case DecimalExponentKey.E:
22462246
import mir.parse: parse;
2247+
key = cast(DecimalExponentKey)d;
22472248
if (parse(str, exponent) && str.length == 0)
22482249
{
22492250
if (t != 1)

0 commit comments

Comments
 (0)