Selaa lähdekoodia

bugfix: remove field from virtuals before removing from lookup (hashed_name gets overwritten)

ncannasse 7 vuotta sitten
vanhempi
commit
ecb8c45f3e
1 muutettua tiedostoa jossa 5 lisäystä ja 4 poistoa
  1. 5 4
      src/std/obj.c

+ 5 - 4
src/std/obj.c

@@ -542,10 +542,6 @@ static void hl_dynobj_delete_field( vdynobj *o, hl_field_lookup *f ) {
 		// no erase needed, compaction will be performed on next add
 	}
 
-	int field = (int)(f - o->lookup);
-	memmove(o->lookup + field, o->lookup + field + 1, (o->nfields - (field + 1)) * sizeof(hl_field_lookup));
-	o->nfields--;
-
 	// remove from virtuals
 	vvirtual *v = o->virtuals;
 	while( v ) {
@@ -553,6 +549,11 @@ static void hl_dynobj_delete_field( vdynobj *o, hl_field_lookup *f ) {
 		if( vf ) hl_vfields(v)[vf->field_index] = NULL;
 		v = v->next;
 	}
+
+	// remove from lookup
+	int field = (int)(f - o->lookup);
+	memmove(o->lookup + field, o->lookup + field + 1, (o->nfields - (field + 1)) * sizeof(hl_field_lookup));
+	o->nfields--;
 }
 
 static hl_field_lookup *hl_dynobj_add_field( vdynobj *o, int hfield, hl_type *t ) {