1919Type * MakeType (int type ) {
2020 Type * thetype = malloc (sizeof (Type ));
2121 thetype -> type = type ;
22- thetype -> arrayed = 0 ;
2322 thetype -> specialty = NULL ;
2423 thetype -> alias = NULL ;
25- thetype -> optional = 0 ;
2624 switch (type ) {
2725 case TYPE_CLASS :
2826 thetype -> typedata ._class .shadow = 0 ;
@@ -37,6 +35,14 @@ Type* MakeType(int type) {
3735 thetype -> typedata .parameterized .upperbound = NULL ;
3836 thetype -> typedata .parameterized .lowerbound = NULL ;
3937 break ;
38+ case TYPE_LIST :
39+ thetype -> typedata .list .levels = 0 ;
40+ thetype -> typedata .list .contained = NULL ;
41+ break ;
42+ case TYPE_OPTIONAL :
43+ thetype -> typedata .optional .levels = 0 ;
44+ thetype -> typedata .optional .contained = NULL ;
45+ break ;
4046 }
4147 return thetype ;
4248}
@@ -74,6 +80,14 @@ void freeType(Type *t) {
7480 if (t -> typedata .parameterized .upperbound != NULL ) free (t -> typedata .parameterized .upperbound );
7581 if (t -> typedata .parameterized .lowerbound != NULL ) free (t -> typedata .parameterized .lowerbound );
7682 break ;
83+
84+ case TYPE_LIST :
85+ if (t -> typedata .list .contained != NULL ) free (t -> typedata .list .contained );
86+ break ;
87+
88+ case TYPE_OPTIONAL :
89+ if (t -> typedata .optional .contained != NULL ) free (t -> typedata .optional .contained );
90+ break ;
7791 }
7892
7993 if (t -> alias ) free (t -> alias );
@@ -95,7 +109,6 @@ Type* copyType(Type* t) {
95109
96110 Type * copy = malloc (sizeof (Type ));
97111 copy -> type = t -> type ;
98- copy -> optional = t -> optional ;
99112 if (t -> type == TYPE_LAMBDA ) {
100113 copy -> typedata .lambda .arguments = copyTypeArray (t -> typedata .lambda .arguments );
101114 copy -> typedata .lambda .returntype = copyType (t -> typedata .lambda .returntype );
@@ -109,8 +122,13 @@ Type* copyType(Type* t) {
109122 copy -> typedata .parameterized .shadow = t -> typedata .parameterized .shadow ; // number of $s
110123 copy -> typedata .parameterized .lowerbound = copyType (t -> typedata .parameterized .lowerbound );
111124 copy -> typedata .parameterized .upperbound = copyType (t -> typedata .parameterized .upperbound );
125+ } else if (t -> type == TYPE_LIST ) {
126+ copy -> typedata .list .contained = copyType (t -> typedata .list .contained );
127+ copy -> typedata .list .levels = t -> typedata .list .levels ;
128+ } else if (t -> type == TYPE_OPTIONAL ) {
129+ copy -> typedata .optional .contained = copyType (t -> typedata .optional .contained );
130+ copy -> typedata .optional .levels = t -> typedata .optional .levels ;
112131 }
113- copy -> arrayed = t -> arrayed ;
114132 copy -> alias = t -> alias == NULL ? NULL : strdup (t -> alias );
115133 copy -> specialty = t -> specialty == NULL ? NULL : strdup (t -> specialty );
116134 return copy ;
0 commit comments