From 13463272ad3cf0c725999886651b5e779a45dd9d Mon Sep 17 00:00:00 2001 From: Boris Boesler Date: Tue, 10 Jul 2001 16:21:47 +0000 Subject: [PATCH] + removed assertion in mangle_type + compacted arrays [r220] --- ir/tr/mangle.c | 2 +- ir/tr/type.c | 28 +++++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ir/tr/mangle.c b/ir/tr/mangle.c index 7706b0f23..94db0ead5 100644 --- a/ir/tr/mangle.c +++ b/ir/tr/mangle.c @@ -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); diff --git a/ir/tr/type.c b/ir/tr/type.c index d7b21272e..b7a14d2cc 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -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 */ -- 2.20.1