aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/type.hpp26
1 files changed, 25 insertions, 1 deletions
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<Type*> 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<Type*> param_types) {
+ Type t;
+ t.kind = TypeKind::FUNCTION;
+ t.return_type = return_type;
+ t.param_types = std::move(param_types);
+ return t;
+ };
};