summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-12-11 02:03:37 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-12-11 02:03:37 +0100
commitb74936760e28a92cadfaec47928ea478fe2d72ee (patch)
tree56f5ab70b6d4f4b7ebad99e61f45474dec60bc1e /src
parentb5d3f907b61d838325e4ee8a2c80d36fea438537 (diff)
using reader.fork for skipping invalid numbers in parseGeneric
Diffstat (limited to 'src')
-rw-r--r--src/core/variant/Reader.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/core/variant/Reader.cpp b/src/core/variant/Reader.cpp
index 3f1934e..5c167cd 100644
--- a/src/core/variant/Reader.cpp
+++ b/src/core/variant/Reader.cpp
@@ -577,11 +577,19 @@ std::pair<bool, Variant> Reader::parseGeneric(
// TODO: Parse struct descriptor
}
- // Try to parse a number if a character in [0-9-] is reached
+ // Try to parse everything that looks like a number as number
if (Utils::isNumeric(c) || c == '-') {
- reader.resetPeek();
Number n;
- if (n.parse(reader, logger, delims)) {
+
+ // Fork the reader
+ utils::CharReaderFork fork = reader.fork();
+
+ // TODO: Fork logger
+
+ // Try to parse the number
+ if (n.parse(fork, logger, delims)) {
+ // Parsing was successful, advance the reader
+ fork.commit();
if (n.isInt()) {
return std::make_pair(
true,
@@ -589,8 +597,6 @@ std::pair<bool, Variant> Reader::parseGeneric(
} else {
return std::make_pair(true, n.doubleValue());
}
- } else {
- return std::make_pair(false, n.doubleValue());
}
}