feat: ADR-024/025/021 — string concat, try/catch/throw, nullable akış-analizi #115

Merged
saqut merged 60 commits from 0.1.0 into master 2026-06-20 21:36:43 +03:00
2 changed files with 17 additions and 28 deletions
Showing only changes of commit 77bcd1c9d6 - Show all commits

View File

@ -1,6 +1,5 @@
#include "parser/nodes/identifier.hpp" #include "parser/nodes/identifier.hpp"
#include <iostream> #include <iostream>
#include <sstream>
#include "parser/ast_json.hpp" #include "parser/ast_json.hpp"
IdentifierNode::IdentifierNode() { kind = ASTKind::Identifier; } IdentifierNode::IdentifierNode() { kind = ASTKind::Identifier; }
@ -11,14 +10,10 @@ void IdentifierNode::log(int indent) {
} }
std::string IdentifierNode::toJson(int depth) { std::string IdentifierNode::toJson(int depth) {
std::string in = jsonIndent(depth); JsonObject obj(depth);
std::string name = parserToken.token ? parserToken.token->token : "?"; obj.add("kind", "Identifier");
std::ostringstream ss; obj.add("name", parserToken.token ? parserToken.token->token : "?");
ss << "{\n" obj.addRaw("resolvedType", resolvedTypeJson());
<< in << " \"kind\": \"Identifier\",\n" obj.addRaw("location", loc.toJson());
<< in << " \"name\": \"" << jsonEscape(name) << "\",\n" return obj.str();
<< in << " \"resolvedType\": " << resolvedTypeJson() << ",\n"
<< in << " \"location\": " << loc.toJson() << "\n"
<< in << "}";
return ss.str();
} }

View File

@ -1,6 +1,5 @@
#include "parser/nodes/literal.hpp" #include "parser/nodes/literal.hpp"
#include <iostream> #include <iostream>
#include <sstream>
#include "parser/ast_json.hpp" #include "parser/ast_json.hpp"
LiteralNode::LiteralNode() { kind = ASTKind::Literal; } LiteralNode::LiteralNode() { kind = ASTKind::Literal; }
@ -18,22 +17,17 @@ void LiteralNode::log(int indent) {
} }
std::string LiteralNode::toJson(int depth) { std::string LiteralNode::toJson(int depth) {
std::string in = jsonIndent(depth);
std::string val = hasDirectValue ? std::to_string(directIntValue) std::string val = hasDirectValue ? std::to_string(directIntValue)
: (parserToken.token ? parserToken.token->token : "?"); : (parserToken.token ? parserToken.token->token : "?");
std::ostringstream ss; JsonObject obj(depth);
ss << "{\n" obj.add("kind", "Literal");
<< in << " \"kind\": \"Literal\",\n" obj.add("literalType", literalTypeToString(literalType));
<< in << " \"literalType\": \"" << literalTypeToString(literalType) << "\",\n" obj.add("value", val);
<< in << " \"value\": \"" << jsonEscape(val) << "\""; if (literalType == LiteralType::INTEGER && literalBase != 10)
if (literalType == LiteralType::INTEGER && literalBase != 10) { obj.add("base", literalBase);
ss << ",\n" << in << " \"base\": " << literalBase; if (literalType == LiteralType::FLOAT)
} obj.add("isFloat", true);
if (literalType == LiteralType::FLOAT) { obj.addRaw("resolvedType", resolvedTypeJson());
ss << ",\n" << in << " \"isFloat\": true"; obj.addRaw("location", loc.toJson());
} return obj.str();
ss << ",\n" << in << " \"resolvedType\": " << resolvedTypeJson();
ss << ",\n" << in << " \"location\": " << loc.toJson() << "\n"
<< in << "}";
return ss.str();
} }