diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-11 02:03:37 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-11 02:03:37 +0100 |
commit | b74936760e28a92cadfaec47928ea478fe2d72ee (patch) | |
tree | 56f5ab70b6d4f4b7ebad99e61f45474dec60bc1e /src | |
parent | b5d3f907b61d838325e4ee8a2c80d36fea438537 (diff) |
using reader.fork for skipping invalid numbers in parseGeneric
Diffstat (limited to 'src')
-rw-r--r-- | src/core/variant/Reader.cpp | 16 |
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()); } } |