diff --git a/src/parser/nodes/identifier.cpp b/src/parser/nodes/identifier.cpp index f2286de..f30b3b7 100644 --- a/src/parser/nodes/identifier.cpp +++ b/src/parser/nodes/identifier.cpp @@ -1,6 +1,5 @@ #include "parser/nodes/identifier.hpp" #include -#include #include "parser/ast_json.hpp" IdentifierNode::IdentifierNode() { kind = ASTKind::Identifier; } @@ -11,14 +10,10 @@ void IdentifierNode::log(int indent) { } std::string IdentifierNode::toJson(int depth) { - std::string in = jsonIndent(depth); - std::string name = parserToken.token ? parserToken.token->token : "?"; - std::ostringstream ss; - ss << "{\n" - << in << " \"kind\": \"Identifier\",\n" - << in << " \"name\": \"" << jsonEscape(name) << "\",\n" - << in << " \"resolvedType\": " << resolvedTypeJson() << ",\n" - << in << " \"location\": " << loc.toJson() << "\n" - << in << "}"; - return ss.str(); + JsonObject obj(depth); + obj.add("kind", "Identifier"); + obj.add("name", parserToken.token ? parserToken.token->token : "?"); + obj.addRaw("resolvedType", resolvedTypeJson()); + obj.addRaw("location", loc.toJson()); + return obj.str(); } diff --git a/src/parser/nodes/literal.cpp b/src/parser/nodes/literal.cpp index 4b9db1e..73d8983 100644 --- a/src/parser/nodes/literal.cpp +++ b/src/parser/nodes/literal.cpp @@ -1,6 +1,5 @@ #include "parser/nodes/literal.hpp" #include -#include #include "parser/ast_json.hpp" LiteralNode::LiteralNode() { kind = ASTKind::Literal; } @@ -18,22 +17,17 @@ void LiteralNode::log(int indent) { } std::string LiteralNode::toJson(int depth) { - std::string in = jsonIndent(depth); std::string val = hasDirectValue ? std::to_string(directIntValue) : (parserToken.token ? parserToken.token->token : "?"); - std::ostringstream ss; - ss << "{\n" - << in << " \"kind\": \"Literal\",\n" - << in << " \"literalType\": \"" << literalTypeToString(literalType) << "\",\n" - << in << " \"value\": \"" << jsonEscape(val) << "\""; - if (literalType == LiteralType::INTEGER && literalBase != 10) { - ss << ",\n" << in << " \"base\": " << literalBase; - } - if (literalType == LiteralType::FLOAT) { - ss << ",\n" << in << " \"isFloat\": true"; - } - ss << ",\n" << in << " \"resolvedType\": " << resolvedTypeJson(); - ss << ",\n" << in << " \"location\": " << loc.toJson() << "\n" - << in << "}"; - return ss.str(); + JsonObject obj(depth); + obj.add("kind", "Literal"); + obj.add("literalType", literalTypeToString(literalType)); + obj.add("value", val); + if (literalType == LiteralType::INTEGER && literalBase != 10) + obj.add("base", literalBase); + if (literalType == LiteralType::FLOAT) + obj.add("isFloat", true); + obj.addRaw("resolvedType", resolvedTypeJson()); + obj.addRaw("location", loc.toJson()); + return obj.str(); }