From 6cc2945c1d1e6ca7bad0542c79de423df5e2db8b Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Fri, 18 Apr 2025 18:13:29 +0000
Subject: [PATCH] implements object type
---
src/Parser/ParsedExpression.hpp | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/src/Parser/ParsedExpression.hpp b/src/Parser/ParsedExpression.hpp
index 06a462b..4acff85 100644
--- a/src/Parser/ParsedExpression.hpp
+++ b/src/Parser/ParsedExpression.hpp
@@ -16,7 +16,7 @@
using ParsedExpressionPtr = std::unique_ptr<ParsedExpression>;
struct ParsedExpression {
- enum class Kind : std::uint8_t { Literal, Variable, Binary, Unary, Call };
+ enum class Kind : std::uint8_t { Literal, Variable, Binary, Unary, Call, Object };
Kind kind;
@@ -29,6 +29,7 @@
ParsedExpressionPtr rhs;
// For function call arguments
std::vector<ParsedExpressionPtr> args;
+ std::vector<std::pair<std::string, ParsedExpressionPtr>> objectMembers;
// Constructor for literal
static ParsedExpressionPtr makeLiteral(const Symbols::Value & val) {
@@ -70,6 +71,13 @@
expr->kind = Kind::Call;
expr->name = name;
expr->args = std::move(arguments);
+ return expr;
+ }
+ // Constructor for object literal
+ static ParsedExpressionPtr makeObject(std::vector<std::pair<std::string, ParsedExpressionPtr>> members) {
+ auto expr = std::make_unique<ParsedExpression>();
+ expr->kind = Kind::Object;
+ expr->objectMembers = std::move(members);
return expr;
}
@@ -116,6 +124,8 @@
auto funcSym = std::static_pointer_cast<Symbols::FunctionSymbol>(symbol);
return funcSym->returnType();
}
+ case Kind::Object:
+ return Symbols::Variables::Type::OBJECT;
default:
throw std::runtime_error("Unknown expression kind");
--
Gitblit v1.9.3