aboutsummaryrefslogtreecommitdiff
path: root/src/json.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/json.cpp')
-rw-r--r--src/json.cpp30
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!");