diff options
Diffstat (limited to 'src/json.cpp')
| -rw-r--r-- | src/json.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/json.cpp b/src/json.cpp index 25779b9..9d53582 100644 --- a/src/json.cpp +++ b/src/json.cpp @@ -1,4 +1,4 @@ -#include "json.h" +#include "json.hpp" #include "tokenizer.h" #include <cstddef> @@ -131,19 +131,27 @@ namespace TehJSON case TokenType::LSquare: { consume(TokenType::LSquare); - std::vector<int> vec; - while(nextTokenType() != TokenType::RSquare) + switch(nextTokenType()) { - if(nextTokenType() != TokenType::IntLit) - throw std::runtime_error("Only int arrays are supported so far"); - vec.push_back(std::stoi(consume(TokenType::IntLit).content)); - if(nextTokenType() == TokenType::Comma) - { - consume(TokenType::Comma); - } + case TokenType::IntLit: + children[childName.content].set<int>( + readVector<int>(TokenType::IntLit, + [](std::string x){return std::stoi(x);}));break; + case TokenType::FloatLit: + children[childName.content].set<float>( + readVector<float>(TokenType::FloatLit, + [](std::string x){return std::stof(x);}));break; + case TokenType::StringLit: + children[childName.content].set<std::string>( + readVector<std::string>( + TokenType::StringLit, [](std::string x){return x;}));break; + case TokenType::BoolLit: + children[childName.content].set<bool>( + readVector<bool>( + TokenType::BoolLit, [](std::string x){return x=="true";}));break; + default: throw std::runtime_error("Arrays can only be of literals so far"); } consume(TokenType::RSquare); - children[childName.content].set<int>(vec); break; }; default: throw std::runtime_error("Token type is not a literal!"); |
