From 85918e5c3ef2f109583c7f414e7d604df0272c03 Mon Sep 17 00:00:00 2001 From: Cori Barker Date: Tue, 10 Mar 2026 15:13:23 +0000 Subject: refactored types --- include/type.hpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/type.hpp b/include/type.hpp index c46ff34..9b25d24 100644 --- a/include/type.hpp +++ b/include/type.hpp @@ -1,6 +1,6 @@ #pragma once -enum struct Type { +enum struct TypeKind { INT, CHAR, BOOL, @@ -8,4 +8,28 @@ enum struct Type { FLOAT, DOUBLE, VOID, + FUNCTION, +}; + +struct Type { + TypeKind kind; + + Type* return_type = nullptr; + std::vector param_types; + + static Type makeInt() { return { TypeKind::INT }; } + static Type makeChar() { return { TypeKind::CHAR }; } + static Type makeBool() { return { TypeKind::BOOL }; } + static Type makeString() { return { TypeKind::STRING }; } + static Type makeFloat() { return { TypeKind::FLOAT }; } + static Type makeDouble() { return { TypeKind::DOUBLE }; } + static Type makeVoid() { return { TypeKind::VOID }; } + + static Type makeFunction(Type* return_type, std::vector param_types) { + Type t; + t.kind = TypeKind::FUNCTION; + t.return_type = return_type; + t.param_types = std::move(param_types); + return t; + }; }; -- cgit v1.2.3