From c792986768a2f3d42fc6113fb8b5459fdbf5a0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Ros=C3=A9n?= Date: Tue, 22 Oct 2019 21:14:32 +0200 Subject: [PATCH] Teach JSON parser negative numbers --- src/json_ui.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/json_ui.cc b/src/json_ui.cc index ebb3b7bf..a0294f3e 100644 --- a/src/json_ui.cc +++ b/src/json_ui.cc @@ -257,7 +257,7 @@ void JsonUI::set_on_key(OnKeyCallback callback) using JsonArray = Vector; using JsonObject = HashMap; -static bool is_digit(char c) { return c >= '0' and c <= '9'; } +static bool is_digit_or_minus(char c) { return (c >= '0' and c <= '9') or c == '-'; } struct JsonResult { Value value; const char* new_pos; }; @@ -266,10 +266,10 @@ JsonResult parse_json(const char* pos, const char* end) if (not skip_while(pos, end, is_blank)) return {}; - if (is_digit(*pos)) + if (is_digit_or_minus(*pos)) { auto digit_end = pos; - skip_while(digit_end, end, is_digit); + skip_while(digit_end, end, is_digit_or_minus); return { Value{str_to_int({pos, digit_end})}, digit_end }; } if (end - pos > 4 and StringView{pos, pos+4} == "true") @@ -523,6 +523,11 @@ UnitTest test_json_parser{[]() kak_assert(value.as().at(1).as() == 20); } + { + auto value = parse_json("-1").value; + kak_assert(value.as() == -1); + } + { auto value = parse_json("{}").value; kak_assert(value and value.is_a());