refactor(ast): LiteralNode ve IdentifierNode toJson spagetti → JsonObject
Elle yönetilen ostringstream + virgül/kapanış manipülasyonu kaldırıldı; VariableDeclNode ile aynı JsonObject builder pattern'ına geçildi. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
636bfcc6d5
commit
77bcd1c9d6
|
|
@ -1,6 +1,5 @@
|
|||
#include "parser/nodes/identifier.hpp"
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#include "parser/nodes/literal.hpp"
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue