+ removed assertion in mangle_type
authorBoris Boesler <boesler@ipd.info.uni-karlsruhe.de>
Tue, 10 Jul 2001 16:21:47 +0000 (16:21 +0000)
committerBoris Boesler <boesler@ipd.info.uni-karlsruhe.de>
Tue, 10 Jul 2001 16:21:47 +0000 (16:21 +0000)
+ compacted arrays

[r220]

ir/tr/mangle.c
ir/tr/type.c

index 7706b0f..94db0ea 100644 (file)
@@ -47,7 +47,7 @@ mangle_type (type *type)
   ident *res;
 
   assert (type->kind == k_type);
-  assert (type->type_op->code == tpo_class);
+  /* assert (type->type_op->code == tpo_class); */
 
   xoprintf (&mangle_obst, "%I", type->name);
   len = obstack_object_size (&mangle_obst);
index d7b2127..b7a14d2 100644 (file)
@@ -188,9 +188,11 @@ void    remove_class_member(type *clss, entity *member) {
   assert(clss && (clss->type_op == type_class));
   for (i = 1; i < (ARR_LEN (clss->attr.ca.members))-1; i++)
     if (clss->attr.ca.members[i+1] == member) {
-      clss->attr.ca.members[i+1] = NULL;
       break;
     }
+  for(i++; i < (ARR_LEN (clss->attr.ca.members))-1; i++)
+    clss->attr.ca.members[i] = clss->attr.ca.members[i+1];
+  --_ARR_DESCR((clss->attr.ca.members))->nelts;
 }
 
 void    add_class_subtype   (type *clss, type *subtype) {
@@ -215,9 +217,11 @@ void    remove_class_subtype(type *clss, type *subtype) {
   assert(clss && (clss->type_op == type_class));
   for (i = 1; i < (ARR_LEN (clss->attr.ca.subtypes))-1; i++)
     if (clss->attr.ca.subtypes[i+1] == subtype) {
-      clss->attr.ca.subtypes[i+1] = NULL;
       break;
     }
+  for(i++; i < (ARR_LEN (clss->attr.ca.subtypes))-1; i++)
+    clss->attr.ca.subtypes[i] = clss->attr.ca.subtypes[i+1];
+  --_ARR_DESCR((clss->attr.ca.subtypes))->nelts;
 }
 
 void    add_class_supertype   (type *clss, type *supertype) {
@@ -242,9 +246,11 @@ void    remove_class_supertype(type *clss, type *supertype) {
   assert(clss && (clss->type_op == type_class));
   for (i = 1; i < (ARR_LEN (clss->attr.ca.supertypes))-1; i++)
     if (clss->attr.ca.supertypes[i+1] == supertype) {
-      clss->attr.ca.supertypes[i+1] = NULL;
       break;
     }
+  for(i++; i < (ARR_LEN (clss->attr.ca.supertypes))-1; i++)
+    clss->attr.ca.supertypes[i] = clss->attr.ca.supertypes[i+1];
+  --_ARR_DESCR((clss->attr.ca.supertypes))->nelts;
 }
 /* typecheck */
 bool    is_class_type(type *clss) {
@@ -283,11 +289,13 @@ void    set_struct_member   (type *strct, int pos, entity *member) {
 void    remove_struct_member(type *strct, entity *member) {
   int i;
   assert(strct && (strct->type_op == type_struct));
-  for (i = 1; i < (ARR_LEN (strct->attr.ca.members))-1; i++)
-    if (strct->attr.ca.members[i+1] == member) {
-      strct->attr.ca.members[i+1] = NULL;
+  for (i = 1; i < (ARR_LEN (strct->attr.sa.members))-1; i++)
+    if (strct->attr.sa.members[i+1] == member) {
       break;
     }
+  for(i++; i < (ARR_LEN (strct->attr.sa.members))-1; i++)
+    strct->attr.sa.members[i] = strct->attr.sa.members[i+1];
+  --_ARR_DESCR((strct->attr.sa.members))->nelts;
 }
 /* typecheck */
 bool    is_struct_type(type *strct) {
@@ -404,11 +412,13 @@ void   set_union_member (type *uni, int pos, entity *member) {
 void   remove_union_member(type *uni, entity *member) {
   int i;
   assert(uni && (uni->type_op == type_union));
-  for (i = 1; i < (ARR_LEN (uni->attr.ca.members))-1; i++)
-    if (uni->attr.ca.members[i+1] == member) {
-      uni->attr.ca.members[i+1] = NULL;
+  for (i = 1; i < (ARR_LEN (uni->attr.ua.members))-1; i++)
+    if (uni->attr.ua.members[i+1] == member) {
       break;
     }
+  for(i++; i < (ARR_LEN (uni->attr.ua.members))-1; i++)
+    uni->attr.ua.members[i] = uni->attr.ua.members[i+1];
+  --_ARR_DESCR((uni->attr.ua.members))->nelts;
 }
 
 /* typecheck */