A simple scripting language in C++
Ferenc Szontágh
2025-04-18 6cc2945c1d1e6ca7bad0542c79de423df5e2db8b
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");