aboutsummaryrefslogtreecommitdiff
path: root/src/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/types.h')
-rw-r--r--src/types.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/types.h b/src/types.h
index 73b5b63..e8b9488 100644
--- a/src/types.h
+++ b/src/types.h
@@ -10,12 +10,21 @@ typedef enum {
TYPE_CHAR,
TYPE_PTR,
TYPE_ARRAY,
+ TYPE_STRUCT,
} DataType;
typedef struct data_type_node {
DataType type;
struct data_type_node *ptr;
i64 array_size;
+ char *struct_name;
+ struct {
+ char **name;
+ struct data_type_node **type;
+ i64 *offset;
+ i64 num_fields;
+ i64 size;
+ } fields;
} Type;
Type *type_new(DataType type);
@@ -28,6 +37,11 @@ bool type_equals(Type *a, Type *b);
bool is_int_type(Type *type);
bool is_string_type(Type *type);
bool is_convertible(Type *from, Type *to);
+bool is_struct_or_struct_ptr(Type *type);
+
+// Returns the offset of the field in the struct.
+i64 push_field(Type *type, char *field_name, Type *field_type);
+i64 find_field_index(Type *type, char *field_name);
// Type checking / casting expressions to right types
typedef struct ast_node Node;