From 02e700f4633b282ce33f42ad9f6e14f63afaea8b Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 26 Feb 2018 12:28:28 +0100 Subject: [PATCH] improved the number parser --- .../java/de/neemann/digital/core/Bits.java | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/Bits.java b/src/main/java/de/neemann/digital/core/Bits.java index e2581b347..8407989ec 100644 --- a/src/main/java/de/neemann/digital/core/Bits.java +++ b/src/main/java/de/neemann/digital/core/Bits.java @@ -158,31 +158,32 @@ public final class Bits { return 0; int radix; - switch (str.charAt(p)) { - case 'x': - case 'X': + if (wasZero) { + if (neg) throw new NumberFormatException(str, p); + switch (str.charAt(p)) { + case 'x': + case 'X': + radix = 16; + p++; + if (p == str.length()) throw new NumberFormatException(str, p); + break; + case 'b': + case 'B': + radix = 2; + p++; + if (p == str.length()) throw new NumberFormatException(str, p); + break; + default: + radix = 8; + } + } else { + if (str.charAt(p) == '\'') { if (neg) throw new NumberFormatException(str, p); - radix = 16; - p++; - if (p == str.length()) throw new NumberFormatException(str, p); - break; - case 'b': - case 'B': - if (neg) throw new NumberFormatException(str, p); - radix = 2; - p++; - if (p == str.length()) throw new NumberFormatException(str, p); - break; - case '\'': p++; if (p == str.length()) throw new NumberFormatException(str, p); return str.charAt(p); - default: - if (wasZero) { - if (neg) throw new NumberFormatException(str, p); - radix = 8; - } else - radix = 10; + } else + radix = 10; } long val = decode(str, p, radix);