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