summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2022-08-09 11:01:47 -0300
committermrb0nk500 <b0nk@b0nk.xyz>2022-08-09 11:32:02 -0300
commit95b4a2eff9f5d56254b42a94c2e3ee4a4dfff3d5 (patch)
tree561b313398622dd487d43acfa6a116900637c738
parent5cd71a01d9bc54eef12c95361646e65b85de04d3 (diff)
rt_struct: Make members have a member type, and use a single dimension
count, rather than having seperate dimension counts for pointers, and arrays
-rw-r--r--rt_struct.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/rt_struct.h b/rt_struct.h
index 891443d..2e14ad3 100644
--- a/rt_struct.h
+++ b/rt_struct.h
@@ -7,6 +7,7 @@
#include <time.h>
typedef enum rts_type_tag rts_type_tag;
+typedef enum rts_member_type rts_member_type;
typedef struct rts_type rts_type;
typedef struct rts_member rts_member;
@@ -46,6 +47,19 @@ enum rts_type_tag {
NUM_TAG
};
+enum rts_member_type {
+ MBR_NORMAL,
+ MBR_ARRAY,
+ MBR_ARRAY_NEG1,
+ MBR_ARRAY_ZERO,
+ MBR_ARRAY_NULL,
+ MBR_PTR,
+ MBR_PTR_ARRAY,
+ MBR_PTR_ARRAY_NEG1,
+ MBR_PTR_ARRAY_ZERO,
+ MBR_PTR_ARRAY_NULL,
+};
+
struct rts_type {
rts_type_tag tag; /* Type Tag. */
char *name; /* Name of type. */
@@ -57,10 +71,11 @@ struct rts_type {
};
struct rts_member {
- char *name; /* Name of member. */
- int ptr_count; /* Pointer count of member. */
- int arr_count; /* Array dimension count of member. */
- rts_type *type; /* Type of member. */
+ char *name; /* Name of member. */
+ rts_member_type mbr_type; /* Member type. */
+ int dim_count; /* Dimension count (used by all types except MBR_NORMAL). */
+ size_t *dim_sizes; /* Size of each dimension (used by MBR_ARRAY, and MBR_PTR_ARRAY). */
+ rts_type *type; /* Type of member. */
};
#define TYPEDEF_RTS(name, type) \