فهرست منبع

bugfix when more than 63 virtual fields (close #491)

Nicolas Cannasse 3 سال پیش
والد
کامیت
eff5a9e250
1فایلهای تغییر یافته به همراه3 افزوده شده و 0 حذف شده
  1. 3 0
      src/std/obj.c

+ 3 - 0
src/std/obj.c

@@ -590,9 +590,12 @@ vvirtual *hl_to_virtual( hl_type *vt, vdynamic *obj ) {
 			o->virtuals = v;
 			// recast
 			if( need_recast ) {
+				bool extra_check = vt->virt->nfields > 63;
 				for(i=0;i<vt->virt->nfields;i++)
 					if( need_recast & (((int64)1) << ((int64)i)) ) {
 						hl_obj_field *f = vt->virt->fields + i;
+						if( extra_check && hl_lookup_find(o->lookup,o->nfields,f->hashed_name) == NULL )
+							continue;
 						if( hl_is_ptr(f->t) )
 							hl_dyn_setp(obj,f->hashed_name,f->t,hl_dyn_getp(obj,f->hashed_name,f->t));
 						else if( f->t->kind == HF64 )